我正在尝试使用openMP在c ++中并行化qsort()函数,但是我遇到了一些问题。总而言之,对于要排序的大量元素(例如:V = 1000),qsort根本不起作用,我永远不会退出此函数(无限循环)。然后,我注意到我的并行版qsort比串行版慢得多。 有人可以帮帮我吗? 代码如下:https://dpaste.de/EaH0。
这里是kruscalP是并行版本的平均时间: 感谢
答案 0 :(得分:1)
当您写信至A
,exch0
和exch1
时,您的代码中会有多种竞争条件。这不仅会损害性能,而且可能会产生错误的结果。不幸的是,你必须使用一个关键部分来解决这个问题,这也可能会影响性能,但至少它会给出正确的结果。
#pragma omp for
for (i = 0; i < N-1; i += 2) {
#pragma critical
{
if (A[i].weight > A[i+1].weight) {
temp = A[i];
A[i] = A[i+1];
A[i+1] = temp;
exch0 = 1;
}
}
}
这同样适用于下一个for循环。如果你想有效地做到这一点,你必须改变你的算法。也许考虑合并排序。