SSE、AVX、または AVX-512 を搭載した Intel プロセッサは、8 ~ 32 の SIMD レジスタを持つことができます (以下を参照)。レジスタの数は、32 ビット コードか 64 ビット コードかによっても異なります。したがって、呼び出すと_mm_load_ps
、値が SIMD レジスタにロードされます。すべてのレジスタが使用されている場合は、一部をスタックにスピルする必要があります。
多数の変数int
またはスカラーfloat
変数があり、コンパイラーが現在「生きている」変数をすべてレジスターに保持できない場合とまったく同じです-ロード/ストア組み込み関数は、ほとんどの場合、アライメントについてコンパイラーに通知するため、およびポインターの代替として存在します-他の C データ型へのキャスト。実際のロードまたはストアにコンパイルする必要があるため、またはコンパイラがベクトルロードまたはストア命令を発行する唯一の方法であるという理由ではありません。
SSE を備えたプロセッサー
8 128-bit registers labeled XMM0 - XMM7 //32-bit operating mode
16 128-bit registers labeled XMM0 - XMM15 //64-bit operating mode
AVX/AVX2 搭載プロセッサー
8 256-bit registers labeled YMM0 - YMM7 //32-bit operating mode
16 256 bit registers labeled YMM0 - YMM15 //64-bt operating mode
AVX-512 搭載プロセッサー (2015/2016 サーバー、Ice Lake ラップトップ、?? デスクトップ)
8 512-bit registers labeled ZMM0 - ZMM31 //32-bit operating mode
32 512-bit registers labeled ZMM0 - ZMM31 //64-bit operating mode
ウィキペディアには、このAVX-512に関する優れた要約があります。
(もちろん、コンパイラは、AVX-512 命令の使用が許可されている場合、x/y/zmm16..31 のみを使用できます。AVX-512 対応の CPU を使用しても、動作するようにコンパイルされたマシン コードを実行する場合は役に立ちません。 AVX2 のみの CPU。)