AVX2 および BMI2 を使用したマスクに基づく左要素の効率的なパッキング
AVX2 では、効率的な左パッキングを実現するには、特定の命令とテクニックを利用する必要があります。 1 つのアプローチは、レーンクロス変数シャッフルに AVX2 の vpermps (_mm256_permutevar8x32_ps) を利用し、ビットごとの操作に BMI2 の pext (Parallel Bits Extract) を利用することです。
マスク生成に BMI2 を利用する
BMI2の範囲この命令により、ビットマスクから特定のビットを抽出できるようになり、オンザフライで車線横断シャッフル制御データを動的に生成するメカニズムが提供されます。これにより、事前に計算された大規模なルックアップ テーブル (LUT) が不要になります。
アルゴリズム
アルゴリズムには次のものが含まれます。
パフォーマンスに関する考慮事項
このアプローチの利点は、次のことができることです。レーンクロスシャッフルマスクをオンザフライで生成し、大きな LUT の作成と保存を回避します。このアプローチは、マスク入力が動的である状況で有利になる可能性があります。ただし、Zen 3 より前の AMD CPU では pdep/pext 操作が比較的遅くなる可能性があることに注意することが重要です。そのため、そのようなアーキテクチャには 128 ビット ベクトルや LUT ベースのアプローチなどの代替方法の方が適している可能性があります。
以上がAVX2 と BMI2 を動的マスクに基づいた効率的なレフト パッキングにどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。