PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

CPU在不同编译器下性能差多少?

[复制链接]
跳转到指定楼层
1#
小钻风 发表于 2017-5-9 18:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:5015|回复数:13
本帖最后由 小钻风 于 2017-5-9 18:52 编辑

AMD曾经提到过Ryzen游戏性能不行是因为整个软件、游戏业界之前都是为Intel平台优化的。


对程序员来说用不同的编译器会带来不同的效果,所以在开发时都会考虑到编译器的影响。普通消费者运行的程序都是编译过的并不能感受到编译器的影响。德国网站就做了个测试,他们在Windows 10专家Andreas Stiller的帮助下分别使用微软VS2017以及Intel的System Studio 2017编译了SPEC CPU2006的测试,测试的结果如下:





这个测试是发表在杂志上,阅读全文需要订阅付费,只能看到部分结果。以Ryzen 7 1800X和Core i7-7700K为例,SPEC CPU2206的Libquatum测试中,微软VS2017编译器下Ryzen 7 1800X是33.6、44.3,后者领先1800X处理器32%,而在Intel编译器中使用不同的指令集,不同处理器的性能会有所不同,在QxCore-AVX2下,Ryzen 7 1800X、Core i7-7700K分别是39、53,两者都有不同程度的性能提升,不过Core i7-7700K的领先幅度达到了36%比之前有所增加。

https://www.heise.de/newsticker/meldung/AMD-Ryzen-Performance-unter-der-Lupe-3703483.html

问一下论坛里的程序员有没有碰到过以上这种情况,不同编译器对不同CPU差距能有多大?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
xudaiqing 发表于 2017-5-9 20:31 | 只看该作者
优化等级低的时候应该差不多,越高差距越大。
来自安卓客户端来自安卓客户端
3#
priest 发表于 2017-5-9 23:05 | 只看该作者
AVX AVX2指令集本来就是intel的,为intel cpu优化很正常,尤其是用intel自家的编译器
4#
飞翔的企鹅 发表于 2017-5-11 11:42 | 只看该作者
AMD之前还赶在INTEL之前发了SSE5,然后没人支持就没下文了
5#
danze 发表于 2017-5-11 15:04 | 只看该作者
本帖最后由 danze 于 2017-5-11 15:05 编辑

http://www.pceva.com.cn/thread-67938-1-1.html
icc基本还是公平的对于zen来说,zen很像iu 差异多在外围   基本可以说对iu优化也是对zen优化
6#
3332243 发表于 2017-5-11 18:53 | 只看该作者
然你做游戏开发,你会选择对一个市场占有率80%的产品做优化还是会对20%不到的产品做优化呢

有因有果的
7#
刺客小白 发表于 2017-5-11 18:57 | 只看该作者
很简单的例子:生成随机数,intel icpc + MKL编译的版本比 intel icpc + Cpp11标准库方法编译的版本快了近100倍,比 gcc + Cpp11标准库方法编译的版本快了500倍,都是单线程的程序。


CPU是 Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz,系统是 CentOS 7.3.1611,编译器分别是 intel Parallel Studio XE 2015 和 GCC 4.8.5。使用mkl实现的代码可以在我自己的博客https://shaula.cn/2017/04/24/CppMKLRandom/找到。
8#
dogbear 发表于 2017-5-12 15:59 | 只看该作者
AMD的市场占有上不去,人家就不愿意照顾你
9#
Borsche 发表于 2017-5-12 21:25 | 只看该作者
zen跑intel的AVX也有提升嘛
10#
gk104_200 发表于 2017-5-13 22:47 | 只看该作者
刺客小白 发表于 2017-5-11 18:57
很简单的例子:生成随机数,intel icpc + MKL编译的版本比 intel icpc + Cpp11标准库方法编译的版本快了近1 ...

因为intel的cpu里弄了个“真随机数”模块啊,当然够快了,要是别的恐怕没那么大差距吧
11#
刺客小白 发表于 2017-5-15 01:24 | 只看该作者
本帖最后由 刺客小白 于 2017-5-15 01:27 编辑
gk104_200 发表于 2017-5-13 22:47
因为intel的cpu里弄了个“真随机数”模块啊,当然够快了,要是别的恐怕没那么大差距吧
...

差距还是有的。比如,使用intel编译器,有时候加一句
#pragma simd
你的程序的执行速度就会有很大提升。如果用ipo之类的再去优化一下,那么效果会更明显。
我的例子中,C++11标准库版本并没有使用什么“真随机数”模块,用的是梅森旋转算法std::mt19937,种子由std::random_device提供(此对象只在Linux下有效,与系统有关,不会调用什么“真随机数模块”),生成随机数时做了平均分布。而使用intel math kernel library实现的版本,过程和C++11标准库的版本完全相同,只不过这些实现分别换成了MKL提供的函数罢了。如果你觉得代码不同所以不好比较的话,那么C++11标准库版本使用icpc和g++编译都能有5倍的性能差距(icpc -Ofast 版本是 icpc -O2 版本1.5倍的性能,icpc -O2 版本则是 g++ -O2 版本5倍的性能)。我自己是做量子化学的,无论是使用的现成的程序还是自己写的程序都追求极致的性能,而随机数是Monte Carlo等常见算法最核心的东西,实现这种悬殊的性能表现并没有花费我的时间——仅仅是将编译器和参数换成 icpc -Ofast 然后添加 MKL 的链接就可以。而 icpc 15.0.3 20150407 版本的 --help 就有2200+行,各种优化参数恐怕想完全记住都有困难。最简单常见的自动向量化、IPO优化、PGO优化就能带来显著的性能提升,我的例子仅仅包含了最简单的自动向量化和IPO优化。GCC无论如何都无法实现这样的性能。
有个段子,大概是说程序性能不达标的解决办法是什么,答案是“最简单的解决办法就是使用intel编译器重新编译一次”。而intel的优势不仅仅是编译器,更有MKL这样高效率的数学计算库,最近甚至又增加了一个包含了K近邻算法等等基础机器学习运算的新程序库。如果把这些程序库也算进这里讨论的“编译器”的范畴,那么intel的优势就更大了。


12#
dongyi945 发表于 2017-5-16 12:01 | 只看该作者
intel本来就有针对自家处理器的编译器,而amd是没有的。所以优化inte处理器本来就比amd容易。同样的代码只需要使用intel的编译器编译一次就能得到优化。
13#
gk104_200 发表于 2017-5-19 14:25 | 只看该作者
本帖最后由 gk104_200 于 2017-5-19 14:35 编辑
刺客小白 发表于 2017-5-15 01:24
差距还是有的。比如,使用intel编译器,有时候加一句
#pragma simd
你的程序的执行速度就会有很大提升。如 ...

哎intel的编译器如果要在科学计算以外的地方用性能提升也不大毕竟大部分都不是浮点运算,而且simd的话gpu速度更快这几年也很火为什么不用gpu呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部