//serial enum sort
double serial_enum_sort(int a[], int at[])
{
double t1, t2;
t1 = omp_get_wtime();
int k, i, j;
for(i = 1; i <= MAXN; i++)
{
k = 1;
for(j = 1; j <= MAXN; j++)
if(a[i] > a[j] || (a[i] == a[j] && i>j))
k++;
at[k] = a[i];
}
t2 = omp_get_wtime();
return (t2 - t1);
}
// parallel enum sort
double parallel_enum_sort(int b[], int bt[])
{
double t1, t2;
t1 = omp_get_wtime();
int k, i, j, id;
#pragma omp parallel private(k, i, j, id)
{
id = omp_get_thread_num()+1;
// printf("%d\n", id);
for(i = id; i <= MAXN; i += NUM_THREADS)
{
k = 1;
for(j = 1; j <= MAXN; j++)
if(b[i] > b[j] || (b[i] == b[j] && i > j))
k++;
bt[k] = b[i];
}
}
t2 = omp_get_wtime();
return (t2 - t1);
}
это программа enum_sort с openmp. Я думаю, что bt [k] = b [i] будет стоить больше времени. Как я могу улучшить его? Мой компилятор gcc4.8.2 и моя ОС Linux MintOPENMP_why это так медленно в массиве записи, как я могу сделать это быстро?
3q для вашего удивительного ответа! – svtter
Ваш ответ неправильный. Его код делает работу. Это то же самое, что и pragma omp для расписания (static, 1) '. –
Хммм ... мой ответ тоже не прав. Я прав о расписании (статический, 1), но остальная часть моего ответа - фиктивная. Жаль, что я не могу удалить принятый ответ. Сейчас мне придется это исправить. - Z boson 12 мин назад –