我不了解的一件事是如何为Intel CPU编译的代码可以在AMD CPU上运行。

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

我知道AMD处理器和英特尔处理器在较旧的x86指令中具有一定的兼容性;我想知道的是他们是如何做到的?我的意思是,它不像AMD或英特尔相互呼唤并告诉对方他们的商业机密,那么他们如何创建兼容的指令集呢?

所有兼容性是否仍然基于386指令集,有一堆语句,如“IF AMD CPU,这个ELSE IF INTEL是否这样做”?

有帮助吗?

解决方案

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

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

其他提示

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

还要记住,这些处理器的指令集是公开记录的;通常,一个供应商会发明一组新的指令,而另一个供应商将会实现兼容的扩展。因此,而不是IF 386 ....你有更多的东西,如IF SSE4 IS SUPPORTED ......,而不考虑具体的供应商。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top