我是OpenMP的新手,正在尝试学习如何使用它。我使用以下代码并行化for循环。但是似乎使用openMP比不使用openMP需要更长的时间。这是我的代码:
#include <omp.h>
#include <stdio.h>
#include <ctime>
#include <ratio>
#include <chrono>
using namespace std::chrono;
void simple(int n)
{
int i;
int d;
#pragma omp parallel
#pragma omp for
for (i=1; i<n; i++) /* i is private by default */
d = (10000 + 4564) / 2.0;
}
int main ()
{
high_resolution_clock::time_point t1 = high_resolution_clock::now();
simple(90000000);
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
std::cout << "Time: " << time_span.count() << " seconds.";
}
我使用此命令行对其进行编译:
g++ -g -O2 test-2.cpp -o l -std=gnu++11
没有OpenMP所需的时间:1.885e-06
且使用OpenMP:0.00434578
问题1 :在上述代码中,为什么使用OpenMP比不使用OpenMP花费的时间更长?我怎么了?
问题2 :如何在上述for循环中使用OpenMP,因此其计算时间会比不使用OpenMP的要快?