使用Visual Studio 2017的并行编程

parallel programming using Visual studio 2017

本文关键字:并行 编程 2017 Visual Studio 使用      更新时间:2023-10-16
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 efter/the交换之前/之前),我是连续的(订单错误,但无关紧要),这应该意味着从最左侧到枢轴位置的值已经改变,没有种族条件。

我也尝试了添加

#pragma omp atomic

在i 之前,更改后似乎没有什么不同。我仅在此循环上使用平行。而且我不知道代码的哪一部分会导致无序分类。

  1. 对于可行的平行算法,for循环的单个迭代通常应是独立的。在这种情况下,各个迭代不是独立的。

  2. 种族条件不仅可以在I 部分中发生,而且可以在交换部分中发生。