使用带有火花的intel AVX

问题描述 投票:1回答:2

我们有一个带有intel AVX 512 CPU的新集群。我们没有结果就该主题进行了研究。我们想知道一个spark作业是否能够在AVX本地运行以对DataFrames对象进行处理,或者我们是否必须更改代码以允许JVM使用它,或者它是否完全没用。我们的火花应用程序用scala编写。我们的大多数工作都是DataFrames对象处理和算法。在此先感谢您的帮助

scala apache-spark jvm avx avx512
2个回答
3
投票

这取决于几件事。

在JDK 9中将AVX512支持添加到OpenJDK(请参阅https://bugs.openjdk.java.net/browse/JDK-8076276),因此您需要在JDK 9或更高版本上运行。要明确启用此功能,您需要添加命令行标志-XX:UseAVX=3

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


0
投票

正如@Speakjava此时注意到在Spark代码中使用SIMD指令是不可行的,因为AVX512是在Java 9中添加的,而Spark尚不支持。但未来几年将会有根本性的变化 - Project Panama。一旦矢量API完成,像Spark这样的项目将能够从中获得巨大的利润。您可以跟进JEP-338以了解即将发生的变化。

如果您有兴趣利用低级别的英特尔API来获得性能,那么请看看英特尔的库Data Analytics Acceleration Library。英特尔声称它可以为MLlib带来性能提升。它有一些来自Spark - org.apache.spark.mllib.feature.{PCA, PCAModel} -> daal_for_mllib.{PCA, PCAModel}类的类似物 - 一个详细的例子是here

© www.soinside.com 2019 - 2024. All rights reserved.