2016-05-15 1 views
1
void pmergesort(int a[], int l, int r) 
{ 
    if (l < r) 
     { 
     int m = l+(r-l)/2; 
     #pragma omp parallel 
      { 
       #pragma omp single 
       { 
        #pragma omp task 
        pmergesort(a, l, m); 
       } 
      #pragma omp task 
      pmergesort(a, m+1, r); 
      #pragma omp taskwait 
      pmerge(a,l,m,r); 
     } 
    } 
} 

Мой профессор сказал мне использовать #pragma omp single перед первым рекурсивным вызовом, чтобы сделать программу намного быстрее. Он работает очень быстро на моем ноутбуке, но он не правильно сортируется на GPU и Xeon phi, поскольку эти машины имеют больше параллельных потоков.Parallel Merge sort работает на ноутбуке, но не на GPU и Xeon phi

Пожалуйста, дайте мне знать, что я могу сделать, чтобы ускорить работу и работать на всех машинах.

+3

Кто знает, что вы имеете в виду, так как код неформатирован, а фигурные скобки не сбалансированы. –

+0

Извинения во время написания кода, это произошло, теперь я изменил его. Пожалуйста, взгляните и дайте мне знать, если у вас есть идея? –

ответ

1

Параллельная сортировка - очень простой алгоритм. Почти каждая параллельная вычислительная платформа имеет сортировку API/пример кода.

Некоторые из них.

Thrust сортировать на GPU/CPU http://docs.nvidia.com/cuda/thrust/#sorting

CUB сортировать на GPU https://nvlabs.github.io/cub/

Современные GPU сортировать на GPU https://nvlabs.github.io/moderngpu/

ТВВ/OpenMP/Cilk плюс сортировать по CPU https://software.intel.com/en-us/articles/a-parallel-stable-sort-using-c11-for-tbb-cilk-plus-and-openmp

OpenCL сортировать по Xeon Phi https://software.intel.com/en-us/articles/bitonic-sorting.

Документы и код все есть.

+0

Хорошее резюме, спасибо! –

+0

Спасибо за вашу помощь, однако, на самом деле, я уже проверил все эти ссылки, мой профессор хочет #pragma omp single перед первым рекурсивным вызовом, и когда я это делаю, он отлично работает на процессорах GPU и Xeon, поэтому он говорит, чтобы улучшить его, но я проверил почти все ссылки и не нашел ничего, чтобы улучшить его. –

+0

@PragyaSharma Code, работающий на GPU и Xeon Phi, сильно отличается от кода OpenMP. Нет никакого шанса, что ваш код может работать на GPU с одной или двумя строками модификации. В основном вам нужно написать отдельный код для каждой вычислительной платформы. – kangshiyin