Функция библиотеки qsort в openmp - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно получить отсортированные индексы массива, я использовал функцию 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 параллельным в цикле, или мне нужно изменить алгоритм?Любые предложения или предложения будут очень полезны, большое спасибо.

...