Java矩阵乘法(快速)

7

我需要将两个(大多数情况下)稀疏矩阵相乘。 这些矩阵非常大(约为10k*10k),而我的计算机只有两个Xeon四核处理器和一个线程来完成此任务。

是否有任何快速的多线程乘法库?还有其他建议吗?

5个回答

4

我建议你尝试来自CERN的Colt。虽然它有点老了,但仍然为你所需的提供了出色的库。

对于并行处理,请尝试较新的Parallel Colt


正是我要发布的内容。 - BobMcGee
你确定我可以创建一个 10k*10k 的矩阵吗? - BigG
当然可以,这只有800 MB(对于double类型)。请确保您正在使用64位的JVM。 - Adam Goode
哦,而且它是稀疏的。没问题。 - Adam Goode

3

尊重Colt和Parallel Colt,但它们的速度并不太快。如果您坚持使用Java并期望快速数值计算,请使用JBLAS。JBLAS使用ATLAS。我已经编译了使用多线程ATLAS的JBLAS - 默认情况下它不会这样做。您需要更改一些配置选项。然而,即使是单线程的JBLAS也比多线程的Colt和Parallel Colt更快。我测试过Colt、Parallel Colt、JAMA和JBLAS。JBLAS是最好的。

Colt和Parallel Colt非常慢。JAMA也是如此。在Java中进行此类操作的最佳库是JBLAS。


1

我有8个核心,2.6GHz,但我只使用其中一个。 - BigG
1
如果你正在进行单精度乘法,那么在一张好的显卡上运行的GPGPU实现仍然可能会比8个核心更快。由于它拥有如此多的流处理器(现代芯片中有数百个),因此GPGPU可以比CPU快10倍到100倍。 - BobMcGee

0
你看过Java矩阵基准测试了吗?它比较了几个最常见的Java线性代数包之间的性能,其中包括一些使用/调用本地代码的包。当然,矩阵乘法是其中之一被测试和比较的内容,而最新的基准测试执行实际上是在一个双路四核Intel Xeon机器上完成的。
你没有看到的是这些库如何使用稀疏矩阵(或者它们是否支持这种操作)。
使用纯Java实现可以获得非常好的性能,但如果你想要最好的大矩阵性能,你必须“离开JVM”。

-1

是的,有用于多线程矩阵乘法的库;让谷歌成为你的朋友。但是如果你只有一个线程,多线程可能并不必要。为什么在一台8核机器上只有一个线程?一个值得考虑的库是Java BLAS接口。

你肯定采取了正确的方法,寻找库而不是尝试自己编写。


虽然有些混淆,但我相信 OP 想表达的是他/她还没有将算法多线程化,因此一个多线程实现的 LA 会很有帮助。 (?) - Chinasaur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接