Можно ли безопасно использовать std :: atomic с OpenMP?

В настоящее время я пытаюсь научиться использовать OpenMP, и у меня есть вопрос.
Безопасно ли делать что-то подобное:

  std::atomic<double> result;
#pragma omp parallel for
for(...)
{
result+= //some stuff;
}

Или я должен использовать:

  double result;
#pragma omp parallel for
for(...)
{
double tmp=0;
//some stuff;
#pragma omp atomic
result+=tmp;
}

Спасибо !

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

8

Решение

Поскольку атомика замедляет параллельное выполнение и плохо масштабируется, лучше

pragma omp parallel for reduction(+:result)
for(...)
{
double tmp=0;
//some stuff;
result+=tmp;
}
-3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]