我已经使用MATLAB一段时间来进行我的项目,但我几乎没有C++的经验。
我需要速度,听说C++比MATLAB更有效率和更快。所以我尝试了这个:
我在MATLAB中使用rand(5000,5000)创建了一个随机数矩阵。
在C++中,我初始化了一个二维向量,并创建了两个for循环,每个循环都循环了5000次。MATLAB比C++快4-5倍,所以我认为这是因为MATLAB并行执行向量化代码,然后我使用parallel_for编写了C++代码。以下是代码:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <fstream>
#include <ppl.h>
using namespace std;
using namespace concurrency;
int main();
{
int a = 5000, b = 5000, j, k;
vector< vector<int> > vec(a, vector<imt>(b));
parallel_for(int(0), a, [&](int i) {
for (j = 0; j <b; j++)
{
vec[i][j] = rand();
}
});
}
所以上面的代码比MATLAB的
rand(5000,5000)
快大约25%。然而,C++使用了100%的CPU,而MATLAB只使用了30%的CPU。所以我通过运行3个实例的
rand(5000,5000)
来强制MATLAB使用所有的CPU,并将所需时间除以3。这使得MATLAB比C++快两倍。我想知道我错过了什么?我知道这只是一个小例子,但我需要一个答案来确保将我的代码移植到C++。
当前状态:
当我编写没有
parallel_for
的C++代码时,我获得了与MATLAB相同的CPU使用率下一半的速度。然而,回答问题的人说它们几乎相同。我不明白我错过了什么。以下是优化菜单的快照:
![enter image description here](https://istack.dev59.com/HXP8i.webp)