CUDA使用较大数组的内容填充小数组

时间:2015-01-09 19:35:05

标签: c arrays cuda reduce

我对CUDA编程很新,所以如果这是一个愚蠢的问题,请原谅我。

在CUDA中,我正在尝试使用大型设备阵列A(约2000万int个元素)的内容填充小型设备阵列B(~20000 int个元素)。 A主要包含零,但有大约20000个非零元素,位于数组中的随机和未知位置。我想使用CUDA向B填充A的非零内容。 B中元素的顺序并不重要。

我查看了SDK,我找到了一些“减少”策略,例如,对数组进行并行求和,但是这些方法中的每一种都将数组减少为标量,而我试图“减少” “一个较小阵列的数组。在线搜索也没有产生任何结果。我不是在寻找完整的代码,而是一些如何实现这一点的想法/链接。我正在使用C,如果可能的话,我想在不使用任何C ++类或结构的情况下执行此操作。

提前感谢您的协助。

1 个答案:

答案 0 :(得分:2)

您所描述的内容有时会出现名称 stream compaction

Thrust(例如copy_if)和

cub(例如DeviceSelect)提供应该具有相对良好表现的选项。

如果您确实希望自己实现它,则流压缩可以使用一系列较低级别的并行操作,一个键是前缀和。您可以在GPU Gems中了解简单并行前缀和(以及流压缩)的构建。我只是为了提供信息而添加它;我不是建议你自己实现流压缩或前缀和。