如何解决犰狳比RcppArmadillo慢
我试图理解为什么在c ++中直接调用时,调用Armadillo的arma :: pinv会花费更多时间 (Visual Studio) / strong>通过RcppArmadillo在 R中调用的功能相同。
在R中,我只是在编译/生成程序包时遵循了一种超级基本的方法
MyPackageName <- "thetestpackage"
RcppArmadillo.package.skeleton(MyPackageName,example_code = FALSE)
compileAttributes(pkgdir = paste0("./",MyPackageName),verbose = TRUE)
install(MyPackageName)
在Visual Studio中,我使用NuGet软件包管理器安装了“ armadillo代码”和“ OpenBLAS”,但我还尝试下载Armadillo并使用“其他包含目录”包含该库:相同的结果。
我的感觉是我没有有效地使用LAPACK和/或BLAS。你有什么想法?提前非常感谢!
在VS中运行的c ++代码如下,其中i = 1000(迭代)和n = 100(矩阵的大小)运行需要大约25秒钟
#include <iostream>
#include <armadillo>
#include <chrono>
arma::mat rcpparma_myfun(int i,int n) {
arma::mat A(n,n);
A.randn();
arma::mat B;
B = arma::pinv(A);
auto start = std::chrono::high_resolution_clock::now();
for (int ii = 0; ii < i; ii++) {
B = arma::pinv(A);
}
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
std::cout << "Elapsed time: " << elapsed.count() << " s\n";
return B;
}
int main()
{
int iters;
int size;
std::cout << "Enter iteration\n";
std::cin >> iters;
std::cout << "Enter size\n";
std::cin >> size;
arma::mat BB;
BB = rcpparma_myfun(iters,size);
}
用于RccpArmadillo的cpp函数如下所示,并且在i = 1000(迭代)和n = 100(矩阵大小)的情况下,运行大约需要8秒钟:
#include "RcppArmadillo.h"
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::mat rcpparma_myfun(int i,n);
A.randn();
arma::mat B;
B = arma::pinv(A);
for (int ii = 0; ii < i; ii++) {
B = arma::pinv(A);
}
return B;
}
``
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。