【问题标题】:Insertion sort with openmp使用openmp进行插入排序
【发布时间】:2016-08-26 15:58:45
【问题描述】:

我在互联网上搜索,但找不到太多相关信息。

我的代码:

#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并行化插入排序?

【问题讨论】:

    标签: parallel-processing openmp


    【解决方案1】:

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

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

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

    相关问题: Insertion Sort in OpenMP

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 2022-01-10
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多