令我感到困惑的是,无论我在OpenMP中使用的线程数是多少,以下程序总是在相同的时间内执行:
#include <iostream>
#include <chrono>
#include <vector>
int main()
{
double sum = 0.0;
std::vector<int> v(1000000000, 1.0);
auto t1 = std::chrono::steady_clock::now();
#pragma omp parallel for
for(int k = 0 ; k < v.size(); ++k)
{
v[k] *= 2;
}
auto t2 = std::chrono::steady_clock::now();
auto dt = std::chrono::duration<double, std::nano>(t2 - t1).count();
std::cout << dt<< std::endl;
return 0;
}
在有人要求之前:是的,OpenMP正在我的机器上工作;上面的代码来自我正在研究的库,我一直在观察OpenMP的加速。我正在使用gcc 5.4.0并使用-O3
进行编译,并在Intel i5-4210U上运行。
执行时间是否与任何人的线程数一致?
这是完整的gcc命令:g++ -O3 -std=c++11 x.cpp -fopenmp