我们有一个配备 intel AVX 512 CPU 的新集群。我们对此主题进行了研究,但没有结果。 我们想知道 Spark 作业是否能够在 native 上使用 AVX 运行来对 DataFrames 对象进行处理,或者我们是否必须更改代码以允许 JVM 使用它,或者它是否完全无用。我们的 Spark 应用程序是用 scala 编写的。 我们的大部分工作都是 DataFrames 对象处理和算法。 预先感谢您的帮助
最佳答案
这取决于几件事。
JDK 9 中的 OpenJDK 添加了 AVX512 支持(请参阅 https://bugs.openjdk.java.net/browse/JDK-8076276 ),因此您需要在 JDK 9 或更高版本上运行。要明确启用此功能,您需要添加命令行标志 -XX:UseAVX=3
。
但是,它的使用量很大程度上取决于代码的工作方式以及 JIT 编译器如何使用矢量化。在 Azul(我工作的公司),我们已将 Zing JVM 中的 C2 JIT 替换为 Falcon JIT。它基于 LLVM 编译器项目,能够在比 C2 通常识别的更复杂的情况下使用矢量化。
关于scala - 使用 Intel AVX 和 Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947376/