Visual Studio でプロセッサ レジスタを使用するにはどうすればよいですか?
-
21-09-2019 - |
質問
私は RSA の課題を解決するプログラムを書こうとしています (はい、興味深い目標があります)。現在、64 ビット Linux ボックスを持っていません。終わらせるチャンス。そのため、アセンブラー プログラミングもある程度はできますが、C++ を使用することを好みます。ただし、インラインアセンブリを使用して同じことを行う方法にも興味があります。ここでの計画は、16 個の 64 ビット汎用レジスタと 128 ビット sse レジスタを使用して (非常に長い) 整数演算を行うことです。その方法についてのアドバイスをいただければ幸いです。
解決
BarsMonstersのANSERへのあなたのコメントに基づいて、あなたは大きな整数のライブラリを必要とする、近いCPUに取得する必要がありません。
1つのオプションは、任意の整数演算を含むGMP、です。これは、大きな整数を掛けるようなもののために良いアルゴリズムを持っており、良いコンパイラは、ほとんどの人よりも、これを最適化するのより良い仕事を行います。
あなたは、代替を探しになるかもしれない主な問題は、それはあなたがあなたの番号は最大で512進数を持っていることを確認するために知っていればあなたはむしろ避けたいオーバーヘッドかもしれ変数精度演算を、サポートしていることです。それでも、あなたはおそらく(長い乗算はすでにそのサイズで悪い選択でもよい)、より低レベルのトリックよりもアルゴリズムを見てみたい、と私はあなたがコンパイラが最適化を行うせるほうが良いでしょう、かなり確信しています。
私のアドバイス - 人間の知性ではなく、マシンがはるかに一貫して行うと、億倍速くできるというものが必要なことをやって、あなたの時間を過ごす。
。そして、私たちはすべての利益を得ることができるので、あなたが本当にコンパイラよりも良いことができ、ダウンロードLLVMをマシンコードを最適化し、最適化パスとしてそのロジックを実装することができる場合; - )
他のヒント
最新のコンパイラはすべて、利用可能なすべてのレジスタを再利用して可能な限り高速なコードを生成することに非常に優れています。
特に Intel C++ と GCC3 は、手動で無敵のコードを作成することがよくあります。
ところで、これをチェックしてください: MSVC が AMD64 および Itanium ターゲットのインライン アセンブリをサポートしていないのはなぜですか?
あなただけのいくつかのprecission数学をしたい場合は、より良い、それは非常に強力かつoveroptimized、インテルC ++コンパイラーを試してみて、それの数学のlibを使用します。ブースト数学ライブラリに同じ。これは、90%であなたの仕事を切るかもしれません:-)彼らは、任意のprecission番号をサポートしてます。