2013-12-01 2 views
0

К примеру, я хав функции:C++ OMP, сравнить параметры и константа

void function(int x, int y) 
{ 
code here; 
} 

и по сравнению с тем я использую константу для замены данных х и у, это гораздо медленнее, когда я прохожу в параметрах.

Как я могу получить такую ​​же быструю скорость, как и постоянную, даже когда я использую переменные x и y?

(в коде есть в основном некоторые ящики для кодов) Я попытался #pragma omp parallel для firstprivate (x, y) для каждого цикла кода, я получил ускорение, но все же не так быстро, как Я использую константы, любые предложения? Или, есть ли способ, с помощью которого я могу просто обрабатывать pass-in x и y как две константы?

+0

Если значения, передаваемые в это Const, затем переходят на сопзЬ Справка? –

+0

значения, которые я передаю, - это два целых числа (int) – user2786737

ответ

0

Я думаю, выполнив:

ргадта OMP параллельна для firstprivate (х, у)

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

, например:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int x = 0; 
    int y = 0; 
    #pragma omp parallel shared(x, y) 
    { 
     #pragma omp barrier 
     for(x = 0, y = 0; x <= 500000; x++, y++) { 
      printf("x: %d, y: %d\n", x, y); 
     } 
    } 
    return 0; 
} 

раз против этого

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int x = 0; 
    int y = 0; 
    #pragma omp parallel firstprivate(x, y) 
    { 
     #pragma omp barrier 
     for(x = 0, y = 0; x <= 500000; x++, y++) { 
      printf("x: %d, y: %d\n", x, y); 
     } 
    } 
    return 0; 
} 

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

статья «OpenMP» на википедии выглядит очень хорошо, и я до сих пор в процессе прочтения и осмысления всего этого ...

+0

thx за помощь, я пойду проверю статью! – user2786737

+0

@ пользователь2786737 без проблем. также из вики: в настоящее время эффективно работает только в многопроцессорных платформах с общей памятью (см., однако, Cluster OpenMP от Intel и другие распределенные платформы общей памяти). Я пытался повысить производительность с помощью OpenMP, но он не похож на im, потому что у меня нет нескольких процессоров. Дайте мне знать, если вы получите результаты. – catfood

Смежные вопросы