Вы очень озадачены атрибутами совместного использования данных и совместного использования для OpenMP.Этот ответ не пытается научить вас правильно, а лишь дает вам конкретный конкретный пример.
Ваш код не имеет никакого смысла и не компилируется.
Вам не нужно многократное использованиерегионы или тому подобное, и есть только две переменные.v
- который определен снаружи, читается всеми и должен быть shared
- что это неявно, потому что он определен снаружи.Затем есть sum
, который является редукционной переменной.
Кроме того, вам необходимо применить расстановку (for
) к циклу.В итоге это выглядит так:
int v[] ={1,2,3,4,5,6,7,8,9};
int sum = 0;
#pragma omp parallel for reduction(+: sum)
for (int i = 0; i < sizeof(v)/sizeof(int); i++){
sum += v[i];
}
printf("%d\n",sum);
Обратите внимание, что в этом примере есть private
переменные.Закрытые переменные очень опасны, потому что они неинициализированы внутри параллельной области, просто не используйте их явно.Если вам нужно что-то локальное, объявите это внутри параллельной области.