如何解决Armadillo 调用的 blas 函数的“非法值”
我在 Visual Studio 2019 中使用 Armadillo (10.4.1) 来做一些矩阵的事情。我使用了 NuGet 管理器的 OpenBlas,但一切都很慢。我现在想切换到最新版本的 OpenBlas。我拿了最后一个 (0.3.15) 并按照以下教程使用 minGW 编译它:https://github.com/xianyi/OpenBLAS/wiki/How-to-use-OpenBLAS-in-Microsoft-Visual-Studio。
编译工作正常,但是当我尝试矩阵乘法时,控制台中抛出错误: 进入 DSPR2 时,第 1 号参数存在非法值
我确实定义了 ARMA_USE_BLAS、ARMA_DONT_USE_WRAPPER。我尝试使用 ARMA_BLAS_LONG、ARMA_BLAS_UNDERSCORE、ARMA_USE_FORTRAN_HIDDEN_ARGS,但没有任何变化。
使用 NuGet 管理器 (OpenBlas 0.2.14.1) 一切正常。 这是一个不起作用的示例:
#include <armadillo>
int main(){
arma::mat *mat1 = new arma::mat(5,5,arma::fill::ones);
arma::mat *mat2 = new arma::mat(5,arma::fill::ones);
arma::mat *result = new arma::mat();
*result = *mat1 * *mat2;
result->print();
delete mat1,mat2,result;
return 0;
}
你知道我做错了什么吗?
感谢您的时间!
巴托
解决方法
我终于设法解决了这个问题: 首先,我在这里下载了预编译的二进制文件 (x86): https://github.com/xianyi/OpenBLAS/releases/download/v0.3.10/OpenBLAS-0.3.10-x86.zip
我将 dll 放在我的项目文件夹中,将“libopenblas.dll.a”重命名为“libopenblas.lib”。它运行良好,但仍然比 Matlab 慢......所以我在一个全新的 x64 项目(使用 Armadillo 提供的预编译二进制文件)上对矩阵乘法和自定义函数进行了基准测试。 而且……一切都变得更快了!
所以我要离开 x86 切换到 x64 了! 主题已关闭!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。