使用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 efter/the交换之前/之前),我是连续的(订单错误,但无关紧要),这应该意味着从最左侧到枢轴位置的值已经改变,没有种族条件。
我也尝试了添加
#pragma omp atomic
在i 之前,更改后似乎没有什么不同。我仅在此循环上使用平行。而且我不知道代码的哪一部分会导致无序分类。
-
对于可行的平行算法,for循环的单个迭代通常应是独立的。在这种情况下,各个迭代不是独立的。
-
种族条件不仅可以在I 部分中发生,而且可以在交换部分中发生。
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 如何对并行键盘输入进行编程
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 锁定如何在并行编程中工作?
- OpenMP 并行编程基于线程数与执行时间的关系
- 如何将GDB与OpenMP和并行编程使用
- 使用Visual Studio 2017的并行编程
- QT 并行编程
- 使用C 异步进行并行编程
- 带有多个线程的锁在C 中并行编程
- 用openMP进行并行编程
- 使用并行阵列的初学者编程学生
- GTX 550 Ti显卡支持动态并行编程
- 并行CUDA编程
- c++并行编程错误
- 如何在并行编程中收集从机到主机返回的值
- 如何在图问题中应用并行编程
- 内存使用并行编程
- 在TBB中使用递归、基于任务的并行编程获得不同的输出
- 什么是改进并行/分布式编程的好项目