[英]parallel programming using Visual studio 2017
int partition(int arr[], int l, int h)
{
int x = arr[h];
int i = (l - 1);
#pragma omp parallel for
for (int j = l; j <= h - 1; j++)
{
if (arr[j] <= x)
{
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[h]);
return (i + 1);
}
我嘗試在迭代快速排序程序上使用OpenMP。 上面的代碼是分區部分,它使用arr []中的最后一個元素作為數據透視,我想快速排序,xxx透視yyy,因為我從最左邊開始遞增到數據透視,先交換哪個數字都沒有關系,那些數字小於數據透視
但產生的答案不是排序數組。(部分排序)之后,我猜這是由於我測試了i(printf i(在交換之后/之前))上的“ i ++”上的競爭狀況引起的,我是連續的(順序錯誤,但沒有無關緊要?)這意味着從最左邊到樞軸位置的值已更改,沒有競爭條件。
我也嘗試添加
#pragma omp atomic
在i ++之前,但更改后似乎沒有什么不同。 我僅在此循環上使用並行。 而且我不知道代碼的哪一部分會導致無序排序。
為了使並行算法起作用,for循環的各個迭代通常應獨立。 在這種情況下,各個迭代不是獨立的。
競爭條件不僅可以在i ++部分中發生,而且可以在交換部分中發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.