Optimization 英特尔和AMD如何既不同又兼容?

Optimization 英特尔和AMD如何既不同又兼容?,optimization,x86,intel,cpu-architecture,amd-processor,Optimization,X86,Intel,Cpu Architecture,Amd Processor,正如我一直理解的那样,AMD通过反向工程Intel的指令集来构建他们的CPU,现在支付Intel使用他们的指令集,Intel对AMDs 64位指令也这样做 这就是为什么windows可以安装在两种类型的CPU上,而不需要购买特定的版本,例如为ARM编译的版本,因此所有应用程序、游戏等都以相同的方式工作,在CPU上可以互换工作 然而最近一些事情让我对其中一些产生了疑问 首先,我注意到一些游戏在我的系统(AMD)上有点滞后,阅读后发现游戏是为英特尔CPU优化的 此外,OSX在英特尔CPU上销售,但在

正如我一直理解的那样,AMD通过反向工程Intel的指令集来构建他们的CPU,现在支付Intel使用他们的指令集,Intel对AMDs 64位指令也这样做

这就是为什么windows可以安装在两种类型的CPU上,而不需要购买特定的版本,例如为ARM编译的版本,因此所有应用程序、游戏等都以相同的方式工作,在CPU上可以互换工作

然而最近一些事情让我对其中一些产生了疑问

首先,我注意到一些游戏在我的系统(AMD)上有点滞后,阅读后发现游戏是为英特尔CPU优化的

此外,OSX在英特尔CPU上销售,但在发现hackintosh社区后,发现OSX在AMD上运行是可能的,但非常困难。这是因为OSX也是为英特尔设计的

在这些事情之后


针对英特尔或AMD进行优化意味着什么?如果它们是彼此的替代品,那么如何能够针对其中一个而不是另一个进行不同/优化?也就是说,两者都支持相同的指令等。

基本上,处理过程有所不同。AMD和英特尔因使用其他公司的专利而相互支付费用。这并不意味着两者具有相同的设计。 基本指令集是相等的,但两者都有特定于CPU的附加指令,而它们基本上是在另一个CPU上仿真的(至少大多数),这导致在AMD上使用Intel的附加(优化)指令的软件可能会慢一些,反之亦然。此外,并不是说所有指令都将在两个CPU上模拟。可能会有细微的差别


希望这能澄清一点;-)

SIMD指令非常不同,对于某些任务(如游戏),它们可以起到不同的作用。有关具体示例,请参见此答案:

如果确实需要,可以创建多个版本的内部循环算法,并在运行时使用cpuid为平台选择最佳实现。 有些人就是这样做的,例如,开发x264视频编解码器的人肯定会这样做:

int x264_intra_satd_x9_4x4_ssse3( uint8_t *, uint8_t *, uint16_t * ); // Intel 2006+, AMD 2011+
int x264_intra_satd_x9_4x4_sse4( uint8_t *, uint8_t *, uint16_t * ); // Both around 2006 but slightly different instructions
int x264_intra_satd_x9_4x4_avx( uint8_t *, uint8_t *, uint16_t * ); // Intel 2011, AMD around 2012
int x264_intra_satd_9_4x4_xop( uint8_t *, uint8_t *, uint16_t * ); // AMD only
对于许多项目来说,这样做,即为所有项目进行优化,代价高昂。因此,软件只针对最流行的架构进行了优化

此页面(单击其他设置)显示:

  • 99.95%有SSE3
  • 91.04%有SSSE3
  • 84.76%有SSE4.1
  • 81.60%SSE4.2
  • 67.56%AVX(我认为主要是英特尔)
  • 22.05%SSE4a(仅限AMD)
如果你在管理一个项目,你可以选择如何花费你的预算:你会专门为67%的AVX用户或22%的SSE4a用户优化你的软件吗


AMD在实施SSSE3之前实施了SSE4a。22.83%的用户使用AMD,由于22.05%的用户拥有SSE4a,可以肯定地说几乎所有AMD用户都拥有SSE4a。我认为我们可以得出结论,没有SSSE3的大多数用户都是AMD K10用户。这是SSE3成为基线而不是SSSE3的主要原因。

它们实现了,但由于不同的性能特征而具有不同的性能特征

e、 g.有关详细信息,请参阅,以及来自tag wiki的其他链接。e、 g.vs

Agner Fog的指令表还精确地显示了每个CPU上每条指令的速度。e、 g.
imul r64、r64/m32、imm32在AMD推土机系列上是6个周期延迟/每4c吞吐量一个。在Intel SnB系列上,它是3c延迟,每1c吞吐量一个

因此,当调整AMD时,用常数替换64位乘法器是值得的。在英特尔,只有在一次或两次轮班/
lea
指令中完成任务,这才是值得的

AMD的设计还具有明显较弱的缓存层次结构,并且由于使用永久拆分的内核对,而不是Intel在同一内核上的两个硬件线程之间动态共享资源,因此单线程吞吐量较低。AMD正计划在下一个微体系结构中改变这一点。有些东西是你无法真正“优化”的,只是AMD的速度变慢了(


所以它们运行相同的代码,因为这就是相同架构的含义

一些CPU支持另一个CPU不支持的ISA扩展(新指令)。例如,XOP仅支持AMD,而AVX2和BMI2(到目前为止)仅支持Intel,因此希望使用超过通用基线的代码必须在运行时检查支持情况


Wikipedia的文章不是很最新。硬件已经推出一段时间了,但文章仍然说它“预计会有”AVX2和BMI2。Agner Fog也没有对其进行测试并更新其指令表。

可以查询某些定义良好的指令或指令组的可用性,从而确保软件与处理器的兼容性。(如今,指令集极不稳定;这对开发人员来说可能是一场噩梦。)


因此,即使在英特尔家族中,程序也可以以完全不同的性能运行,这取决于处理器支持什么以及软件如何利用它。

当我第一次看到这个问题时,它的反对票多于赞成票。但我认为这是一个与系统性能以及AMD和Intel proc之间的差异有关的合理问题我认为有两点值得一提

ISA许可 正如我一直理解的那样,AMD是通过反向方式构建CPU的 工程英特尔的指令集,现在支付英特尔使用他们的 指令集,英特尔也对AMDs 64位指令执行相同的操作

我不知道AMD和Intel x86许可协议的完整历史,但这有点过于简单化了。目前AMD和Intel有一个交叉许可协议,允许双方都实施