0

我是 C++ 新手。最近我的公司开始讨论为不同的机器架构编译代码,例如 X86_64 AMD Vs Intel

现在我查看了我们为编译我们的应用程序传递的 gcc 标志,并没有告诉 gcc 专门针对 x86_64 上的 AMD 和 Intel 进行编译。

有人可以用技术术语解释编译代码和机器架构之间的依赖关系吗?

我可以在 AMD 上使用 gcc-86_64 编译代码并在 intel x86_64 上运行二进制代码吗?

4

4 回答 4

2

在 x86 32 位处理器之后,英特尔想转向 64 位,并与惠普合作开发 64 位安腾处理器。不幸的是,这并不是很流行,因为指令集和架构与 x86 有很大不同。

AMD 介入并将已知的 x86 架构扩展到 64 位,首先将其称为 EM64T,然后称为 AMD64。就像 AMD 不得不跟随 Intel 推出 32 位处理器一样,Intel 现在不得不跟随 AMD 推出 64 位处理器,因为事实证明 AMD 的 64 位架构比 Itanium 64 位处理器更受欢迎。

当然,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/架构编译的二进制文件。它可能会起作用,但大多数时候它会由于二进制文件的优化方式而随机失败。

您可以使用较不激进的 -mtune 标志,它将针对特定目标 CPU 优化它,但它仍将保留在任何 CPU 上运行的能力。

请参阅这些链接: “Pentium4 及以上”处理器的 gcc 的最佳 March & mtune 选项是什么 http://en.gentoo-wiki.com/wiki/Safe_Cflags

于 2012-06-19T21:46:54.437 回答
0

您可以对 x86-64 和 AMD64 进行不同的优化,但其中没有任何 (AFAIK) 指令缺失 - 尽管英特尔的 Itanium 64 位架构不同。

于 2012-06-19T21:47:57.890 回答
0

特别是像 SSE4A 这样的指令不会在英特尔处理器上运行。这是可能出错的地方之一。

于 2012-06-19T21:50:57.360 回答