AVXでは整数演算が拡張されていないため使用できないと言うことを書きましたが・・・。
ちょっと思ったことがあったので、手元にあるIntelのCPU命令などの資料を最新版に更新してみたところ・・・。
AVX2が命令仕様書に追加されている
一応これでもIT系の記事には目を通しているはずだったのですが・・・。
どうやら次の段階でAVXが拡張されてAVX2になるらしく、そのときにPacked整数演算もいろいろと拡張されるようです。
詳しくはそれについて書かれている命令仕様書を見ると良いと思います。
(「Intel」と「319433」で検索を書ければ出てくると思います。後者の番号はIntel内の資料番号です)
ただし、「命令が拡張される」と言うことしか書いていませんので、どのCPUで使用できるとかは書いてありません。
どうもHaswellあたりで追加される可能性があるとか何とか。確実ではないので信頼しないでくださいね。
AVX2を使用するときにはAlignmentに要注意
といっても、SSE2の時のも出てきた物の拡張なので難しいことはありません。
単に16bytes Alignmentを要求されていた物が32bytes Alignmentになるだけですので。
微妙な書き換えが必要になるだけだと思います。面倒なことに変わりないですが。
CPUIDの取得もちょっと面倒
AVX2のフラグがある位置がeax=0x00000007である上に、このときにecx=0x00000000を指定して呼び出さないと取得できない、と言うことが分かり面倒だな、と。
こうなるとVisualStudio2005の組み込み命令であるかないかを判定することはx64の実行バイナリで不可能であることが確定してしまい問題が。
VisualStudio2008以降であれば__cpuidexという組み込み命令がいつの間にか追加されていて、
__cpuidから引数が一つ追加された形になっているので、それを使うことになります。
これで実装されてればいろいろと高速化が
特にH.264の処理が大幅に高速化できることは疑いようがないと思います。H.264の画像処理は整数演算が主なので。
ほかにも単に演算のビット幅が拡大するだけで機能が変わらないことから2D系の描画速度も大幅に向上できることになるでしょう。
(もちろん、命令終了までのクロック数がSSE2と比べて2倍以上にならない、と言う条件下で)
Intel Parallel Studio 2013も出たことですのでね・・・。(実はここにAVX2と言う文言があったのが気になったためだったりする)
この拡張のされ方は
AVXとAVX2の関係が妙にSSEとSSE2の関係に似ているような気がするのは私の気のせいでしょうか・・・。
AVX(とSSE)が浮動小数のPacked演算拡張が主だったのに対してAVX2(とSSE2)が(整数演算を含む)全般的な拡張になったら本当にそうなってしまうような気がします。