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