java - 用于 Java 的 MKL 加速数学库

标签 java linux math intel-mkl

我查看了 StackOverflow 上的相关主题并用 Google 搜索,但运气不佳。我对 Java 也很陌生(我来自 C# 和 .NET 背景)所以请多多包涵。 Java 世界中可用的东西太多了,让人不知所措。

我正在开始一个新的 Java-on-Linux 项目,该项目需要一些繁重且高度重复的数值计算(即统计、FFT、线性代数、矩阵等)。因此,最大化数学运算的性能是一项要求,确保数学是正确的。因此,我有兴趣寻找一个 Java 库,它可能利用 MKL 等 native 加速,并且经过验证(因此这里绝对有可能提供商业选项)。

在 .NET 空间中,有高度优化和 MKL 加速的商业数学库,例如 Centerspace NMath 和 Extreme Optimization。 Java 中有什么可比的吗?

我发现的大多数 Java 数学库要么似乎没有得到积极维护(例如 Colt),要么似乎没有利用 MKL 或其他原生加速(例如 Apache Commons Math)。

我自己考虑过尝试直接从 Java(例如 JNI)中利用 MKL,但我是 Java 的新手(更不用说在 Java 和 native 库之间进行互操作了),找到一个已经正确、高效地完成此操作的 Java 库似乎更明智, 并被证明。

如果我犯了错误或被误导(甚至在我提到的任何库方面)以及我对 Java 产品的无知,我再次表示歉意。对于来自高度商业化的 Microsoft 堆栈的我来说,这是一个全新的世界,因此我很容易在查找位置和我提到的 Java 库方面犯错误。如果有任何帮助或建议,我将不胜感激。

最佳答案

对于 FFT(对数组的批量操作)之类的事情,Java 中的范围检查可能会降低您的性能(至少最近确实如此)。您可能想要寻找优化其索引边界可证明性的库。

根据The HotSpot spec

The Java programming language specification requires array bounds checking to be performed with each array access. An index bounds check can be eliminated when the compiler can prove that an index used for an array access is within bounds.

我实际上会查看 JNI,如果它们单独非常大,则在那里进行批量操作。操作花费的时间越长(即求解大型线性系统或大型 FFT),使用 JNI 的值(value)就越大(即使您必须来回 memcpy)。

关于java - 用于 Java 的 MKL 加速数学库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027146/

相关文章:

java - 每次尝试获取离线播放器时,我都会收到空指针异常错误

java - 获取一个 ArrayList,其中包含某些对象类型的两个不同大小的 arraylist 的并集

linux - 唯一标识文件

javascript - 计算随机生成的六边形的6个顶点

java - java数学中的组合 'N choose R'?

java - FileWriter 用 Ja​​va 写入用户桌面,而不是服务器桌面

java - 2d platformer - 只移动当前在屏幕上的对象?

python - 使用 crontab 在 prawcore 上导入错误

java - Linux 上的 Java 实时事件调度入门?

c++ - Arrayfire向量化