Очень похоже на этот вопрос Сортировка массива в openmp, который имеет несколько сотен просмотров, но не правильный отвечать. Поэтому я еще раз попробую спросить здесь снова. Я знаю о накладных расходах и бесполезности этого в отношении ускорения или производительности. Это просто небольшой пример для работы с openMP. Тот факт, что это insertSort, дан моим инструктором курса.
Вот мой код:
std::vector<int> insertionSort(std::vector<int> a) {
int i, j, k;
#pragma omp parallel for private(i,j,k)
for(i = 0; i < a.size(); i++) {
#pragma omp critical
k = a[i];
for (j = i; j > 0 && a[j-1] > k; j--)
#pragma omp critical
{
a[j] = a[j-1];
a[j] = k;
}
}
return a;
}
Я понимаю, что критическим аспектом является состояние гонки между потоками, получающими доступ (чтение и запись) к элементам a, поэтому я помещаю критический раздел вокруг них. Кажется, этого недостаточно. Что мне здесь не хватает. Без прагм сортировка правильная.