C 并行合并排序工作在笔记本电脑上,但不在GPU和Xeon phi上 void pmergesort(int a[],int l,int r) { if(l

C 并行合并排序工作在笔记本电脑上,但不在GPU和Xeon phi上 void pmergesort(int a[],int l,int r) { if(l,c,openmp,gpu,C,Openmp,Gpu,我的教授告诉我在第一次递归调用之前使用#pragma omp single,以便使程序更快。它在我的笔记本电脑上运行得非常快,但在GPU和Xeon phi上排序不正确,因为这些机器有更多的并行线程 请让我知道我能做些什么使它更快,在所有机器上正常工作。并行排序是非常基本的算法。几乎每个并行计算平台都有sortapi/示例代码 这里有一些 GPU/CPU上的推力排序 GPU上的CUB排序 基于GPU的现代GPU排序 CPU上的TBB/openmp/cilk plus排序 Xeon-Phi上

我的教授告诉我在第一次递归调用之前使用#pragma omp single,以便使程序更快。它在我的笔记本电脑上运行得非常快,但在GPU和Xeon phi上排序不正确,因为这些机器有更多的并行线程


请让我知道我能做些什么使它更快,在所有机器上正常工作。

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

这里有一些

GPU/CPU上的推力排序

GPU上的CUB排序

基于GPU的现代GPU排序

CPU上的TBB/openmp/cilk plus排序

Xeon-Phi上的OpenCL排序


文档和代码都在那里

谁知道你是什么意思,因为代码未格式化,大括号不平衡。在粘贴代码时表示歉意发生了这种情况,现在我已经更改了它,请看一看,如果你有任何想法,请让我知道?谢谢你的帮助,但是,实际上我已经检查了所有这些链接,我的教授希望在第一次递归调用之前使用#pragma omp single,而当我这样做时,它在GPU和Xeon处理器上运行得不好,所以他说要改进它,但我检查了几乎所有的链接,没有发现任何可以改进的地方。@PragyaSharma在GPU和Xeon Phi上运行的代码与OpenMP代码完全不同。您的代码不可能在GPU上运行,只需要一两行修改。基本上,你必须为每个计算平台编写一个单独的代码。非常感谢Eric的指导,请你再帮我一点,我能做些什么来制作这样的功能,它可以在GPU和Xeon phi上运行??我应该分享我现在使用的程序吗?@PragyaSharma你可以从推力排序开始。它的网站上有示例代码。非常感谢Eric,我检查了有关推力排序的信息。我将尝试在我的程序中添加此库和函数,看起来它将解决我的问题…:):)
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);
         }
     }
}