ベストアンサー
32ビットアセンブラ:
mov eax, 0
cpuid
test ecx, 0x0001
当然あなた探しているフラグを確認したら、最初に4つのGPレジスタをプッシュし、それらをポップするようにします。 SSE3のモニター/待機(ビット3なので0x0080)や補足機能(ビット9なので0x0200)などに関連する他のフラグも使用できます。
Cまたはに組み込むのに十分簡単です。コンパイラが気に入る価値があると仮定して、インラインアセンブラを備えたほとんどの「実際の」プログラミング言語。
回答
AVXは、Intelの多くのx86ベクトル拡張機能の1つです。これは、それぞれIntelおよびANDのSandy Bridge / BulldozerシリーズのCPUから使用されています。
ベクトル拡張とは何ですか?
従来のCPUアーキテクチャ(スカラー処理)はで動作します。 SISDと呼ばれるモデル:単一の命令、単一のデータ。命令を順番に操作するプロセッサコアがあり、それぞれが一度に単一のオペランドのセットを操作します。
これは、ほとんどのタイプのワークロードでうまく機能します。ただし、一般的に、一部のタイプのコンピューティング集約型ワークロードには適していません。たとえば、写真編集について考えてみましょう。画像の明るさを2倍にしたい場合は、画像の明るさをピクセルごとに2倍にする必要がありますが、これは遅いです。各ピクセルは実際には他のピクセルから独立しているため、大規模な並列処理:十分なコンピューティングリソースと適切なアーキテクチャがあれば、理論的にはすべての作業を1回の操作で実行できます。
ベクトルプロセッサを入力してください。これらは、SIMDと呼ばれるモデルで動作します。ベクトルプロセッサは、単一の要素を1つずつ操作する代わりに、多くのデータ要素を1つの大きな要素(通常は256ビット以上)に連結してから、その要素に対して操作を実行します。その結果、ベクトルプロセッサは、従来のプロセッサでは複数の操作が必要になる場合に、1回の操作で多くのデータ要素を処理できます。
X86などの従来のCPUアーキテクチャは、明らかにSIMD操作用に設計されていません。何年にもわたって、Intelはx86 ISAに拡張機能を追加して機能を強化してきました。また、SIMD拡張命令は、最も早く登場したものの1つでした。
PentiumのMMXから始まりましたが、かなりの効果がありました。明白な制限。その後、IntelはSSE命令セット拡張を追加し、これらの制限の一部を削除しました。最終的にAVXを導入するまで、今後10年間でSSEをさらに繰り返しました。
AVXはかなり重要な改善を導入しました。その前身であるSSE4.xよりも
ベクトルレジスタサイズが128ビットから256ビットに増加し、潜在的なスループットが2倍になりました。命令は従来の2オペランド形式(a = a + b)から3オペランド形式( a = b + c)、柔軟性が向上しました。配置ルールも緩和されました。