トップページ > プログラム > 2015年04月23日 > veeSmdX3

書き込み順位&時間帯一覧

17 位/172 ID中時間01234567891011121314151617181920212223Total
書き込み数0020000010000000000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
919
【C++】高速化手法【SSE】

書き込みレス一覧

【C++】高速化手法【SSE】
919 :デフォルトの名無しさん[]:2015/04/23(木) 02:36:43.48 ID:veeSmdX3
core i7 2600 Sandy BridgeでAVX使って自作ルーチンの最適化してるけど

1ループの命令数は40個くらい
ほとんどスループット1の命令だけを使ってるけど
長い依存関係があるから1ループのレイテンシーは大きい
(主にadd_ps, mul_ps, rsqrt_psとか)

こういう場合って理論上は40clock/loopで計算出来ると思うけど
CPUの能力的に(物理レジスタ数?out of order実行能力?のせいで)
1ループのレイテンシーが大きすぎると理論値を達成できなくなると思う。
これが達成出来なくなるのって、1ループのレイテンシーが
どのくらいになったときなんだろう

あと、これを避けるために
1次キャッシュに収まるくらいの一時領域を用意して
ループを小分けにするのって有効?
(例えば単純化した例 for a = b + (c * d)
-> for temp = c * d, for a = b + temp)

試す予定だけど、理論的予測とか
予測に使える資料とかあったら教えて欲しい
【C++】高速化手法【SSE】
920 :デフォルトの名無しさん[]:2015/04/23(木) 02:40:32.90 ID:veeSmdX3
書き忘れた条件、ループ間の依存関係はまったく無い
【C++】高速化手法【SSE】
922 :919[sage]:2015/04/23(木) 08:48:37.88 ID:veeSmdX3
>>921
小さい例ならね、依存関係が大きくなってきたときに
次の命令に進むためにCPU内で保留しておける依存関係の量が
どのくらいなのかなって疑問に思った

少しデータ見つけた。
6ページが関係してるっぽいけど、intelの最適化マニュアルと合わせてみても詳しく掴めない
物理レジスタファイルっていうのは、AVXとSSEとFPUと汎用で共有されてる?
SandyBridgeのリオーダーバッファが168らしいから
命令数40/loopだとすると、4loop先まで再配置が利く?
http://www.slideshare.net/herumi/x86opti6


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。