Я не могу оптимизировать с распараллеливанием программы - PullRequest
1 голос
/ 04 февраля 2012

Я пытаюсь указать на разницу между последовательной и параллельной программой с 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);

1 Ответ

4 голосов
/ 04 февраля 2012

Существуют некоторые постоянные накладные расходы для раскручивания потоков и распределения работы.Для одной простой операции, такой как умножение, эти издержки намного превышают время, сэкономленное благодаря параллельному выполнению операций.

Вы с большей вероятностью увидите преимущества, если дадите потокам какую-то реальную работу.

...