AMD 和 Intel 的 C++ 编程有什么区别

What is the difference between programming in C ++ for AMD and Intel

我的意思是:例如 Unreal Engine 4. 它 运行 在 Intel 上很好,但在 AMD 上就差很多了(作为编辑器和很多游戏)。它们在编码上有什么区别吗?如何为它们编写高度优化的代码?
谢谢。

与优化任何代码一样,最大的收获是将算法更改为对您的数据集最有效的算法。在进行任何其他性能优化之前执行此操作。

提高性能的第二步是弄清楚代码的哪些部分代表最大 "hit",并专注于此。当然,这会成为一个 "peeling an onion apart" 问题,当您提高一个功能的性能时,您最终会发现其他功能是最慢的部分...

我不会搜索和 link 各种可用的性能优化页面(文档等)。 Intel 和 AMD 都有优化指南,其中包含关于他们处理器的不同型号可以做什么以及使用哪些代码序列等的评论(例如 ARM 对其各种处理器型号也是如此)。所有编译器供应商都列出了哪些选项以何种方式影响代码生成(例如启用 SSE、AVX 等)。不同的编译器或多或少擅长实际使用最新版本处理器中可用的 "new" 指令。

为一个处理器子架构优化代码 [例如 x86、ARM 等处理器之间的差异] 并不难。为多个处理器子架构编写代码变得非常困难,尤其是如果您想从处理器中榨取最后一点性能,因为您必须使用的技巧特定于每个子架构。有几个 类 个问题:

  1. 不同的处理器提供不同的功能,需要在启用正确的代码生成选项(例如 SSE、AVX 等)的情况下编译代码。因此,您需要 "split" 将代码转换为通用代码和可以使用矢量指令的代码,然后让编译器对其进行矢量化处理,或者手写汇编程序以充分利用这些指令。
  2. 细微的架构差异使不同的指令序列或多或少都很好。因此,在处理器 X 上,您应该使用指令 A、B 和 C 来替换指令 M(因为 M 异常慢),但在处理器 Y 上,一条指令 M 比 A、B 和 C 快。所以,您又一次有选择你让它快速运行的一个 - 或者多次编译相同的代码。
  3. 缓存在不同的体系结构中是不同的,这意味着在一种体系结构上使类似 "copy this data" 的东西更快的优化可能不会在另一种体系结构上显示出相同的改进。

除此之外,您确实需要针对某些您知道速度较慢的特定代码提出更具体的问题。