AMD和英特尔的C++编程有什么区别
What is the difference between programming in C ++ for AMD and Intel
我的意思是:例如虚幻引擎4。它在英特尔上运行良好,但在AMD上相当落后(作为编辑器,也在许多游戏中)。他们在编码上有什么区别吗?如何为它们编写高度优化的代码
谢谢。
与优化任何代码一样,最大的收获是将算法更改为数据集最有效的算法。在进行任何其他性能优化之前,请先执行此操作。
提高性能的第二步是弄清楚代码中哪些部分最受欢迎,并集中精力。当然,这就变成了一个"剥洋葱"的问题,当你提高一个功能的性能时,你最终会发现其他功能是最慢的部分。。。
我不会搜索并链接到各种可用的性能优化页面(文档等)。英特尔和AMD都有优化指南,其中包括关于他们的处理器的不同型号可以做什么以及使用哪些代码序列等的评论(例如ARM对他们的各种处理器型号也是如此)。所有编译器供应商都列出了哪些选项以何种方式影响代码生成(例如启用SSE、AVX等)。不同的编译器或多或少都擅长实际使用最新版本处理器中的"新"指令。
为一个处理器的子体系结构优化代码[例如x86、ARM等处理器之间的区别]并不是很难。为多处理器子体系结构编写代码会非常困难,尤其是如果你想从处理器中挤出最后一点点性能,因为你必须使用的技巧是针对每个子体系结构的。有几类问题:
- 不同处理器中提供的不同功能需要在启用正确代码生成选项的情况下编译代码(例如SSE、AVX等)。因此,您需要将代码"拆分"为通用代码和可以使用矢量指令的代码,并使编译器将其矢量化,或者手工编写汇编程序以充分利用指令
- 细微的古建筑差异使不同的教学顺序或多或少都很好。因此,在处理器X上,您应该使用指令a、B和C来代替指令M(因为M异常慢),但在处理器Y上,一条指令M比a、B、C快。因此,您必须再次选择哪一条指令快,或者多次编译相同的代码
- 缓存在不同的体系结构中是不同的,这意味着在一个体系结构上快速进行类似"复制此数据"的优化可能不会在另一个体系架构上显示出相同的改进
除此之外,您真的需要对一些您知道速度较慢的特定代码提出更具体的问题。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::enable_if 和 std::enable_if_t 有什么区别?