[過去ログ] スレ立てるまでもない質問はここで 116匹目 (1001レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
72
(3): [age] 2012/01/11(水)20:41 AAS
for( int i = 0; i < N; i++ )
{
  fD[ i ] = fB[ i ] * fA[ i ];
  fE[ i ] = fC[ i ] * fA[ i ];
}

N : 4の倍数
fA〜fE : 16バイトアラインされたfloat配列

CPU : Westmere
OS : WindowsXP

これをSSE(movaps、mulps)を使うことでループを1/4にしたら6倍も速くなりました。
省7
76: 72 2012/01/11(水)22:41 AAS
>>73
結果はSSE適用前後で一致していますし、単純な処理でアルゴリズムも間違いようがないです。

>>74
ベクトル化(float×4)によるサイクル1/4とメモリアクセスのサイクル1/4です。
それぞれスループットやレイテンシが違うので、単純なかけ算は意味をなさないでしょうけども・・・
77: 72 2012/01/11(水)22:42 AAS
あ、掛け算もおかしいですね・・・
やっぱり1/4以上になるのは変ですね。
80: 72 2012/01/11(水)22:54 AAS
>>79
実はOpenMPでマルチスレッド(物理4コア、論理8コアCPU)によるさらなる高速化を試みたんですが、
スレッド生成のオーバーヘッドが大き過ぎて逆に遅くなるという始末でしたw
対象のループ処理がシングルスレッドで30000クロックほどなので、
スレッド生成のオーバーヘッドのインパクトが大きいということになってしまいます。

あと、Win32APIのスレッドを使って、サスペンドでCreateThreadした後、ResumeThreadで並列処理させるところから
計測を開始する方法でスレッド生成オーバーヘッドを含まない速度を評価することも試みたんですが、
これまた凄まじいクロックがかかってしまい意味がありませんでした。
スレッドのコンテキスト切り替えもmsオーダーの時間がかかってしまうのでしょうか・・・
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s