7

我必须乘以 2(大多数时候)稀疏矩阵。这些矩阵相当多(大约 10k*10k),我有两个 Xeon Quad 核心和一个线程来完成这项工作?

有没有用于多线程复制的快速库?任何其他建议?

4

5 回答 5

4

我会尝试来自 CERN 的Colt。它现在有点老了,但仍然为你正在尝试的东西提供了优秀的库。

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

于 2010-01-15T19:49:26.240 回答
3

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

Colt 和 Parallel Colt 非常慢。JAMA 也是如此。Java 中用于此类事情的最佳库是 JBLAS。

于 2010-06-29T11:40:09.183 回答
1

在GPU上做吗?http://www.nvidia.com/object/io_1254288141829.html

于 2010-01-15T19:48:11.780 回答
0

你看过Java Matrix Benchmark吗?它比较了几个最常见的 java 线性代数包之间的性能——包括几个使用/调用本机代码的包。矩阵乘法当然是测试/比较的事情之一,最新的基准测试实际上是在双四核英特尔至强机器上完成的。

您没有看到这些库如何使用稀疏矩阵执行(或者如果它们完全支持)。

使用纯 Java 实现可以获得非常好的性能,但是如果您希望使用这么大的矩阵获得最佳性能,则必须“离开 JVM”。

于 2015-10-29T09:55:48.777 回答
-1

是的,有用于多线程矩阵乘法的库;让谷歌成为你的朋友。尽管如果您只有一个线程,则可能不需要多线程。为什么八核机器上只有一个线程?要考虑的一个库是 Java BLAS 接口。

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

于 2010-01-15T19:49:22.330 回答