c++ - Armadillo 调用的 blas 函数的“非法价值”
问题描述
我在 Visual Studio 2019 中使用 Armadillo (10.4.1) 来做一些矩阵的事情。我使用了 NuGet 管理器的 OpenBlas,但一切都很慢。我现在想切换到最新版本的 OpenBlas。我拿了最后一个(0.3.15)并按照这个tuto用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, 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 !主题已关闭!
推荐阅读
- python - 在python中,循环n次具有不同值的list.insert只插入最后一个值n次为什么?
- javascript - 已解决:jsp编码显示问题
- python - 在 python 中验证“MM/DD/YYYY hh:mm”的正则表达式函数
- python - 获取维基百科表格结果
- powershell - Powershell - Outlook 获取收件箱共享邮箱
- core-data - 使用SwiftUI、Core Data、一对多关系,为什么Many边添加一行时列表不更新
- javascript - 如何将来自 axios.all 的响应与键相关联
- r - dplyr 使用占位符选择列。并粘贴到 mutate_at
- python - 在 Python 中重写 C++ 位操作函数
- azure - 通过 ARM 模板或 Terraform 定义范围配置/解决方案目标