ホームページ > バックエンド開発 > C++ > AVX2 と BMI2 を動的マスクに基づいた効率的なレフト パッキングにどのように使用できますか?

AVX2 と BMI2 を動的マスクに基づいた効率的なレフト パッキングにどのように使用できますか?

Patricia Arquette
リリース: 2024-12-20 01:49:10
オリジナル
790 人が閲覧しました

How Can AVX2 and BMI2 Be Used for Efficient Left Packing Based on a Dynamic Mask?

AVX2 および BMI2 を使用したマスクに基づく左要素の効率的なパッキング

AVX2 では、効率的な左パッキングを実現するには、特定の命令とテクニックを利用する必要があります。 1 つのアプローチは、レーンクロス変数シャッフルに AVX2 の vpermps (_mm256_permutevar8x32_ps) を利用し、ビットごとの操作に BMI2 の pext (Parallel Bits Extract) を利用することです。

マスク生成に BMI2 を利用する

BMI2の範囲この命令により、ビットマスクから特定のビットを抽出できるようになり、オンザフライで車線横断シャッフル制御データを動的に生成するメカニズムが提供されます。これにより、事前に計算された大規模なルックアップ テーブル (LUT) が不要になります。

アルゴリズム

アルゴリズムには次のものが含まれます。

  1. 圧縮されたインデックスの抽出: 圧縮ファイルである pext を使用する整数レジスタの下位ビットに必要なレーン インデックスを含むビットマスクが生成されます。
  2. パックされたインデックスのアンパック: 圧縮されたインデックスをアンパックするには、一連のシフトと乗算が使用されます。このステップでは、各ビットを効果的に複製して、対応するバイトを埋め、バイトごとのインデックス マスクを作成します。
  3. シャッフル マスクの生成: シャッフル マスクは、バイトごとのインデックス マスクを使用して計算されます。このマスクは、vpermps を使用してレーン交差変数シャッフル操作を制御するために使用されます。

パフォーマンスに関する考慮事項

このアプローチの利点は、次のことができることです。レーンクロスシャッフルマスクをオンザフライで生成し、大きな LUT の作成と保存を回避します。このアプローチは、マスク入力が動的である状況で有利になる可能性があります。ただし、Zen 3 より前の AMD CPU では pdep/pext 操作が比較的遅くなる可能性があることに注意することが重要です。そのため、そのようなアーキテクチャには 128 ビット ベクトルや LUT ベースのアプローチなどの代替方法の方が適している可能性があります。

以上がAVX2 と BMI2 を動的マスクに基づいた効率的なレフト パッキングにどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート