Scala 使用带spark的英特尔AVX

Scala 使用带spark的英特尔AVX,scala,apache-spark,jvm,avx,avx512,Scala,Apache Spark,Jvm,Avx,Avx512,我们有一个带有intel AVX 512 CPU的新群集。我们对这个问题做了研究,但没有结果。 我们想知道spark作业是否能够在AVX上本地运行以对数据帧对象进行处理,或者我们是否必须更改代码以允许JVM使用它,或者它是否完全无用。我们的spark应用程序使用scala编码。 我们的大部分工作是数据帧对象处理和算法。 提前感谢您的帮助这取决于几件事 AVX512支持被添加到JDK 9中的OpenJDK中(请参阅),因此您需要在JDK 9或更高版本上运行。要明确启用此功能,您需要添加命令行标志-

我们有一个带有intel AVX 512 CPU的新群集。我们对这个问题做了研究,但没有结果。 我们想知道spark作业是否能够在AVX上本地运行以对数据帧对象进行处理,或者我们是否必须更改代码以允许JVM使用它,或者它是否完全无用。我们的spark应用程序使用scala编码。 我们的大部分工作是数据帧对象处理和算法。
提前感谢您的帮助

这取决于几件事

AVX512支持被添加到JDK 9中的OpenJDK中(请参阅),因此您需要在JDK 9或更高版本上运行。要明确启用此功能,您需要添加命令行标志
-XX:UseAVX=3


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

正如@Speakjava此时注意到的那样,在Spark代码中使用SIMD指令是不可行的,因为AVX512是在Java 9中添加的,而Spark还不支持它。但在未来几年里,将发生根本性的变化。一旦vector API完成,像Spark这样的项目将能够从中获得巨大的利润。您可以跟踪即将发生的更改


如果您有兴趣利用低级别的Intel API来获得性能,请查看Intel的库。英特尔表示,它可以为
MLlib
带来性能提升。它类似于Spark-
org.apache.Spark.mllib.feature.{PCA,PCAModel}->daal_for_mllib.{PCA,PCAModel}
-一个详细的示例是。

仅用于记录-Spark还不支持JDK9或更高版本。