簡體   English   中英

使用Visual Studio 2017進行並行編程

[英]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 ++之前,但更改后似乎沒有什么不同。 我僅在此循環上使用並行。 而且我不知道代碼的哪一部分會導致無序排序。

  1. 為了使並行算法起作用,for循環的各個迭代通常應獨立。 在這種情況下,各個迭代不是獨立的。

  2. 競爭條件不僅可以在i ++部分中發生,而且可以在交換部分中發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM