我有两个浮点数组
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循环,我试图避免。有什么建议?感谢。
答案 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