使用openMP并行qsort

时间:2014-02-20 09:12:58

标签: c++ parallel-processing openmp quicksort

我正在尝试使用openMP在c ++中并行化qsort()函数,但是我遇到了一些问题。总而言之,对于要排序的大量元素(例如:V = 1000),qsort根本不起作用,我永远不会退出此函数(无限循环)。然后,我注意到我的并行版qsort比串行版慢得多。 有人可以帮帮我吗? 代码如下:https://dpaste.de/EaH0

这里是kruscalP是并行版本的平均时间:time elapsed 感谢

1 个答案:

答案 0 :(得分:1)

当您写信至Aexch0exch1时,您的代码中会有多种竞争条件。这不仅会损害性能,而且可能会产生错误的结果。不幸的是,你必须使用一个关键部分来解决这个问题,这也可能会影响性能,但至少它会给出正确的结果。

#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循环。如果你想有效地做到这一点,你必须改变你的算法。也许考虑合并排序。