Intel x86-simd-sort“故意”对 AMD 负优化?

2023-10-07 18:06:19 +08:00
 cnbatch

逛国外论坛时收到来自 Java 节点的推送:
Heads up: OpenJDK implementation of AVX512 based sorting will perform poorly on AMD systems.
(背景事件:OpenJDK 采纳了 x86-simd-sort 用于快速排序)

正文提到,x86-simd-sort在 AMD Zen 4 处理器的性能十分糟糕,原因是 AMD 平台的 compressstoreu 效率太差。
今年 2 月份的时候就已经有人开了 issue 提到这个问题:performance on amd 7950x
里面有测试结果的对比,可以发现 x86-simd-sort 在 AMD 平台的部份测试结果甚至比标准库更慢,最慢的甚至只有标准库的十分之一。原本是用来优化加速的库,用在 AMD 就成了负优化。

其实已经有人做好了解决办法,来自于该 issue 评论区的其中一位用户(其实就是他解答了原因——compressstoreu 的执行效率),不过就是从未推送回上游。

Intel 自己显然是没必要去“修”的,但也不见 AMD 有提交“修补”的 Pull Request 。

既然 OpenJDK“吸收”了 Intel 的这个排序库,那么人们可能会发现,同一套 Java 程序跑在 Intel 比起 AMD 快得多,然后可能会推断出“AMD 不行”的结论。

表面上看,这是 AMD 的锅。但考虑到 Intel 编译器曾经有过针对 AMD 做过负优化的黑历史,所以我也不能不怀疑,Intel 在开发 x86-simd-sort 的过程中,是否专门筛选过 AMD 的弱项,然后针对性地负优化。

现在就看 AMD Zen 5 及后续新架构会不会直接“修复”这个 bug 。


鉴于 x86-simd-sort 是 C++库,所以还是发在 C++节点了

4911 次点击
所在节点    C++
38 条回复
alanying
2023-10-07 18:13:42 +08:00
万恶的 Intel ,快凉凉吧~~

希望 ARM64 在移动平台快快发力。现在 8cx gen3 还是太弱鸡了。
游戏平台就选 AMD 没错的,12C 16C 的大核
lonewolfakela
2023-10-07 18:32:15 +08:00
两方面来看,一方面我觉得没有实锤证据的时候,还是没有必要恶意地去揣测动机。intel 写这玩意儿的时候没考虑/没测试 AMD CPU 上的性能也很正常,完全没必要用阴谋论视角来解释这件事。

另外一方面,AMD 这弄一个加速指令速度能比软件模拟还慢,这不管怎么说那就是自己菜。就算 Intel 是专门搜索了一番才故意找到这个 AMD 的弱点,就我看来这也是 AMD 自己没做好。功能做的不够好就得承担有朝一日被人发现了拿来做文章的风险,根源只能怪自己菜不能怪别人故意找茬。
mokiki
2023-10-07 18:47:43 +08:00
@lonewolfakela
> intel 写这玩意儿的时候没考虑/没测试 AMD CPU 上的性能也很正常,完全没必要用阴谋论视角来解释这件事。
与你的观点完全相反,Intel 肯定知道 这个世界上有 AMD 的 CPU 。这种针对性优化的代码肯定想到了对竞争对手的影响。Intel 阴谋的可能性非常大。

体面的做法是提供编译选项。这样 OpenJDK 二进制版可以由 OpenJDK 官方选择编译选项,Gentoo 这样的优秀发行版也可以提供 USE 由用户进行选择。
czfy
2023-10-07 18:56:20 +08:00
笑了,世界上就两家 x86 CPU ,然后一家在写自家软件的时候 “没考虑” 对家
要真没考虑,那也是和标准库性能接近,而不是比标准库性能还差
kneo
2023-10-07 19:51:26 +08:00
想知道是否哪个 openjdk 版本被证实受这个 bug 影响。
cnbatch
2023-10-07 19:59:43 +08:00
@kneo 所有 OpenJDK 正式版都暂时未受影响,因为这个 commit 的时间(到目前为止)连 24 小时都不到:
https://github.com/openjdk/jdk/commit/a4e9168bab1c2872ce2dbc7971a45c259270271f
ly841000
2023-10-07 20:13:47 +08:00
看了下代码,没有故意判断 Amd 走其它的分支,只能说是 Amd 对 simd 优化不行
2kCS5c0b0ITXE5k2
2023-10-07 20:16:55 +08:00
amd 服务器端已经是屠榜. Intel 这几年服务器被蚕食不少.
ambition117
2023-10-07 20:26:49 +08:00
说难听点 x86 服务器市场都是 intel 打下的江山,各种软件基础设施 intel 也贡献的不少。amd 这种整天搭开源社区跟 intel 的便车的,被区别对待也是活该
hefish
2023-10-07 20:35:25 +08:00
amd 能不能争气点,自己搞个 compiler ,别搭 gcc 的车。。
nightwitch
2023-10-07 21:35:56 +08:00
@ambition117 #9 AMD64: ?
whileFalse
2023-10-07 21:37:21 +08:00
intel 为什么要考虑 amd 的性能?你魔怔了吧。倒是 jdk 没有做深入测试就把东西和进来才是该批评的
ambition117
2023-10-07 22:17:16 +08:00
@nightwitch 呵呵,看人家 arm64 是个完全不一样的指令集,趁机甩了包袱。过几年让 arm 把服务器市场抢了,amd 也是有锅的。
x86
2023-10-07 22:19:12 +08:00
我有罪
icyalala
2023-10-07 22:35:38 +08:00
@mokiki 看了一下,代码只是用 supports_avx512dq() 来判断条件的。
总不能用 is_intel & avx512dq 来判断吧,那才是专门针对自家优化,落人口实。
Aloento
2023-10-07 22:42:18 +08:00
@ambition117 #13 ?
MrKrabs
2023-10-07 22:46:31 +08:00
amd 软件生态烂也不是一天两天了
zhzy0077
2023-10-07 23:04:06 +08:00
逻辑应该是 Intel 在 AMD64 平台上做了 SIMD 的排序加速 并且开源回馈给社区
但是 AMD 的 SIMD 实现性能有问题导致开源的代码在 AMD 上效率不佳

这也能怪 Intel? AMD 怎么不写个 AMD 性能好 Intel 性能不好的排序呢?
Yadomin
2023-10-07 23:20:27 +08:00
早年间 Intel MKL 的问题不比这大多了
equationzhao
2023-10-07 23:49:54 +08:00
@hefish aocc?

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

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

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

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

© 2021 V2EX