依赖机器架构意味着什么?

时间:2012-06-19 21:36:38

标签: c++ x86-64

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

现在我查看了我们传递给编译应用程序的gcc标志,并且没有任何内容可以告诉gcc在x86_64上专门针对AMD与Intel进行编译。

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

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

4 个答案:

答案 0 :(得分:2)

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

AMD开始将已知的x86架构扩展到64位,首先称其为EM64T,然后是AMD64。就像AMD必须跟随英特尔采用32位处理器一样,英特尔现在必须跟随AMD使用64位处理器,因为AMD的64位架构比Itanium 64位处理器更受欢迎。

当然,英特尔不喜欢它被称为AMD64,这就是为什么他们称之为x64,但基本上AMD64和英特尔的x64是兼容的(除了一些细微差别,见http://en.wikipedia.org/wiki/X86-64#Differences_between_AMD64_and_Intel_64)。如果你为x64或AMD64编译,生成的代码将避免这些差异,所以在实践中你可以在两者上运行。

在任何情况下,尽量避免为Itanium(也称为IA-64)生成,因为这是一种完全不同的处理器。

答案 1 :(得分:1)

您可以使用gcc -march标志编译特定的体系结构/处理器。但是要注意,你真的不应该尝试在你的机器上运行为不同CPU /架构编译的二进制文件。它可能有效,但大多数情况下,由于二进制文件的优化方式,它会随机失败。

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

请参阅以下链接: What's optimal march & mtune options for gcc for "Pentium4 and above" processors http://en.gentoo-wiki.com/wiki/Safe_Cflags

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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