8 文字をメモリからパックされた単精度浮動小数点数として __m256 変数にロード
ガウス ブラー アルゴリズムでは、より高速な実行のための最適化を実現できます。データをベクトルレジスタに効率的にロードすることによって。このような最適化の 1 つは、float の配列を __m256 変数に置き換えることです。この記事では、AVX2 命令の機能を活用して、このタスクに最適なソリューションを提供します。
AVX2 命令を使用したソリューション
8 文字をメモリから __m256 変数に効果的にロードするにはAVX2 を使用する場合は、次の命令が推奨されます。
VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
命令の詳細
追加の最適化
このプロセスをさらに最適化するには、ブロードキャスト ロードを使用して VPMOVZXBD 命令と上位 64 ビットの Vpshufb 命令を供給することを検討してください。この戦略により全体の uop 数が削減され、効率が向上します。
<code class="pseudocode">__m256 b = [float(new_image[x+7]), float(new_image[x+6]), ... , float(new_image[x])]; __m256 b = _mm256_broadcast_ss(&new_image[x]) _mm256_shuffle_epi8(b, _mm256_set1_epi8(0)); // fills upper 64 bits with zeroes _mm256_cvtps_epu32(b); // convert to integers _mm256_cvtepu32_ps(b); // convert back to floats</code>
次善の手法を回避する
その他の考慮事項
以上がAVX2 を使用してメモリから 8 文字をパックされた単精度浮動小数点として __m256 変数にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。