scala之为什么 spark blas 在 1 级例程中使用 f2jBLAS 而不是原生 BLAS
我在 BLAS.scala 中找到了以下代码:
// For level-1 routines, we use Java implementation.
private def f2jBLAS: NetlibBLAS = {
if (_f2jBLAS == null) {
_f2jBLAS = new F2jBLAS
}
_f2jBLAS
}
我认为原生 blas 比纯 Java 实现更快。
那么spark为什么选择f2jblas作为level 1例程,有什么我不知道的原因吗?
谢谢!
请您参考如下方法:
答案最有可能在 netlib-java 的自述文件的性能 部分找到。存储库。
Java has a reputation with older generation developers because Java applications were slow in the 1990s. Nowadays, the JIT ensures that Java applications keep pace with – or exceed the performance of – C / C++ / Fortran applications.
接下来的图表显示了各种 BLAS 例程的详细基准测试结果,包括纯 Java(从带有 f2j 的 Fortran 翻译而来)和 ARM 上的 Linux 和 x86_64 上的 macOS 上的原生 BLAS。 ddot 基准测试表明,在 x86 上(ARM 的 JRE 似乎没有 JIT 功能)F2J 对于较长的向量大小与引用 native BLAS 实现的性能相当,甚至在较短的向量大小方面优于它。这里需要注意的是,JIT 在几次调用后启动,这不是问题,因为大多数 ML 算法本质上都是迭代的。大多数 1 级例程都相当简单,并且 JIT 编译器能够生成优化良好的代码。这也是高度优化的 BLAS 实现中的调优工作进入第 2 级和第 3 级例程的原因。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



