Проблема распараллеливания вложенных взаимозависимых циклов для присвоения массивов.C++

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

Сообщение Anonymous »

Я изучаю omp и столкнулся с вложенными циклами, включающими присваивание массивов и т. д. с подробностями:
  • Индексы циклов взаимозависимы
  • Массивы a, b и c инициализированы
  • Я использую Visual Studio 2022 (очевидно, с ограниченными возможностями omp из-за старой версии)
Хотя следующий код работает нормально, но мне интересно,
есть ли способ выполнить эту задачу без использования предложения расписания.

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

#pragma omp parallel
{
int temp = 0;

#pragma omp for
for(int i = 0 ; i < 10; i++)
for(int j = i + 1; j < 10; j++)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;

temp = b[i];
b[i] = b[j];
b[j] = temp;

temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}

}
Я пытался избежать расписания, вводя критическое предложение вокруг заданий, но это не сработало. Можем ли мы каким-либо образом использовать здесь предложение сокращения?
Более того, если бы кто-нибудь мог дать рекомендации, которым следует следовать при работе с массивами, особенно когда они зависят от предыдущих/следующих значений (например, A = A[i+1] - дельта;).
Результаты оказались правильными при использовании предложения расписания, но я хочу чтобы избежать этого и получить результаты с меньшими затратами на выполнение.

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

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

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

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

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

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