提问者:小点点

以升序合并CUDA中的两个升序数组


我有两个浮点阵列

a = {1, 0, 0, 22, 89, 100};
b = {2, 3, 5, 0,  77,  98};

两者都是单调递增的;两者长度相同;两者内部可能/可能没有0。我试图得到的是一个新的数组,按升序梳理两个数组,但没有0:

c = {1, 2, 3, 5, 22, 77, 89, 98, 100 };

我不知道如何写CUDA代码,除非我做一个串行循环,这是我试图避免的。有什么建议吗?谢谢。


共1个答案

匿名用户

正如Robert指出的,推力为您的需求提供了基本的构建块。

合并铜

#include <iostream>
#include <thrust/remove.h>
#include <thrust/merge.h>
int main()
{
   float a[6] = {1, 0, 0, 22, 89, 100};
   float b[6] = {2, 3, 5, 0,  77,  98};
   float c[12];
   thrust::merge(a,a+6,b,b+6,c);
   float* newEnd = thrust::remove(c,c+12,0);
   thrust::copy(c,newEnd, std::ostream_iterator<float>(std::cout, " "));
}

编译并运行:

nvcc-arch sm_20合并。铜

输出:

12352778998100