在CUDA中按升序合并两个升序数组

时间:2015-03-24 17:50:51

标签: arrays sorting 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代码编写,除非我做一个串行for循环,我试图避免。有什么建议?感谢。

1 个答案:

答案 0 :(得分:1)

罗伯特指出,推力为你的需求提供了基本的构建模块。

<强> merge.cu

#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 merge.cu && ./a.out

输出:

1 2 3 5 22 77 89 98 100