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

215 天前
 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++节点了

4450 次点击
所在节点    C++
38 条回复
alanying
215 天前
万恶的 Intel ,快凉凉吧~~

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

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

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

这也能怪 Intel? AMD 怎么不写个 AMD 性能好 Intel 性能不好的排序呢?
Yadomin
215 天前
早年间 Intel MKL 的问题不比这大多了
equationzhao
215 天前
@hefish aocc?

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

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

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

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

© 2021 V2EX