为什么编译起来 aarch64 比 x86_64 要慢,单核 benchmark 却相反

2022-01-14 07:18:10 +08:00
 dangyuluo

我手里有两台台式机,

  1. i9-9900K 3.6Ghz, 8 核,2 线程 /核,共 16 线程
  2. 某厂商 aarch64 CPU 1.7Ghz, 32 核,1 线程 /核,共 32 线程

CPU bench 结果:

x86_64: events per second:   637.69
aarch64: events per second:   745.31

看起来 Aarch64 机器算质数会更快一些,但实际上编译 CMake 来看:

x86_64: 1m12.78s
aarch64: 1m20.135s

另一个项目更加明显

x86_64: 5m14s
aarch64: 9m9s

显然 x86_64 机器会更快。我已经尽可能排除两台机器其他变量的干扰(均有 64GB 内存,NVME 固态硬盘)。

请问还有其他什么可能的原因么?谢谢

8149 次点击
所在节点    Linux
55 条回复
dangyuluo
2022-01-15 03:16:22 +08:00
@shayuvpn0001 AWS 给的机器有 Aarch64 的 CPU ,没有虚拟层。

另外“首当其冲”不是这么用的
secondwtq
2022-01-15 03:26:55 +08:00
重新下了个 VTune ,进去一个大大的 div %rcx 真是开幕雷击 ...

可能能解释 #37 的数据,因为在某乎上对 #37 有印象,用的应该是 AMD 。然后翻一下 uops.info 就知道了:
https://uops.info/table.html?search=div&cb_lat=on&cb_tp=on&cb_uops=on&cb_ports=on&cb_SKL=on&cb_ZEN3=on&cb_measurements=on&cb_doc=on&cb_base=on
https://www.realworldtech.com/forum/?threadid=200021&curpostid=200021

但是楼主的数据还是很神秘。不过他这个貌似是 LuaJIT 给 JIT 出来的,究竟拉出什么代码还不一定呢
dangyuluo
2022-01-15 03:35:01 +08:00
@secondwtq
@hjc4869

忘了说了,以上测试两台机器均是在 Ubuntu 20.04 Docker 环境下进行测试的,性能比直接跑在 host 上相比确实有损失,不过我更关注的是对比数据。

刚在 host 上跑了下`sysbench cpu run`
1. x86_64, events per second: 1640.55
2. aarch64, events per second: 1992.70

还是 aarch64 机器快
dangyuluo
2022-01-15 03:36:20 +08:00
@hjc4869 你这个“随便一跑”的 x86 机器也太快了吧。。这是什么 CPU
secondwtq
2022-01-15 03:44:10 +08:00
@dangyuluo #43
1640 还比较科学,跟我这个数据比差不多就是频率的比利关系

我感觉你这个 benchmark 测试的主要是 sqrt 和 idiv 的性能 (源码应该是 https://github.com/akopytov/sysbench/blob/df89d34c410a2277e19f77e47e535d0890b2029b/src/lua/prime-test.lua#L15-L30 ),SKL 的 idiv 确实不太行。LuaJIT 要是搞个库进来可能会好一点(或者换 ICL 之后的 u )。

另外 Docker 性能损失这么大是什么原理,设置了 cpu-quota 了?
dangyuluo
2022-01-15 05:26:49 +08:00
@secondwtq 并没有设置 CPU 配额,所以我也有点惊讶 Docker 损失居然这么大,按照我的理解只是 namespace 不同呀
ungrown
2022-01-15 09:55:50 +08:00
@461da73c #38
你自己的言行正是诠释了这四个字
编译过程是可以选用、禁用功能模块的,这你不知道?
如果少了几个模块,那编译时就直接没了这几个模块的工作量,你说差距大不大?
因为架构不同所以编译时采用不同的模板来分支处理,导致整个编译运算量出现差异,这种事你是真没见过?
AlexaZhou
2022-01-15 10:10:32 +08:00
国内程序员压力太大了,讨论个啥都能吵起来
dreamramon
2022-01-15 11:08:34 +08:00
我之前做了大概几十组编译对比测试(公司的内部项目和一堆 github 的开源项目),都是默认配置,下下来不会再去手工改配置为 aarch 做优化,如果要那样做工作量太大了,而且很多开源项目里面一堆 ifdef ,哪里改的过来。然后都是 x86 快,没有一次 aarch64 胜出的。
凭心而论,现在的历史环境,还有一大堆软件代码没有开始针对 aarch64 做优化。如果是做业务的部门,可能真心没有资源去搞这些。
LANB0
2022-01-15 11:14:05 +08:00
好奇哪家出了 32 核的 arm PC
redsonic
2022-01-15 15:57:02 +08:00
除了单核性能外还是看看 ARM64 那双位数的 NUMA 把,不改架构不改代码的话还不如 intel 的本子性能高。
hjc4869
2022-01-15 18:59:42 +08:00
@dangyuluo 5950X, WSL2
hjc4869
2022-01-16 01:05:01 +08:00
拿 3.7 GHz 左右的 1130G7 跑了一下也有 3242.27
james122333
2022-01-17 19:21:13 +08:00
https://openbenchmarking.org/test/pts/sysbench

另外 gcc 是挺慢的... arm 目前还算可以了
cattyhouse
2022-01-21 03:33:33 +08:00
upgrade your gcc ... ubuntu 20.04 太老了。新版本 gcc 对 arm64 支持更给力。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX