__m128i
変数がSSE-2以前のプロセッサで0以外の値を持つかどうかをテストするにはどうすればよいですか?あなたが行うことができますSSE2で__m128i変数はゼロですか?
答えて
:
__m128i zero = _mm_setzero_si128();
if(_mm_movemask_epi8(_mm_cmpeq_epi32(x,zero)) == 0xFFFF)
{
//the code...
}
これは、対応する各int
のあなたのビットオフセットは0、4、8 &になりますので、各バイトのためにマスクを返し、ゼロ対4つのint型のをテストします図12に示すように、上記のテストではビットがセットされている場合にキャッチされます。マスクを保持すると、必要に応じて細かい粒度のパーツで直接作業できます。
+1、それは私より優れています。 :)私はあなたがそれを行うことができるか分からなかったので、私はmovemask命令を使用したことはありません。 XD – Mysticial
+1私が見た最もコンパクトなソリューション、ありがとう! – Mehrdad
それ以外の優れた答えにはバグがあります。すべてゼロをチェックしているならば、それは 'if(_mm_movemask_epi8(_mm_cmpeq_epi32(x、zero))== 0xFFFF)'でなければなりません。これは、 '_mm_cmpeq_epi32'がintを0に等しい場合はすべての0に設定するのではなく、' _mm_movemask_epi8'が引数の各バイトの最上位ビットに基づいて最初の16ビットを設定するためです。うまくいけば、著者は答えを編集することができます - 私は試しましたが、拒否されました。 – FarmerBob
完全性のために、SSE4では_mm_testz_si128を使用できます。
const bool isAllZero = _mm_testz_si128(a,a);
すべてのビットがゼロであるときは、この真であることに留意されたいです。
これは実際にはわずかに高速で、テストするためにはすべてゼロのレジスタは必要ありません。 'ptest' /' jz'は2 + 1(macro-fuseではありません)です。 'pcmpeq'(1uop)/' pmovmsk'(1uop)/ 'と0xffff'(1uop)/' cmp 0xffff/je'(1uop)です。他のケース(*すべてゼロ要素ではなくゼロ要素)をテストしていた場合は、現在のIntelとAMD CPUでほぼ同じパフォーマンスになります: 'ptest' /' jnz'(3 uops)vs 'pcmpeq' /' pmovmsk'/'test/jnz'(3 uops)です。 –
@PeterCordesその場合、レジスタをすべて1に設定し、 '_mm_testc_si128'を使用するのはどうでしょうか? 'const bool atLeastOneZero = _mm_testc_si128(a、allOnes)'のようなもの – Antonio
もう一度、 'ptest'は少し速いです。 'ptest'を使わずに行うには、all-onesベクタに対して' pcmpeq'を実行し、まったく同じシーケンスを実行して、すべての要素が一致しているかどうかをチェックします。 'pcmpeq'でオールゼロまたはオールワンをチェックすることは、他のパターンに対して==をチェックするのと同じですが、定数がオンザフライで生成されやすいことを除いて(' pxor same、same'または 'pcmpeqw same、同じ)。 –
- 1. Tkinter:チェックボックス変数は常にゼロです
- 2. なぜ/変数はゼロに設定されていますか
- 3. SSE:__m128と__m128iを2つの__m128dに変換します。
- 4. Chromeデベロッパーツールでは== $ 0(二重ゼロはゼロ)とは何ですか?
- 5. 小数点から始まる数字をゼロに変換するには
- 6. 再帰関数のグローバル変数をゼロに保つには?
- 7. 引数の長さはゼロです
- 8. __m128i配列をgccで静的に初期化するには?
- 9. 2つのゼロで変数を定義する方法
- 10. 可変長配列の長さはゼロですか?
- 11. ゼロ関数の正しいパラメータタイプは何ですか?
- 12. managedObjectContextはゼロです
- 13. __m128iをシフトする最も良い方法は?
- 14. Pythonですべての負の数をゼロに変更するにはどうすればよいですか?
- 15. ArrayAdapterデータセットの要素数がゼロです
- 16. Guidはすべて0(ゼロ)ですか?
- 17. Lua:変数をゼロに設定する方法
- 18. NSData長はゼロですか?エラー:ココアエラー60
- 19. 文字列のゼロは何ですか?
- 20. Golangで任意の型の変数がゼロであるかどうかを知るには?
- 21. カラム値をmySQLでゼロに変更
- 22. MySQL MyISAMテーブルインデックスカーディナリティーはゼロです
- 23. int(数値)を先行ゼロの文字列に変換しますか? (4桁)
- 24. jspのセッション変数から先行ゼロを削除する方法
- 25. MySQLのクエリは、非ゼロの整数
- 26. 整数の除算は常にゼロ
- 27. ゼロまたは正の数を返しますか?
- 28. matlabで共分散がゼロの多変量正規乱数を生成する
- 29. ゼロより小さくない - 0より小さい変数をゼロにする
- 30. スカラタイムスタンプ/日付ゼロ引数コンストラクタ?
ゼロ以外のビット、または8/16/32ビット整数要素を意味しますか? –
@BrettHale:私はそれらがすべてゼロであるかどうかを調べています。 – Mehrdad