Почему эта простая параллель OpenMP для цикла создает неправильные результаты?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему эта простая параллель OpenMP для цикла создает неправильные результаты?

Сообщение Anonymous »

Этот код демонстрирует различное поведение при параллелизировании с OpenMP или нет < /p>

Код: Выделить всё

    // n: number of points
// polygon_: a vector of points forming a polygon
// image_points: an empty vector of points but reserve()d size n
// keep: a vector of bool of size n, initialized to false
#pragma omp parallel for
for (size_t pt_idx = 0; pt_idx < n; ++pt_idx) {
keep[pt_idx] =
cv::pointPolygonTest(polygon_, image_points[pt_idx], false) > 0;
}
Значения, установленные в True в векторе Keep , различаются между одно- и многопоточным выполнением. Code < /p>
В противном случае, каждый поток обращается только к одному местоположению в входных и выходных векторах и не вмешиваюсь, поэтому я в утрате. Данные раса на саме счетчике цикла, но это, по -видимому, ложное положительное. и Homebrew Libomp 19.1.6.

Подробнее здесь: https://stackoverflow.com/questions/795 ... ng-results
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»