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