AVX-512 のマニュアルを見てると、よく分からないことがいくつかあります。

  • 64bit モードの場合 zmm だけでなく ymm や xmm も 32 本使えると書いてある (1.2.2 32 SIMD Register Support) 。32 本使うためには VEX プレフィックスではなく EVEX プレフィックスを使う必要がある (4.1 OVERVIEW SECTION) が、命令一覧を見ても EVEX プレフィックスによる ymm や xmm の使用は見つからないし、Chapter 4 AVX-512 Instruction Encoding を見ても具体的な記述が無い。
    4.6.4 Vector Length Orthogonality に書いてあった。ただし、命令一覧に記載されていないのは間違いないので、ymm/xmm の場合に命令がどう動作するのかは仕様上決まっていないことになる(特に AVX1/2 に存在しない命令の場合)。
  • zmm を使う場合の、VPADDB や VPADDW を筆頭とする バイト/ワード 単位の演算が記載されていない。(VPMOVZXBQ や VPMOVQB みたいな変換命令はある)

AVX-512 は LNI(Larrabee New Instructions: Xeon Phi の命令セット)を元にしているわけですが、LNI には ymm/xmm レジスタは元々存在せず、バイト/ワード 単位の演算も存在しません。Xeon Phi のマニュアルからコピーしてくるときに追加し忘れたのか、やっぱりホントにサポートしていないのか、どっちなんでしょう…

バグ修正
  • SSSE3 をサポートしないプロセッサでクラッシュすることがあった。

Read the rest of this entry

実際に VGATHER 系命令とVGATHERと等価なことを要素ごとにバラして行うコードのベンチマークを取ってみました。

Read the rest of this entry

Haswell の新機能はいろいろありますが、全世界から(?)切望されていたのがこの VGATHER 系命令です。

Read the rest of this entry

性能向上
  • 共通: x64 バージョンで、デコードを高速化した。

Read the rest of this entry

そろそろ CPU World に i3-4130 の CPUID レポートが届いてるかなー、と見に行ったんですが、なんとビックリ、AVX2 も BMI1/2 も ABM (LZCNT) もサポートしていることになってるじゃないですか。じょ、冗談じゃ…

震える指で ark.intel.com の i3-4130 の仕様を見に行くと、AVX2 がサポートされるという記述に修正されています。(゜Д゜)

ともあれ、i3 は「ごく特殊な命令」を除くとサポートされる命令は i7 と同じ、という状態は(Nehalem 以降)継続した、ということになります。

教訓:超レアものという訳でもないのだから1週間ぐらい待ってから買いましょう。

Intel 最適化マニュアルを見ると、Haswell ではシャッフル関係命令が遅くなっているようです。せっかく AVX2 で SIMD-int が 256bit 幅で使えるようになったのに遅くなったのでは意味が無いのですが、ともあれ前回と同様に計測してみます。あと、正確にはシャッフル関係命令ではありませんが、PMOV[ZS]X 系命令も計測します。

Read the rest of this entry

x86/x64 最適化勉強会 #6 で聞いてきましたが、AVX-512 なるものがアナウンスされてました。名前から予想される通り、SIMD レジスタが 512bit になります。SIMD レジスタが 512bit というと Xeon Phi は最初からそうなっているのですが、これが普通の Xeon に降りてくるイメージです。

Read the rest of this entry

09月01日にようやく Haswell ベースの i3/Pentium が出たので買おうかと思ってたのですが、念のため ark.intel.com を見に行ったら、i3 は AVX2 をサポートしないように書かれています。なんてこった。せっかく(主に金銭的な問題で) i3 が出るまで待ってたのに、これじゃ使えないじゃないか。

Nehalem(正確には Clarkdale)や Sandy Bridge や Ivy Bridge の時は、少なくとも SSE/AVX 命令のサポート状況に関しては i7/i5 と同じでした(参考: i3-530, i3-2110, i3-3210)。だからこそ今回も大丈夫だろうと踏んで i3 が出るまで待ったのですが…

CPU World には i3 は AVX2 をサポートしていると書かれているのですが、これは単に新しい CPU のためにデータベースに乗っていないから i7 の情報をコピーしてあるだけのように見えます(ページの CPU ID のタブを参照)。

i3 がダメとなると i7 を買う必要がある(コーデックの開発上 HT が必須で、i5 は HT をサポートしない)のですが、いろいろと前提条件が変わって面倒です。主に金銭的に。

Windows 7 で使える undocumented API を使った方法。

Read the rest of this entry