race condition
От: Аноним  
Дата: 02.09.09 16:50
Оценка: :))
1. Это race condition? Почему?

2. как разрулить?

#pragma omp parallel for. 
     for (int i=2; i < 10; ++i).
     {.
        fact[i] = i * fact[i-1];.
     }.
Re: race condition
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 02.09.09 19:27
Оценка: 51 (4)
Да, это race condition. Используется ячейка массива, которая вычисляется другим потоком. И естественно ячейка может быть использована до того, как туда будет помещено нужное значение. Классика. Этот пример приводит Intel в нескольких своих документах. Я тоже его использовал в статье Parallel Lint, описывая возможности Intel C++ Compiler (смотри раздел Static Analysis Implemented in Intel C++ Compiler). Кстати, это настолько классический паттерн, что Intel С++ выдает на него предупреждение в режиме /Qdiag-enable:sc-parallel{1|2|3}. Наш анализатор VivaMP пока молчит, но скоро тоже научится ругаться и на это.

Как исправить. Тут дело сложнее. Самое верное видимо будет избрать другой алгоритм вычисления. Тут аналогия такая. Нет никакого смысла как-то мучиться, пытаясь распараллелить, например, сортировку пузырьком. Просто следует использовать алгоритм параллельной сортировки (см. статью "Параллельные алгоритмы обработки данных").
race condition openmp parallel ошибка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.