与 RcppArmadillo 的矩阵乘法:为什么它不更快?
Matrix-multiplication with RcppArmadillo: Why is it not faster?
我想用 RcppArmadillo 做一些矩阵乘法。但是,我的代码显示 使用 RcppArmadillo 并没有变得更快。
我正在使用 Windows_10_Pro 和 R 3.2.4,以及 RcppArmadillo 0.6.600.4.0
例如:
library(RcppArmadillo)
library(inline)
MCplus <- cxxfunction(signature(X_="numeric", Y_="numeric"),body ='
arma::mat X = Rcpp::as<arma::mat>(X_);
arma::mat Y = Rcpp::as<arma::mat>(Y_);
arma::mat ans = X * Y * X;
return(wrap(ans));
', plugin="RcppArmadillo")
A <- matrix(1:16000000,4000,4000)
C <- matrix(2:16000001,4000,4000)
R_M <- proc.time()
ans_R <- A%*%C%*%A # test with R
proc.time() - R_M
C_M <- proc.time()
ans_C <- MCplus(A,C) # test with RcppArmadillo
proc.time() - C_M
R 输出:
user system elapsed
106.75 0.24 106.98
RcppArmadillo 输出:
user system elapsed
108.28 0.23 108.56
有什么可以改进的吗?
提前致谢!
R 本身将其分配给 LAPACK/BLAS —— 链接到通过 LAPACK/BLAS 调用的 R 的代码也是如此。所以是的,这两种方法都将 运行 相同的代码,差异只是因为开销很小。
有很多教程可以告诉您如何更改 LAPACK 库。这当然取决于操作系统。也许从 R Installation and Administration 手册及其附录开始。
我想用 RcppArmadillo 做一些矩阵乘法。但是,我的代码显示 使用 RcppArmadillo 并没有变得更快。
我正在使用 Windows_10_Pro 和 R 3.2.4,以及 RcppArmadillo 0.6.600.4.0
例如:
library(RcppArmadillo)
library(inline)
MCplus <- cxxfunction(signature(X_="numeric", Y_="numeric"),body ='
arma::mat X = Rcpp::as<arma::mat>(X_);
arma::mat Y = Rcpp::as<arma::mat>(Y_);
arma::mat ans = X * Y * X;
return(wrap(ans));
', plugin="RcppArmadillo")
A <- matrix(1:16000000,4000,4000)
C <- matrix(2:16000001,4000,4000)
R_M <- proc.time()
ans_R <- A%*%C%*%A # test with R
proc.time() - R_M
C_M <- proc.time()
ans_C <- MCplus(A,C) # test with RcppArmadillo
proc.time() - C_M
R 输出:
user system elapsed
106.75 0.24 106.98
RcppArmadillo 输出:
user system elapsed
108.28 0.23 108.56
有什么可以改进的吗?
提前致谢!
R 本身将其分配给 LAPACK/BLAS —— 链接到通过 LAPACK/BLAS 调用的 R 的代码也是如此。所以是的,这两种方法都将 运行 相同的代码,差异只是因为开销很小。
有很多教程可以告诉您如何更改 LAPACK 库。这当然取决于操作系统。也许从 R Installation and Administration 手册及其附录开始。