10

我缺乏理解的一件事是为 Intel CPU 编译的代码如何在 AMD CPU 上工作。

我的基本理解是,例如,如果您编译 C 代码,编译器会将源代码转换为机器语言,机器语言将具有针对特定处理器的指令。因此,您需要为您希望应用程序使用的任何平台使用编译器进行编译。为什么您不需要针对 AMD 和 Intel 的编译器,而必须为特定处理器购买软件?

我知道 AMD 处理器和 Intel 处理器在旧的 x86 指令中有一些兼容性。我想知道的是他们是怎么做到的?我的意思是,不像 AMD 或 Intel 互相打电话并告诉对方他们的商业机密,那么他们如何创建兼容的指令集呢?

是否所有的兼容性仍然基于 386 指令集,以及诸如“如果 AMD CPU,这样做 ELSE IF INTEL 那样做”之类的语句?

4

4 回答 4

19

AMD 和 Intel x86 和 x86-64 CPU 几乎完全兼容。它们都实现了所有的 x86 和 x86-64。它们每个都有自己的扩展(如 MMX 和 3DNow),但编译器通常不会使用它们,除非你告诉他们这样做。如今,AMD 和 Intel 几乎都支持彼此的所有扩展。唯一可能需要担心差异的是当您在做真正低级的内核工作时。

顺便说一句,指令集并不是真正的“商业机密”。实现是。两家公司都制作有关指令集的文档,因此每个人都可以复制它。原因可能是,如果更多的公司生产兼容的芯片,就会为这个指令集编写更多的软件,所以会有更多的人购买这些芯片。x86/x86-64 基本上是台式机的标准架构,保证人们会继续购买 Intel 和 AMD 芯片。Intel 和 AMD 有非常不同的实现,它们只是执行相同的代码。

于 2009-05-06T22:04:14.257 回答
6

实际上,他们确实有交叉许可协议。早在 90 年代,当 AMD 成为 386 和 486 处理器的第二来源时,信息和创新从 Intel 流向 AMD,然后在 Intel 采用 x86-64 扩展时从 AMD 流向 Intel。

于 2009-05-06T22:05:09.060 回答
6

还要记住,这些处理器的指令集是公开记录的;通常一个供应商会发明一套新的指令,一两代之后另一个供应商将实现兼容的扩展。因此,而不是 IF 386 .... 您有更多类似于 IF SSE4 IS SUPPORTED ... 的内容,而不考虑特定的供应商。

于 2009-05-06T22:07:08.977 回答
1

两家供应商都实现了相同的指令集,因此当您编译的代码变成机器指令时,它们将在两个芯片上工作。但是,有一些特殊的指令集,例如 SSE,可以特定于一个供应商或另一个供应商。如果您想提高应用程序的性能,您可以进行运行时检查以在可用时使用这些功能。

于 2009-05-06T22:11:42.897 回答