将英特尔 AVX 与火花一起使用

Use intel AVX with spark

我们有一个带有英特尔 AVX 512 CPU 的新集群。我们对该主题进行了研究,但没有结果。 我们想知道 spark 作业是否能够 运行 使用 AVX 本机对 DataFrames 对象进行处理,或者我们是否必须更改代码以允许 JVM 使用它,或者它是否完全无用。我们的 spark 应用程序是用 scala 编码的。 我们的大部分工作是 DataFrames 对象处理和算法。 预先感谢您的帮助

这取决于几件事。

AVX512 支持已添加到 JDK 9 中的 OpenJDK(参见 https://bugs.openjdk.java.net/browse/JDK-8076276),因此您需要在 JDK 9 中成为 运行或以后。要明确启用此功能,您需要添加命令行标志 -XX:UseAVX=3.

但是,它的使用量在很大程度上取决于代码的工作方式以及 JIT 编译器如何使用矢量化。在 Azul(我为之工作),我们用 Falcon JIT 替换了 Zing JVM 中的 C2 JIT。它基于 LLVM 编译器项目,能够在比 C2 通常识别的更复杂的情况下使用矢量化。

正如@Speakjava 注意到的那样,此时在 Spark 代码中使用 SIMD 指令是不可行的,因为 AVX512 是在 Java 9 中添加的,Spark 尚不支持。但未来几年将会发生根本性的变化 - Project Panama. Once the vector API is complete, projects like Spark will be able to profit enormously from it. You can follow up JEP-338 即将发生的变化。

如果您有兴趣利用低级英特尔 API 来获得性能,请查看英特尔库 Data Analytics Acceleration Library. Intel states that it can bring the performance boost for MLlib. It has analogs of some classes from Spark - org.apache.spark.mllib.feature.{PCA, PCAModel} -> daal_for_mllib.{PCA, PCAModel} - a detailed example is here