相关疑难解决方法(0)

用于矢量化计算的Java最佳实践

我正在研究用Java计算昂贵的向量运算的方法,例如点积或大矩阵之间的乘法.关于这个主题,这里有一些好的主题,比如这个这个.

似乎没有可靠的方法让JIT编译代码使用CPU向量指令(SSE2,AVX,MMX ......).此外,高性能线性代数库(ND4J,jblas,...)实际上对核心例程进行了对BLAS/LAPACK库的JNI调用.我理解BLAS/LAPACK包是本机线性代数计算的事实上的标准选择.
另一方面,其他人(JAMA,...)在没有native调用的情况下在纯Java中实现算法.

我的问题是:

  • 这里的最佳做法是什么?
  • 正在native对BLAS/LAPACK实际上是一个推荐选择电话?还有其他值得考虑的图书馆吗?
  • 与性能增益相比,JNI调用的开销是否可忽略不计?有没有人有关于阈值所在的经验(例如,输入应该使JNI调用比纯Java例程更昂贵?)
  • 可移植性权衡有多大?



我希望这个问题既可以帮助那些开发自己的计算程序的人,也可以帮助那些只想在不同实现之间做出明智选择的人.

深刻见解!

java blas nd4j

6
推荐指数
1
解决办法
1581
查看次数

Java中的CHOLMOD

我已经问了类似的东西,但这次我会更具体.

我需要在for循环内执行通常大的正定对称矩阵(约1000x1000)的Cholesky分解.现在,要做到这一点,我一直试图:

1)Apache Math库

2)并行Colt库

3)JLapack库

在上述三种情况中的任何一种情况下,例如,与MATLAB相比,时间消耗非常长.

因此,我想知道在Java中是否存在用于Cholesky分解的高度优化的外部工具:例如,我一直在考虑CHOLMOD算法,其实际上是内部调用的MATLAB和其他工具.

我真的很感激能够对此事进行全面的反馈.

java matrix-decomposition

5
推荐指数
1
解决办法
848
查看次数

标签 统计

java ×2

blas ×1

matrix-decomposition ×1

nd4j ×1