インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。
キャスト組込み関数は、強力な型チェックを行う際に使用されます。これらの組込み関数は、値を変更することなく、1 つの型から別の型に変更します。
2 つの int32 ベクトルを受け取り、第 1 引数に対してビット単位の左シフトを行う _mm512_sllv_epi32 について考えてみます。 この組込み関数のプロトタイプは、次のとおりです。
extern __m512i __cdecl _mm512_sllv_epi32(_m512i v2,_m512i v3);
float32 ベクトルの各要素に対してビット単位の左シフトを行うと仮定します。コンパイラーにより、型の不一致エラーが出力されるため、この組込み関数に _m512 (float32) データ型を渡すことはできません。
_m512i shift; _m512 fvec1, fvec2; fvec2 = _mm512_sllv_epi32(fvec1, shift); // 型の不一致 - 第 1 引数は _m512 でなければなりません
キャスト組込み関数の 1 つを使用してみましょう。
_m512i shift; _m512 fvec1, fvec2 ; fvec2 = _mm512_castsi512_ps(_mm512_sllv_epi32(_mm512_castpd_si512(fvec1), shift));_mm512_castps_si512(fvec1) は float32 ベクトルを int32 ベクトルに変換するため、_mm512_sllv_epi32 組込み関数で処理できます。_mm512_castsi512_ps は、_mm512_sllv_epi32 の結果を int32 ベクトルから float32 ベクトル fvec2 に変換します。
つまり、キャスト組込み関数により、可能なすべてのデータ型で組込み関数を使用することができます。