使用openmp进行插入排序

时间:2016-08-26 15:58:45

标签: parallel-processing openmp

我在网上搜索但找不到太多关于。

我的代码:

#include <stdio.h>

void insertionsort(int vector[], int tam){
    int i, j, tmp;
    for(i = 1; i < tam; i++){
        j = i;
        while(j > 0 && vector[j-1] > vector[j]){
            tmp = vector[j];
            vector[j] = vector[j-1];
            vector[j-1] = tmp;
            j--;
        }
    }
}

如何将插入排序与openmp并行化?

1 个答案:

答案 0 :(得分:0)

我没有看到这种算法并行化的方法。

请注意,第一个循环的不变量是vector已经从[0..i-1]排序。你不能并行运行第一个循环,主要是因为每个迭代都依赖于前一个循环,除了第一个循环。

关于嵌套的while循环:算法向右移动其值大于vector[i]的元素。我不确定如何并行化它或它是否值得,但我有一种强烈的感觉,我会变得复杂:你需要更改代码并使用更多内存来避免数据 - 比赛。关于数据竞争:请注意,如果我们并行地从j=[1..i]运行所有迭代,则可以同时读取和写入某个元素,因此我们需要注意这一点。除此之外,这种实施可能会遭受不平衡的负担。

相关问题: Insertion Sort in OpenMP