2017-08-23 13 views
0

AVX2で利用可能な条件付き命令のリストはありますか? は、これまでのところ私は、次を発見しました:マスクc AVX2の条件付き命令

に基づいabからの選択のための

  • _mm256_blendv_ *は条件付き乗算と条件の追加、などのようなものはありますか?

    imm8_mm256_blend_ *など)の命令を使用すると、ベクター比較後にimm8を取得する方法を説明できますか?

+0

[すべてのAVX2組み込み関数はこちら](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#techs=AVX2)それはあなたが質問の最初の部分で求めていることですか?私たちは実際にここで "リスト"スタイルの質問をしません。 –

+0

@CodyGray、私はこれらのページを積極的に使っていますが、私が挙げたもの以外は何も見つかりませんでした。おそらく私は何かを逃した。私はリストが短い、多分5つの項目、おそらくそれ以上の項目であると期待します。だから私はその質問があまりにも広範ではないと思う。そして、組み込み関数が何をしているのかを記述する必要はありません(ドキュメンテーションの検索方法が分かれば、ドキュメントから読むことができます)。 'imm8'を使うバージョンのように、原則的にそれらをどのように使うか。 –

答えて

1

AVX512では、ほぼすべての命令に対してオプションのゼロマスキングとマージマスキングが導入されています。その前に

、(結果に代わりvblendvpsの)1(vandpsまたは逆のためvandnps付き)オペランド前にアドオンをマスクし、条件の追加を行います。これは、packed-compare命令/組み込み関数がすべて0または1つの要素を生成する理由です。

0.0は付加的な識別要素なので、追加することはできません。 (-0.0と+0.0のIEEEセマンティクスを除いて、私はそれがどのように正確に動作するか忘れてしまいます)。

結果をブレンドするのではなく定数入力をマスキングすると、条件付きで1.0を追加するなど、クリティカルパスを長くする必要がなくなります。 0.0は乗法のアイデンティティではないので


条件付き乗算はより厄介です。値を変更しないで保存するには、1.0を掛ける必要があります。比較結果をANDまたはANDNで簡単に生成することはできません。入力をブレンドすることもできますし、出力を乗算してブレンドすることもできます。

ブレンドvの代わりにAND/ANDN/ORのような少なくとも3つのブール値がありますが、それは通常それに値するものではありません。 Haswellはポート5の場合、vblendvpsvpblendvbを2 uopsとして実行するため、任意のポートで実行できる整数ブール値を使用する場合と比較して潜在的なボトルネックになります。スカイレイクは、vblendvpsを2ポートで実行します。しかし、クリティカルパスでブレンドするのを避けるために何かをするのは理にかなっています。

入力オペランドをマスキングするか、結果をブレンドするのは、一般的にブランチスSIMD条件を実行する方法です。

BLENDVは通常少なくとも2ユーロですので、ANDよりも遅いです。

即時ブレンドimm8ブレンドコントロールが命令のマシンコードに埋め込まれたコンパイル時定数なければならないので、はるかに効率的ですが、あなたはそれらを使用することはできません。それは何ですかはアセンブリ言語の文脈での意味です。

3

インテルイントリンシックスガイドでは、マスクを使用して収集、ロード、および保管することを提案しています。 blend_epi16の即時imm8は、自己修正コードまたはジャンプテーブルをオプションと見なさない限り、プログラム可能ではありません。 movemaskの結果から奇数の位置にあるビットの半分をコンパクトにするためにBMI2からpextを使用することは引き続き可能です.1つはAVX2のmovemaskから32の独立したマスクビットを取得しますが、blend_epi16は各ビットを使用して4バイトを制御します。各銀行の変数。

関連する問題