x86命令の所要クロック計測スレ
■ このスレッドは過去ログ倉庫に格納されています
01521
2005/03/24(木) 12:21:19SSEの加算・乗算は、並列実行できるみたいだ。
実行ポートが同じなのでできないと思ったが、ユニットが違えばいいみたい。
スループット2の命令を毎クロック発行すれば並列実行になる。
Pentium4のMMXはかなり糞だが、SSEは各ユニットが128bitで並列実行するので、
クロック表ではPM・K8より遅いもののポテンシャルは高く、しかも思い通りの性能が出る。
P4のMMXはSSE int用のユニットを半分だけ稼動している感じなので遅い。
PMのSSE intがMMX用のユニットを2つ同時稼動しているのと好対照だ。
SSEのコードだと、クロック表どおりの結果で、ループのオーバーヘッドもない。見事。
ここはハーフスピードだろう。P4のSSEは(例外はあるが)クロック数が偶数になる。
普通の整数命令だと、ループ処理とユニットが競合するのかオーバーヘッドあり。
倍速ALUは本当にすごくて、実際にレイテンシが0.5。それが2個もある。
トレースキャッシュから取り出すのが最大3μop/clkなのでフル稼働はできない。
まあ、倍速ALUは高速化のためと言うより、低速化を抑えるギミックなんだろうけど。
L1Dataがライトスルー(StoreされるたびL2にも書き込む)なので、L1ヒットでもStore性能は低い。
movapsでも3.5clkかかり、movqが2.22clk。ハンパなのはL2に書いてるからだろう。
これでもPenMのL2(movapsストアが5clk)よりは速いが、けっこう性能に響きそうである。
そのために6キャッシュライン分のストアバッファがあるらしい。
バッファの性能はけっこういいみたい。
意外にも、アライメントが合ってないのは平気だった。
キャッシュラインをまたいだときはL1/L2Loadで1回13〜17clk、L2Storeで78clk。これがでかい。
ロードはまだしも、ストアが悲惨だ。全体で平均すると通常の4〜5倍くらい遅くなる。
PenMのL2も調べてみた。
帯域は命令によらず3.2byte/clk。プリフェッチありで4byte/clk。
またいだときのクロックが、命令によって違う。movups 19.5、movq 6.5、mov 15clk。
またしてもMMXマンセーな結果に。
■ このスレッドは過去ログ倉庫に格納されています