0

私はC++が初めてです。最近、X86_64 AMD 対 Intel など、さまざまなマシン アーキテクチャ向けのコードのコンパイルに関する議論が社内で始まりました。

ここで、アプリケーションをコンパイルするために渡す gcc フラグを確認しましたが、x86_64 で AMD と Intel 用に特別にコンパイルするように gcc に指示するものはありません。

誰かがコンパイルされたコードとマシン アーキテクチャの間の依存関係を技術的な用語で説明できますか?

AMD で gcc-86_64 を使用してコードをコンパイルし、intel x86_64 でバイナリ コードを実行できますか?

4

4 に答える 4

2

x86 32ビットプロセッサの後、Intelは64ビットに移行することを望み、HPと協力して64ビットItaniumプロセッサを開発しました。残念ながら、これはあまり人気がありませんでした。命令セットとアーキテクチャがx86とはかなり異なっていたからです。

AMDは、既知のx86アーキテクチャを64ビットに拡張し、最初はEM64Tと呼び、次にAMD64と呼びました。AMDが32ビットプロセッサでIntelに従わなければならなかったように、AMDの64ビットアーキテクチャはItanium 64ビットプロセッサよりもはるかに人気があることが証明されたため、Intelは64ビットプロセッサでAMDに従わなければなりませんでした。

もちろん、IntelはAMD64と呼ばれることを好まないため、x64と呼ばれますが、基本的にAMD64とIntelのx64は互換性があります(いくつかの小さな違いを除いて、http://en.wikipedia.org/wiki/X86を参照してください)。 -64#Differences_between_AMD64_and_Intel_64)。x64またはAMD64用にコンパイルする場合、生成されたコードはこれらの違いを回避するため、実際には両方で実行できます。

いずれにせよ、これはまったく異なる種類のプロセッサであるため、Itanium(IA-64とも呼ばれます)の生成は避けてください。

于 2012-06-19T21:54:28.107 に答える
1

gcc -march フラグを使用して、特定のアーキテクチャ/プロセッサ用にコンパイルできます。ただし、マシン上で別の CPU/アーキテクチャ用にコンパイルされたバイナリを実行しようとしないでください。動作する可能性はありますが、ほとんどの場合、バイナリの最適化方法が原因でランダムに失敗します。

特定のターゲット CPU 向けに最適化するあまり積極的ではない -mtune フラグを使用できますが、任意の CPU で実行する機能は引き続き保持されます。

次のリンクを参照してください: "Pentium4 以上" プロセッサの gcc に最適な march & mtune オプションは何ですか http://en.gentoo-wiki.com/wiki/Safe_Cflags

于 2012-06-19T21:46:54.437 に答える
0

具体的には、SSE4Aのような命令はIntelプロセッサでは実行されません。それは物事がうまくいかない可能性があるこれらの場所の1つです。

于 2012-06-19T21:50:57.360 に答える
0

x86-64 と AMD64 を異なる方法で最適化することはできますが、Intel の Itanium 64 ビット アーキテクチャは異なりますが、それらの 1 つから欠落している (AFAIK) 命令はありません。

于 2012-06-19T21:47:57.890 に答える