SSE組み込み関数を使用して16個の8ビット整数を4で除算(または2を右にシフト)するにはどうすればよいですか?SSEを使用して8ビット整数を4(またはシフト)で割ります
答えて
残念ながら、8ビット要素のSSEシフト命令はありません。要素が8ビットの符号なしである場合、16ビットシフトを使用して不要な上位ビットをマスクすることができます。 8ビットについては
v = _mm_srli_epi16(v, 2);
v = _mm_and_si128(v, _mm_set1_epi8(0x3f));
はそれだけで、その後8ビットにバックパック、16ビットに解凍シフトを行うことが容易になるかもしれないが、それは、可能性はほとんどfiddlierだが、それでも要素に署名しました。
私はepi8を偽造するマクロを書くことで自分自身を解決しました: '' '#define _mm_srli_epi8(mm、Imm)_mm_and_si128(_mm_set1_epi8(0xFF >> Imm)、_mm_srli_epi32(mm、Imm))' '' – miho
@miho:ここにインライン関数の代わりにマクロとして書くことは、実際には利点がないことに注意してください。 –
@DietrichEpp:実際には、 '_mm_srli_epi32'の' Imm'が(特にデバッグビルドで)リテラル定数ではないと不平を言っています。これはインライン関数の問題である可能性がありますが、gccの現在/ 、clang、ICC。 –
- 1. SSEを使用して16ビット整数を255で分ける方法は?
- 2. シフトと加算を使用する64ビット整数のモジュロ7
- 3. 変換8 16ビットSSE
- 4. 8ビットMCUでの32ビット可変シフト
- 5. 2 64ビット整数のSSE乗算
- 6. 8ビット整数のビット単位の遷移数を決定できますか?
- 7. スマートカードの読み取り(8ビットまたは16ビットですか?)
- 8. C++の8ビット整数と32ビット整数のビット単位の論理和
- 9. SSEを使用する対数、またはFPUに切り替えますか?
- 10. Pythonの5 8ビット変数に4 9ビットと1 4ビットのint変数をパックする方法は?
- 11. mysqlに4バイトまたは8バイトの代わりに整数を格納するためにNバイトを割り当てる方法は?
- 12. Java整数の整数が32ビットまたは64ビットをすべて使用しないのはなぜですか?
- 13. 64ビットCPUで一般的な操作に32ビット整数を使用する理由はありますか?
- 14. SSE整数除算?
- 15. クラス整数と複数のメソッドを使用して整数を8進数に変換します
- 16. 異なる値で4つの整数をシフトSIMD
- 17. Pythonバイトを「符号なし8ビット整数」に変換する
- 18. 128ビットSSEカウンタ?
- 19. sseを使用したドットプロダクション
- 20. atmega32は8ビットまたは16ビットですか?
- 21. 整数で割り当てと示しています
- 22. charの8ビット数を整数に変換する
- 23. 大きな整数を使用したビット演算
- 24. 64ビット整数のすべてのビットと32ビット整数を比較する
- 25. Pythonのstructを使用して4バイトを整数に変換します
- 26. C++逆参照割り当ては、ビット単位または「スマート」な割り当てを行いますか?
- 27. Swift 3 64ビット整数を割り当てるときにuint64がオーバーフローする
- 28. ビット演算子を使用してCの符号なし整数からビットを分離する方法は?
- 29. XMMレジスタを使用して128ビット整数演算を行うことはできますか?
- 30. スラッシュで連続した整数を分割します
正しい-marchまたは-mtuneを指定すると、自動的に行われると思います。https://godbolt.org/g/jxGyFd –
まず、このツールはStackOverflowのようなQ&Aページでは素晴らしいものです。私はすぐにそれをブックマークしました。また、実際の内容については、アセンブリを見ていただきありがとうございます。コンパイラが自動的にアセンブリを自動的に実行しても、アセンブリから読み込めるようにする必要があります。 – miho
@RichardHodgesコードが実際にはかなり残念だが、Clangは良い仕事をしている。 – harold