gpt4 book ai didi

c++ - 使用 Visual Studio 2017 进行并行编程

转载 作者:行者123 更新时间:2023-11-28 04:54:40 25 4
gpt4 key购买 nike

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 pivot yyy 当我从最左边增加到 pivot 时,先交换哪个数字并不重要,那些数字小于 pivot

但产生的答案不是排序数组。(部分排序)在那之后,我猜这是由“i++”上的竞争条件引起的我测试了 i(printf i after/before swap),i 是连续的(顺序错误,但没关系?)这应该意味着从最左边到枢轴位置的值已经改变,没有竞争条件。

我也试过添加

#pragma omp atomic

在i++之前,改了之后好像没什么区别。我只在这个循环上使用并行。而且我不知道代码的哪一部分导致了无序排序。

最佳答案

  1. 要使并行算法起作用,for 循环的各个迭代通常应该是独立的。在这种情况下,各个迭代不是独立的。

  2. race condition不仅可以发生在i++部分,也可以发生在swapping部分。

关于c++ - 使用 Visual Studio 2017 进行并行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47453983/

25 4 0
文章推荐: html - Bootstrap 的容器是否会在特定的浏览器宽度下停止提供边框?
文章推荐: javascript - jQuery:追加到文本区域内段落的 html 的最佳方式
文章推荐: php - 如何在html
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com