我在网上搜索但找不到太多关于。
我的代码:
#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并行化?
答案 0 :(得分:0)
我没有看到这种算法并行化的方法。
请注意,第一个循环的不变量是vector
已经从[0..i-1]
排序。你不能并行运行第一个循环,主要是因为每个迭代都依赖于前一个循环,除了第一个循环。
关于嵌套的while循环:算法向右移动其值大于vector[i]
的元素。我不确定如何并行化它或它是否值得,但我有一种强烈的感觉,我会变得复杂:你需要更改代码并使用更多内存来避免数据 - 比赛。关于数据竞争:请注意,如果我们并行地从j=[1..i]
运行所有迭代,则可以同时读取和写入某个元素,因此我们需要注意这一点。除此之外,这种实施可能会遭受不平衡的负担。
相关问题: Insertion Sort in OpenMP