ソフトウェアでは128ビット整数をエミュレートする必要がありますか、または最近の平均的なデスクトッププロセッサではハードウェアサポートがありますか?最新のプロセッサに128ビット整数のハードウェアサポートはありますか?
答えて
x86-64の命令セットは、1つの命令(一方のオペランドと符号付き各々に対する符号なしimul
ためmul
)を用いて128ビットを64ビット×64ビットを行うことができるので、私は、x86命令することをある程度までそれを主張setには128ビット整数のサポートが含まれています。
命令セットに64ビット* 64ビットから128ビットへの命令がない場合は、several instructions to emulate thisが必要です。
これは、x86-64ではほとんどの命令で128ビット×128ビットから128ビットの低位演算を実行できる理由です。例えばGCC
__int128 mul(__int128 a, __int128 b) {
return a*b;
}
は128ビット命令を1つの64ビット×64ビットを使用してこのアセンブリ
imulq %rdx, %rsi
movq %rdi, %rax
imulq %rdi, %rcx
mulq %rdx
addq %rsi, %rcx
addq %rcx, %rdx
を生成して、2つの64ビット×64ビット、64ビットを低下させます命令、および2つの64ビット加算があります。
@Filip: 'adc' /' sbb'(桁上げ加算、借用減算)、div/idiv(128b/64b - > 64b配当、64b剰余)もあります。 128bの整数を加算/減算するには、2つの命令(データの移動をカウントしない)だけが必要です。 SSEベクトルでビット単位のブール値を実行できます。 –
@PeterCordes、良い点。私は 'adc'を128ビットサポートとは考えていませんでしたが、私はあなたのポイントを見ています。いくつかの命令セットは「adc」(例えばSSE/AVX)を有していないので、それらは複数ワードの加算を行うためにより多くの命令を必要とする。 –
短い回答です:いいえ!
もっと詳しく説明すると、SSEレジスタは128ビット幅ですが、命令を128ビット整数として扱う命令は存在しません。せいぜい、これらのレジスタは2つの64ビット(符号なしの)整数として扱われます。加算/ ...のような演算は、これら2つの64ビット値を平行して加算し、オーバーフローを手作業で処理するが、単一の命令では処理できない。これは非常に複雑と「醜い」を得ることができます実装、ここを見て:
How can I add together two SSE registers
これは、64ビットの汎用レジスタとimplemention(」に比べて、おそらく疑問の利点を持つすべての基本的な操作のために行わなければなりませんエミュレーション ")。一方、このSSEアプローチの利点は、それが実装されると、わずかな変更だけで256ビット整数(AVX2)と512ビット整数(AVX-512)でも機能することです。
- 1. gccに128ビット整数がありますか?
- 2. 128ビット整数6
- 3. 128ビット整数とウィンドウ上のc?
- 4. RC4-128ビットはAES-128ビットよりも安全ですか?
- 5. アセンブリ内の128ビット整数の文字列への変換
- 6. ColdFusion IPv6から128ビット符号なし整数へ
- 7. ctypesを持つ128ビット整数の扱い
- 8. Cray mpichには64ビット整数のMPI変数がありますか?
- 9. XMM 128ビットレジスタを2つの64ビット整数レジスタに分割する方法は?
- 10. 64ビット整数をスパークデータフレームの32ビット(16ビット)intに変換する価値はありますか?
- 11. 整数型の最大値の定数はありますか?
- 12. x86プロセッサには最小ページサイズはありますか?
- 13. ビットマスクの整数型とビット(n)データ型に違いはありますか?
- 14. XOR 128ビットのビットセット
- 15. 128ビットSSEカウンタ?
- 16. 別の整数xより大きいkビットのセットで最小の整数を計算しますか?
- 17. 64ビットCPUで一般的な操作に32ビット整数を使用する理由はありますか?
- 18. 最新のプロセッサでは複数のクロックドメインが共通していますか?
- 19. AESのSボックスCCM 128ビット
- 20. 64ビット整数のすべてのビットと32ビット整数を比較する
- 21. は、整数配列から最初のビットを抽出/収集
- 22. ビッグエンディアンマシンとリトルエンディアンマシンの32ビット整数の解釈に混乱があります
- 23. 128ビットSSEベクトルから32ビット整数値をロードして抽出する最も効率的な方法は何ですか?
- 24. 効率的に128ビット定数を定義するには?
- 25. XMMレジスタを使用して128ビット整数演算を行うことはできますか?
- 26. python最下位6ビット整数
- 27. C++の8ビット整数と32ビット整数のビット単位の論理和
- 28. 32ビットIntelプロセッサでのメモリアライメント
- 29. 逆シリアル化された各64ビット整数は、ビットごとに等価の64ビット浮動小数点数に変換する必要があります
- 30. mcrypt 128ビット鍵のための最も安全な鍵?
x86タグを追加したのは、これが最も一般的なデスクトップ命令セットだからです。主にARMを使用しているタブレットや携帯電話などを含めると、あなたの質問はより広範にアピールできます。私は、ARMが64ビット* 64ビットから128ビットの命令を持っているのを疑う。 –