我在BLAS.scala中找到了以下代码:
// For level-1 routines, we use Java implementation.
private def f2jBLAS: NetlibBLAS = {
if (_f2jBLAS == null) {
_f2jBLAS = new F2jBLAS
}
_f2jBLAS
}我认为本机blas比纯Java实现更快。
那么,为什么星火选择f2jblas的第1级例程,有什么理由我不知道?
谢谢!
发布于 2019-05-16 18:16:36
答案很可能在netlib-java存储库的自述文件的性能部分找到。
Java在老一代开发人员中享有声誉,因为Java应用程序在上世纪90年代发展缓慢。现在,JIT确保Java应用程序与-C/ C++ / Fortran应用程序的性能保持同步或超过其性能。
然后是图表,显示各种BLAS例程的详细基准测试结果,无论是纯Java (用f2j从Fortran翻译而来)还是来自Linux和macOS在x86_64上的原生BLAS。ddot基准测试表明,在x86 ( reference似乎没有JIT功能)上,F2J的性能与参考本机BLAS实现相同,用于更长的向量大小,甚至在较短的向量大小上优于它。这里要注意的是,JIT在几次调用之后才会启动,这不是一个问题,因为大多数ML算法本质上都是迭代的。大多数1级例程相当简单,JIT编译器能够生成经过良好优化的代码。这也是为什么高度优化的BLAS实现中的调优工作进入了第2级和第3级例程。
https://stackoverflow.com/questions/41825022
复制相似问题