我需要获取数组的排序索引,我使用了qsort函数。我正在寻找使用openmp并行化代码。我不确定库函数是否可以在openmp中并行化。我的serila代码在下面,并行部分被注释。
#include <stdio.h>
#include <stdlib.h>
struct str
{
float value;
int index;
};
int cmp(const void *a, const void *b)
{
struct str *a1 = (struct str *)a;
struct str *a2 = (struct str *)b;
if ((*a1).value < (*a2).value)
return -1;
else if ((*a1).value > (*a2).value)
return 1;
else
return 0;
}
int main()
{
int i,j,n=100000000,m=5 ;
float a=5.0;
float arr[n];
for (i = 0 ; i < n ; i++ ) {
arr[i] = ((float)rand()/(float)(RAND_MAX)*a);
}
struct str objects[n];
for (i = 0; i < n; i++)
{
objects[i].value = arr[i];
objects[i].index = i;
}
// When I put the following function in a loop, I need to make it parallel
// #prgma omp parallel for
// for(i=0;i<N;i++){
qsort(objects, n, sizeof(objects[0]), cmp);
// }
return 0;
}
有没有一种方法可以使qsort在循环中并行进行,还是需要更改算法?任何建议或线索都将非常有帮助,非常感谢。