2015-01-09 85 views
0

我对CUDA编程相当陌生,所以请原谅我,如果这是一个愚蠢的问题。CUDA使用较大阵列的内容填充小阵列

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

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

非常感谢您的帮助。

回答

2

什么你有时描述由名字流压实

Thrust(例如copy_if)和

cub(例如DeviceSelect)提供的选项,应该有比较好的表现去。

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

+0

感谢您的帮助!这正是我所期待的:未来谷歌搜索的一些条款,以及一些让我开始的链接。 – user1004061 2015-01-09 20:28:05