最終更新:2017-07-21 (金) 11:33:02 (2469d)  

AVX
Top / AVX

Intel Advanced Vector eXtentions

32nmで製造される次世代アーキテクチャの「Sandy Bridge」に搭載される新しい拡張命令?

AVXでは算術演算命令?が131個、非算術演算命令?が126個定義されており、従来のSSE命令のほぼスーパーセットとして定義されている

http://software.intel.com/en-us/avx/

変更点

  • レジスターを256bitに拡張
    • 従来128bit幅だった「XMM0~15」のSSEレジスターを、それぞれ256bit幅に拡張した「YMM0~15」に変更した。つまりSSEユニットとAVXユニットはレジスターを共用する形になる。
  • エンコード方式を変更
    • 機械語での命令の先頭に「C4」や「C5」があった場合、その後ろに「命令長が何byteあるか」「どんなレジスターを使うか」を格納する「Payload」フィールドを追加した
  • 256bit SIMD演算をサポート
  • 3・4オペランド命令を導入
    • 従来のx86MMX/SSESSE4の「ほとんど」が2オペランド命令だった。2オペランド命令とは、例えばSSEで追加されたADDPS(Add Packed Single-Precision Floating-Point Values)という命令は、以下のようなフォーマットである。
  • ADDPS xmm1, xmm2/m128
    • つまり、命令に対する被演算子(オペランド、xmm1やm128など)が2つしか指定できない。この命令を実行すると、xmm1にxmm2かm128のどちらかを加算して、その結果をxmm1に書き戻す。つまりxmm1の値が書き換わってしまうので、元の値を保持しておきたい場合、実行に先立って値をどこかにコピーしておく必要がある。
    • AVXではこれに対し、3ないし4オペランドがサポートされる。例えばADDPSに対応するAVX命令としては、3オペランドの以下のような命令が用意される。
  • VADDPS xmm1, xmm2, xmm3/m128(m256も可)
    • この場合、xmm2とxmm3もしくはm128(256)の値を加算し、結果をxmm1に書き戻すことになる。つまり元の値は残されることになる。
  • FMA(Fused Multiply Add)命令をサポート
    • FMAというのは、例えば「A=B×C+D」というフォーマットの命令である。自然科学の分野で、こうした演算は非常に多く利用されており、AVXではこれを1命令で実行できる命令セットを用意した。

AVX2

  • 浮動小数点のFMA(積和演算)に対応
  • 256ビット長の整数ベクトル演算(整数演算SIMD機能)に対応

512bit

レジスタ

OSの対応


このPDFへのリンク

参考