• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:32bit、64bitコンパイラーでコンパイルした場合の数値計算の実行)

32bit、64bitコンパイラーでコンパイルした場合の数値計算の実行

このQ&Aのポイント
  • 32bit、64bitコンパイラーでコンパイルした場合の数値計算の実行速度について質問です。
  • IA-32用としてコンパイルして、Windows7 Pro.32bit 上で計算させた場合と Intel64用としてコンパイルして、Windows7 Pro.64bit 上で計算させた場合とでは、計算速度に差がでますでしょうか?
  • 実行ファイルは、OSを通さずにCPU上でネイティブ実行されると理解しているので、両方とも、64bitCPU上では、double(64bit長)型の計算なので差は出ないのかな?と思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.3

もう少し説明しておきます。 >実行ファイルは、OSを通さずにCPU上でネイティブ >実行されると理解しているので、 >両方とも、64bitCPU上では、double(64bit長)型の >計算なので差は出ないのかな?と思っています。 そうではありません。k=i+j; という足し算を、64ビット用としてコンパイルしたら、コンパイラが作るアセンブラ・コードは MOV RAX,i   //CPU内のRAXレジスタにiのデータを移動 MOV RBX,j   //CPU内のRBXレジスタにjのデータを移動 ADD RAX,RBX  //64ビットの加算 RAX←RAX+RBX MOV k,RAX   //CPU内のRAXレジスタのデータを kに格納 ですが、32ビット用としてコンパイルした場合は MOV EAX,i(下位32ビット) MOV EBX,j(下位32ビット) ADD EAX,ECX    //32ビットの加算 EAX←EAX+EBX MOV k(下位32ビット),EAX MOV EAX,i(上位32ビット) MOV EBX,j(上位32ビット) ADC EBX,EDX    //くり上がり付きの32ビットの加算 EAX←EAX+EBX+くり上がり MOV k(上位32ビット),EAX というアセンブラ・コードが出力されます。コンパイルの段階で32ビット演算と64ビット演算に区分けされてしまうわけです。

ycuhakecha
質問者

お礼

お礼し忘れていました。 大変失礼しました。 ありがとうございました。

その他の回答 (3)

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.4

すみません、ADD,ADCでのレジスタ名を間違えたので訂正です 32ビット用としてコンパイルした場合は MOV EAX,i(下位32ビット) MOV EBX,j(下位32ビット) ADD EAX,EBX    //32ビットの加算 EAX←EAX+EBX MOV k(下位32ビット),EAX MOV EAX,i(上位32ビット) MOV EBX,j(上位32ビット) ADC EAX,EBX    //くり上がり付きの32ビットの加算 EAX←EAX+EBX+くり上がり MOV k(上位32ビット),EAX

ycuhakecha
質問者

お礼

お礼し忘れていました。 大変失礼しました。 ありがとうございました。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.2

当然、64ビットのほうが、理論上、加減算は2倍、乗除算は4倍速いです。 OSの速度は64ビットと32ビットで差がないだろうと無責任に書いてあるサイトがありますが、私がVista32ビットと64ビットを使ってみたところでは、64ビットが格段に速いです。使っているソフトはほとんどが32ビット版なので、APIの速度差だけのはずですが、はっきり体感上に差が出ます。 64ビット版で動かないソフト(ほとんどの32ビットソフトは動きます。16ビットソフトは動かないでしょう。)を使いたい場合以外は、64ビット版OSにするべきです。

ycuhakecha
質問者

お礼

そうなんですね。 ありがとうございました。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

64BitCPUで64Bitネイティブコードを実行した場合はメモリアクセスが1回で終了します。 32BitCPUで32Bitコードで64Bitの計算をさせるにはメモリに2回アクセスする必要があります。 実際は、汎用レジスタに計算結果等が保持されるでしょうが、32Bitのレジスタの場合は2つのレジスタを利利用しなくてはならない等オーバーベッドが生じます。

ycuhakecha
質問者

お礼

お礼し忘れていました。 大変失礼しました。 ありがとうございました。

関連するQ&A