犰狳比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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...