R:对于对称密集矩阵乘法,有比 "tcrossprod" 更快的 R 函数吗?

R: any faster R function than "tcrossprod" for symmetric dense matrix multiplication?

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

我想计算矩阵乘法及其转置:x %*% t(x)

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

tcrossprod(x)

花费的时间是

 user  system elapsed 
2.975   0.000   2.960

是否有任何其他 R 函数可以比上述函数更快地完成任务?

没有。在 R 级别,这已经是最快的了。但在内部它调用 level-3 BLAS 例程 dsyrk。所以如果你有一个高性能的 BLAS 库,这会快很多。尝试将 OpenBLAS 链接到您的 R.

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

或者,您可以阅读我的超长问答 ,其中提供了多种使用外部 BLAS 库的方法,即使 R 链接到参考 BLAS 库也是如此。


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

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