Итак, после моей предыдущей попытки с openMP я понял, что у меня нет ни одного примера кода, который на самом деле работает быстрее в моей системе при распараллеливании по сравнению с последовательным интерфейсом. Ниже приведен краткий пример попытки (которая не удалась), сначала показывающая, что действительно есть два ядра, и что openMP использует их, а затем рассчитывающая время для двух «мертвых» задач, одна с использованием openMP, а другая - нет.
Вполне возможно, что в задаче, над которой я тестирую, есть что-то не так, поэтому я был бы признателен, если бы кто-то смог провести еще один тест на работоспособность, просто чтобы я мог своими глазами увидеть, что многопоточность МОЖЕТ работать :)
#include <iostream>
#include <vector>
#include <ctime>
#include <cmath>
using namespace std;
#include <omp.h>
int main(int argc, char *argv[])
{
//Below code will be run once for each processor (there are two)
#pragma omp parallel
{
cout << omp_get_thread_num() << endl; //this should output 1 and 0, in random order
}
//The parallel example:
vector <double> a(50000,0);
clock_t start = clock();
#pragma omp parallel for shared(a)
for (int i=0; i < 50000; i++)
{
double StartVal=i;
for (int j=0; j<2000; ++j)
a[i]=(StartVal + log(exp(exp((double) i))));
}
cout<< "Time: " << ( (double) ( clock() - start ) / (double)CLOCKS_PER_SEC ) <<endl;
//The serial example:
start = clock();
for (int i=0; i < 50000; i++)
{
double StartVal=i;
for (int j=0; j<2000; ++j)
a[i]=(StartVal + log(exp(exp((double) i))));
}
cout<< "Time: " << ( (double) ( clock() - start ) / (double)CLOCKS_PER_SEC ) <<endl;
return 0;
}
вывод:
1
0
Time: 4.07
Time: 3.84
Может ли это быть связано с оптимизацией forloop, на которой отсутствует openMP? Или что-то не так с тем, как я измеряю время? В таком случае, у вас есть идеи для другого теста?
Заранее спасибо:)
EDIT:
это действительно оказалось, что я плохо измерял время. Используя omp_get_wtime()
, вывод становится:
1
0
Time: 4.40776
Time: 7.77676
Полагаю, мне лучше вернуться и еще раз взглянуть на мой старый вопрос ...