Я пытаюсь указать на разницу между последовательной и параллельной программой с OpenMP. Я работаю над научным Linux.
Это простая программа, которая выполняет суммирование и умножение, а затем суммирует результаты.
Я использовал функцию omp_get_wtime()
для проверки времени выполнения, и в результате распараллеленная часть выполняется медленнее, чем последовательная часть.
Я думаю, что проблема в случаях, потому что оба потока входят в коммутатор, и это увеличивает время выполнения.
Мне бы хотелось, чтобы первый поток составлял сумму, а второй - умножение, чтобы ускорить окончательный результат. Вы можете мне помочь?
В начале программы я использую:
#define NUM_THREADS 2
...
omp_set_num_threads(NUM_THREADS);
Это программа:
double a,b,c,d,g,timer,timer2;
printf("Insert 2 numbers \n"); cin >> a; cin >> b;
timer = omp_get_wtime();
c = a+b;
d = a*b;
g = c+d;
printf("the result is: %f\n\n",g);
printf("time: %f seconds\n\n",omp_get_wtime()-timer);
timer2 = omp_get_wtime();
#pragma omp parallel
{
switch ( omp_get_thread_num() )
{
case 1: c=a+b;
case 2: d=a*b;
}
}
g = c+d;
printf("parallel time: %f seconds\n\n",g,omp_get_wtime()-timer2);