Подтвердить что ты не робот

OpenMP: локальные переменные автоматически закрыты?

#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 ?
}

Спасибо!

P.S. Если локальные переменные автоматически закрыты, зачем использовать частное предложение?

4b9b3361

Ответ 1

P.S. Если локальные переменные автоматически закрыты, зачем использовать частное предложение?

Предполагается, что в более ранних версиях C вам нужно было объявить все переменные в начале функции, и это все еще преобладает стиль.

То есть, код такой:

#pragma omp parallel
{
    int x;
}

является предпочтительным способом в С++. Но в некоторых версиях C вы не можете использовать этот код, вам нужно использовать предложение private.

Ответ 2

Причиной частного предложения является то, что вам не нужно менять код.

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

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, которые можно включить или отключить во время компиляции.

Ответ 3

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

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