AMD和英特尔的C++编程有什么区别

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

本文关键字:什么 区别 编程 C++ 英特尔 AMD      更新时间:2023-10-16

我的意思是:例如虚幻引擎4。它在英特尔上运行良好,但在AMD上相当落后(作为编辑器,也在许多游戏中)。他们在编码上有什么区别吗?如何为它们编写高度优化的代码
谢谢。

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

提高性能的第二步是弄清楚代码中哪些部分最受欢迎,并集中精力。当然,这就变成了一个"剥洋葱"的问题,当你提高一个功能的性能时,你最终会发现其他功能是最慢的部分。。。

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

为一个处理器的子体系结构优化代码[例如x86、ARM等处理器之间的区别]并不是很难。为多处理器子体系结构编写代码会非常困难,尤其是如果你想从处理器中挤出最后一点点性能,因为你必须使用的技巧是针对每个子体系结构的。有几类问题:

  1. 不同处理器中提供的不同功能需要在启用正确代码生成选项的情况下编译代码(例如SSE、AVX等)。因此,您需要将代码"拆分"为通用代码和可以使用矢量指令的代码,并使编译器将其矢量化,或者手工编写汇编程序以充分利用指令
  2. 细微的古建筑差异使不同的教学顺序或多或少都很好。因此,在处理器X上,您应该使用指令a、B和C来代替指令M(因为M异常慢),但在处理器Y上,一条指令M比a、B、C快。因此,您必须再次选择哪一条指令快,或者多次编译相同的代码
  3. 缓存在不同的体系结构中是不同的,这意味着在一个体系结构上快速进行类似"复制此数据"的优化可能不会在另一个体系架构上显示出相同的改进

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