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++节点了
AMD, Intel, openjdk, x86-simd-sort