2016-10-18 2 views
1

Кто-нибудь знает, может ли быть пример firstprivate в openmp?Предложение OpenMP Firstprivate

rowstr[0] = 0; 
for (j = 1; j < nrows+1; j++) { 
    rowstr[j] = rowstr[j] + rowstr[j-1]; 
} 
nza = rowstr[nrows] - 1; 

firstprivate переменная rowstr и j является частной переменной.

ответ

0

На самом деле нет, если использовать выражение firstprivate вы можете иметь несоответствие в вашем выводе, поскольку некоторые значения не будут обновляться, уточняющее:

Давайте предположим, что это массив размера 4 и у вас есть 2 темы, одна нити вы получаете итерации 0 и 1, а другие 2 и 3 (в идеальном мире). Если вы используете предложение firstprivate, второй поток будет суммировать позицию 2 массива с первоначально в массиве в позиции 1 вместо того, чтобы суммировать его с предыдущей итерацией, как это делает последовательная версия.

Не только это, этот конкретный цикл имеет проблемы с зависимостью, и вы должны использовать что-то вроде сокращения суммы в nza.

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