Проблемы при применении Open MP (omp) с использованием Visual Studio 2022 с циклом for C++ для выполнения назначений масC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблемы при применении Open MP (omp) с использованием Visual Studio 2022 с циклом for C++ для выполнения назначений мас

Сообщение Anonymous »

Я изучаю omp и столкнулся с этой проблемой...
рассмотрим следующий код, где:
(i) Массивы a, b и c инициализируются

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

#pragma omp parallel num_threads(4)
{
#pragma omp for schedule(static, 64)
for(int i = 0; i < 256; i++)
{
d[i] = a[i];
if( i + 1 < 256 )
d[i+1] = b[i];
if( i + 2 < 256 )
d[i+2] = c[i];
}
}
При многократном запуске этого кода отмечаются следующие наблюдения:
(i) наблюдаются случайные результаты (правильные/неправильные)
(ii) неверные значения присваиваются 'd' по индексу i=64 или i=128
Учитывая количество назначенных потоков (4) и количество итераций (256 ), я применил Schedule(static, 64) с размером фрагмента 64. Я предполагаю, что статическое планирование заставит потоки выполняться последовательно. Я даже применил #pragma omp критическое к заданиям, но это не сработало, и случайное поведение сохранилось.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ver-for-lo
Ответить

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

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

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

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

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