并行合并排序在笔记本电脑上工作,但不在GPU和Xeon phi上工作

时间:2016-05-15 19:00:12

标签: c openmp gpu

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上正确排序,因为这些机器有更多的并行线程。

请让我知道如何才能让它更快,并在所有机器上正常工作。

1 个答案:

答案 0 :(得分:1)

并行排序是非常基本的算法。几乎每个并行计算平台都有排序API /示例代码。

以下是其中一些。

GPU / CPU上的推力排序 http://docs.nvidia.com/cuda/thrust/#sorting

GPU上的CUB排序 https://nvlabs.github.io/cub/

GPU上的现代GPU排序 https://nvlabs.github.io/moderngpu/

TBB / openmp / cilk加上CPU排序 https://software.intel.com/en-us/articles/a-parallel-stable-sort-using-c11-for-tbb-cilk-plus-and-openmp

Xeon Phi上的OpenCL排序 https://software.intel.com/en-us/articles/bitonic-sorting

文档和代码都在那里。