OpenMP: локальные переменные автоматически закрыты? - PullRequest
50 голосов
/ 15 июня 2011
#pragma omp parallel
{
    int x; // private to each thread ?
}

#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
    int x; // private to each thread ?
}

Спасибо!

PS Если локальные переменные автоматически становятся закрытыми, какой смысл использовать выражение private ?

Ответы [ 2 ]

43 голосов
/ 04 мая 2015

Да, локальные переменные автоматически становятся закрытыми.

Причина существования предложения private заключается в том, что вам не нужно менять код .

Единственный способ распараллелить следующий код без частного предложения

int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
        //do something
    }
}

- это изменить код.Например, вот так:

int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
    int j;
    for(j = 0; j < n; j++) {
        //do something
    }
}

Это совершенно правильный код C89 / C90, но одной из целей OpenMP не является изменение кода, кроме добавления операторов pragma, которые можно включить или отключить при компиляции.время.

4 голосов
/ 15 июня 2011

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

Пожалуйста, обращайтесь http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Предложения атрибутов совместного использования данных]

...