ソフトウェアでは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. アセンブリ内の128ビット整数の文字列への変換
- 5. ctypesを持つ128ビット整数の扱い
- 6. ビットマスクの整数型とビット(n)データ型に違いはありますか?
- 7. XOR 128ビットのビットセット
- 8. 128ビットSSEカウンタ?
- 9. 別の整数xより大きいkビットのセットで最小の整数を計算しますか?
- 10. 64ビットCPUで一般的な操作に32ビット整数を使用する理由はありますか?
- 11. 効率的に128ビット定数を定義するには?
- 12. 128ビットSSEベクトルから32ビット整数値をロードして抽出する最も効率的な方法は何ですか?
- 13. XMMレジスタを使用して128ビット整数演算を行うことはできますか?
- 14. C++の8ビット整数と32ビット整数のビット単位の論理和
- 15. ナンシー8倍精度浮動小数点数と128ビット整数。なぜ、どのように?
- 16. gcc inline x86_64 asmの128ビット数のアトミックコピーを行う方法は?
- 17. 32ビットIntelプロセッサでのメモリアライメント
- 18. mcrypt 128ビット鍵のための最も安全な鍵?
- 19. x86プロセッサの整数除算アルゴリズム
- 20. Clojure - 整数の最後のNビットを抽出する最速の方法は?
- 21. 8ビット整数のビット単位の遷移数を決定できますか?
- 22. 32ビット整数のビット操作
- 23. EDSAC - 17ビットと35ビットの整数
- 24. iPhoneのデバッグ:変数が最新ではありませんか?
- 25. 32ビット/ 64ビットアプリケーション、OS、プロセッサの関係は?
- 26. minSdkVersion正の32ビット整数
- 27. Ruby整数の抽出ビット
- 28. JAVA:128ビットのキーとストリングの問題
- 29. 相当のAES PHPの128ビット
- 30. CUDAのプロセッサ数を指定する方法はありますか?
x86タグを追加したのは、これが最も一般的なデスクトップ命令セットだからです。主にARMを使用しているタブレットや携帯電話などを含めると、あなたの質問はより広範にアピールできます。私は、ARMが64ビット* 64ビットから128ビットの命令を持っているのを疑う。 –