基本的に、これに相当するAVX2組み込み関数を作成するにはどうすればよいですか? result_in_float
は__m256
であり、はshort int*
またはshort int[8]
であると仮定します。avx命令を使用してfloatのベクトルをshort intに変換するにはどうすればよいですか?
for(i = 0; i < 8; i++)
result[i] = (short int)result_in_float[i];
私は山車が固有__m256i _mm256_cvtps_epi32(__m256 m1)
を使用して32ビットの整数に変換することができることを知っているが、16ビット整数にさらにこれらの32ビット整数に変換する方法は考えています。そして、私はそれだけでなく、それらの値を(16ビット整数の形で)メモリに格納することを望んでおり、私はベクトル命令を使ってそのすべてを行いたいと思います。
インターネットで検索すると、_mm256_mask_storeu_epi16
という名前の固有名詞が見つかりましたが、使用法の例が見つからないため、そのトリックを行うかどうかはわかりません。
私はCとC++の両方を使用します。これらの組み込み関数は、どちらからでも呼び出すことができます。だから、それが理由です。 – pythonic
適切なバイトセレクトでvpshufbを使用し、上位128ビットレーンから下位に値を下げるシャッフルを使用します。 –
オーバーフローでラップするのではなく飽和状態になってもかまいません(intからshort、つまりfloatではなくint stepへ)。 – harold