R:比“R”更快的任何R函数;“tcrossprod”;对称稠密矩阵乘法?

R:比“R”更快的任何R函数;“tcrossprod”;对称稠密矩阵乘法?,r,matrix,hpc,R,Matrix,Hpc,让 我想用转置计算矩阵乘法:x%*%t(x) 在谷歌搜索之后,我发现了一个可能更快的方法来实现上述目标 x = matrix(rnorm(1000000), nrow = 5000) 所花的时间是 tcrossprod(x) 是否有任何其他R功能可以比上述功能更快地完成任务?否。在R级别,这已经是最快的。但在内部,它调用3级BLAS例程dsyrk。因此,如果您可以拥有一个高性能的BLAS库,这将快得多。尝试链接到你的R 链接BLAS库不需要重新构建R。您可以阅读我的问题以获得概述,其中包含几

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

在谷歌搜索之后,我发现了一个可能更快的方法来实现上述目标

x = matrix(rnorm(1000000), nrow = 5000)
所花的时间是

tcrossprod(x)

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

否。在R级别,这已经是最快的。但在内部,它调用3级BLAS例程
dsyrk
。因此,如果您可以拥有一个高性能的BLAS库,这将快得多。尝试链接到你的R

链接BLAS库不需要重新构建R。您可以阅读我的问题以获得概述,其中包含几个链接,向您展示如何设置alias,然后在计算机上的不同BLAS库之间切换

或者,您可以阅读我的非常长的问题和答案,其中给出了使用外部BLAS库的各种方法,即使R链接到参考BLAS库


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


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

没有。在R级别,这已经是最快的了。但在内部,它调用3级BLAS例程
dsyrk
。因此,如果您可以拥有一个高性能的BLAS库,这将快得多。尝试链接到你的R

链接BLAS库不需要重新构建R。您可以阅读我的问题以获得概述,其中包含几个链接,向您展示如何设置alias,然后在计算机上的不同BLAS库之间切换

或者,您可以阅读我的非常长的问题和答案,其中给出了使用外部BLAS库的各种方法,即使R链接到参考BLAS库


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


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

你们有你们例子中所有的双精度吗?很少有这么大的矩阵没有零或整数。随着您显示的格式的改变,时间急剧增加。@PierreLafortune。我正在处理的实际矩阵是由整数和分数作为元素组成的。输出矩阵是协方差矩阵。@ZheyuanLi我想用r函数“eigen”计算特征值和向量。你的例子中有所有的双精度吗?很少有这么大的矩阵没有零或整数。随着您显示的格式的改变,时间急剧增加。@PierreLafortune。我正在处理的实际矩阵是由整数和分数作为元素组成的。输出矩阵是协方差矩阵。@ZheyuanLi我想用r函数“eigen”计算特征值和向量。
 user  system elapsed 
2.975   0.000   2.960