首页 文章

为什么现成的应用程序适用于Intel和AMD处理器?

提问于
浏览
10

我缺乏理解的一件事是如何为Intel CPU编译的代码可以在AMD CPU上运行 .

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

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

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

4 回答

  • 6

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

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

  • 6

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

  • 19

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

  • 1

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

相关问题