openmp中的qsort库函数

时间:2019-05-03 16:06:20

标签: openmp qsort

我需要获取数组的排序索引,我使用了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在循环中并行进行,还是需要更改算法?任何建议或线索都将非常有帮助,非常感谢。

0 个答案:

没有答案