【问题标题】:Merging two ascending arrays in CUDA with ascending order以升序合并CUDA中的两个升序数组
【发布时间】:2015-05-28 04:10:20
【问题描述】:

我有两个浮点数组

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 循环,这是我试图避免的。有什么建议?谢谢。

【问题讨论】:

  • thrust 可以做到这一点

标签: arrays sorting cuda


【解决方案1】:

正如 Robert 所指出的,thrust 提供了满足您需求的基本构建块。

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 &amp;&amp; ./a.out

输出:

1 2 3 5 22 77 89 98 100

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2022-01-13
    • 2013-11-12
    • 2020-08-01
    • 2019-11-18
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多