CPU系の資料の更新を行ったときに気になったので調べてみました。毎度の通りIntel系CPUの最適化マニュアルよりです。
基本的にはその前の世代であるIvyBridgeとの比較になります。
実際にベンチマークをやったわけではないので様々なサイトでやっているベンチマークの結果とは一切関係なく、純粋なアーキテクチャ勝負としてみたときの物です。
まあ、追加された命令群を使えば有利だよな
AVX2があるのでそれを使われるとIvyBridgeとかなり差が出ます。
特に256bit単位でのPacked整数演算が出来る上にどうも速度は128bit単位と同じなので
単純計算で256bitのPacked整数演算はIvyBridgeから見ると2倍前後の速度で出来ます。
また、Haswellから積和演算(r0 = r0 * r1 + r2 のように乗算と加算を一命令で行う命令)が有効になるのでこれを使うとうまく使えば2倍を超える速度の演算ができます。
もちろん、メモリのロード/ストアがあるのでかなりうまく命令を書かないと速度は向上しませんが、それでも有利なことこの上ないです。
Packed整数演算は科学技術演算やゲーム系で使用されるので表には出にくいですが、命令を使えるようになっているなら大きいです。
メモリの扱いもAVX2で完全に256bit単位の演算をやるためにIvyBridge時代までの128bit x2から256bit x1に変更したようなので
メモリアライメントさえ合えばこの辺も速さにつながりますね。
また、どうもmemcpyやmemsetのCPU側内部演算のやり方も変わるらしいです。
資料によると以下のようになるようです。
CPUアーキテクチャ | memcpy、memset処理 |
---|---|
アセンブリ命令 | REP MOVSB(memcpy)、REP STOSB(memset) |
IvyBridge | 128bitSIMDレジスタを使用した転送(適応できる場合) |
Haswell | 256bitSIMDレジスタを使用した転送(適応できる場合) |
なにげにすごいですね。もちろん処理対象のメモリサイズがある程度大きくないと意味があまりありませんが・・・。
これが適応されるとメモリコピー系処理もCPU側に任せた方が速いわけですね。
なにげにPacked浮動小数演算で除算および平方根演算速度が上がっている
そもそもx64では浮動小数演算もSSE2以上(つまりPacked浮動小数点演算で一つ分だけを使用する)を使うのでFPUの命令速度は上げる意味がないと言うことでしょうか・・・。
それでもSSE以上を使う浮動小数点演算で除算や平方根演算の速度が上がっているのでそれを多用する演算であれば速度的には有利です。
まあ、浮動小数点除算は通常のアプリでは登場頻度が低いので効きにくいですが、科学技術演算やゲーム系では有利ですね。
命令発行ポートの強化がここに
通常のプログラムでも影響があるようなものがこれ。一部の命令のスループットが良くなっているようです。
レイテンシ(=(命令が開始されてから完全に終了するまでのクロック数)=)は変わらなくてもスループット(=(命令が開始されてから次の(同種の)命令を受け取れるようになるまでのクロック数)=)が良くなれば全体的な速度は向上しますので。
似たような命令が複数来たときの速度が向上できればSMTを使ったときの処理速度も向上できますのでいいですね。
もちろん、一つのコアに対してでもこの向上は有効ですよ。
CPUが代替わりすると一部の命令では速度を下げることも
と言ってもおそらくIntelが「使用頻度が低い命令」と考えている物だと思います。
限りあるトランジスタ数をどこに割くかを考えたときにそうなるのでしょう。
それに対する影響はあまりないと考えていいと思います。
デスクトップPCはHaswell以降しばらくアーキテクチャが変わらない様子
そうなるとこのタイミングがデスクトップPCの替え時でしょうかね。
モバイル系もHaswellでは電力効率が大幅にアップしているので良くなります。
が、こちらは後ろに次のアーキテクチャがあるので持っているデバイスの状態を比べてみて、と言うところでしょうか。