R:任何比" tcrossprod"更快的R函数对称密集矩阵乘法?

时间:2016-09-16 13:01:16

标签: r matrix hpc

x = matrix(rnorm(1000000), nrow = 5000)

我想用它的转置计算矩阵乘法:x %*% t(x)

谷歌搜索后我发现可能更快的方法是

tcrossprod(x)

所花的时间是

 user  system elapsed 
2.975   0.000   2.960

是否还有其他R功能可以比上述功能更快地完成任务?

1 个答案:

答案 0 :(得分:3)

没有。在R级,这已经是最快的。但在内部它调用了level-3 BLAS例程dsyrk。因此,如果你能拥有一个高性能的BLAS库,那么速度会快得多。尝试将OpenBLAS与您的R链接。

链接BLAS库不需要重建R.您可以在我的问题linking R to BLAS library上阅读概述,其中包含几个链接,显示如何设置别名,然后在机器上的不同BLAS库之间切换

或者,您可以阅读我非常长的问题并回答Without root access, run R with tuned BLAS when it is linked with reference BLAS,它提供了使用外部BLAS库的各种方法,即使R链接到参考BLAS库。

作为旁注,对于维度为m * n的矩阵,dsyrk的FLOP计数为n * m ^ 2(注意,这是tcrossprod的计算成本。对于crossprod,它是m * n ^ 2。)

您有m = 5000n = 200,计算需要2.96s。因此,计算具有速度:(200 * 5000 ^ 2 / 2.96) * 1e-9 = 1.68 GFLOPs。嗯,这是一个普通的性能水平,所以目前你肯定使用参考BLAS。使用OpenBLAS,性能可以达到10 GFLOPs或更高,具体取决于您的CPU。祝你好运!