C 并行合并排序工作在笔记本电脑上,但不在GPU和Xeon phi上 void pmergesort(int a[],int l,int r) { if(l
我的教授告诉我在第一次递归调用之前使用#pragma omp single,以便使程序更快。它在我的笔记本电脑上运行得非常快,但在GPU和Xeon phi上排序不正确,因为这些机器有更多的并行线程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上
请让我知道我能做些什么使它更快,在所有机器上正常工作。并行排序是非常基本的算法。几乎每个并行计算平台都有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);
}
}
}