【发布时间】:2018-05-17 07:57:28
【问题描述】:
我已将 MATLAB 代码转换为 C++ 以加快速度,使用 Armadillo 库在 C++ 中处理矩阵运算,但令人惊讶的是它比 MATLAB 代码慢了 10 倍!
所以我测试了犰狳库,看看是否是原因。下面的代码是一个简单的测试代码,它初始化两个矩阵,将它们相加并将结果保存到一个新矩阵中。一段代码使用了 Armadillo 库,而另一段则没有。使用犰狳的部分太慢了(注意经过的时间)。
它真的会减慢执行速度(尽管它应该加快执行速度)还是我错过了什么?
#include<iostream>
#include<math.h>
#include<chrono>
#include<armadillo>
using namespace std;
using namespace arma;
int main()
{
auto start = std::chrono::high_resolution_clock::now();
double a[100][100];
double b[100][100];
double c[100][100];
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
a[i][j] = 1;
b[i][j] = 1;
c[i][j] = a[i][j] + b[i][j];
}
}
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = finish - start;
std::cout << "Elapsed time: " << elapsed.count() << " s\n";
auto start1 = std::chrono::high_resolution_clock::now();
mat a1=ones(100,100);
mat b1=ones(100,100);
mat c1(100,100);
c1 = a1 + b1;
auto finish1 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed1 = finish1 - start1;
std::cout << "Elapsed time: " << elapsed1.count() << " s\n";
return 0;
}
这是我得到的答案:
Elapsed time: 5.1729e-05 s
Elapsed time: 0.00025536 s
如您所见,犰狳的速度要慢得多!不使用犰狳库会更好吗?
【问题讨论】:
-
@Wolfie 感谢您提供的链接,我已经检查过了,但我想知道犰狳库是否会减慢代码速度,就像我附加的代码一样。
-
为什么要使用库来帮助进行矩阵运算,然后手动完成矩阵运算?从 MATLAB 的角度来看,我不知道 C++/Armadillo syntax,但您肯定想在使用 Armadillo 时消除循环并执行
mat c1 = a1 + b1? -
你的代码没有任何MATLAB,手头的问题和MATLAB有什么关系?
-
@MAh2014 不是用 C++ 开发 MATLAB 代码,而是用 C++ 做数学运算,与 MATLAB 无关。此外,MATLAB 是用于矩阵运算的最快代码,因为它在底层使用了高度优化的库。如果你认为你可以写出比 MATLAB 更快的线性代数代码,那么要么你错了,要么你会变得非常富有。我打赌它是第一个 ;)
标签: c++ performance visual-c++ armadillo