Почему эта простая параллель 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

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