我需要在 CUDA 中解码 RLE,并且我一直在尝试考虑将 RLE 扩展为包含我所有值的列表的最有效方法。所以假设我的值是 2、3、4,我的运行是 3、3、1,我想将其扩展到 2、2、2、3、3、3、4。
起初我以为我可以使用cudaMemset
,但现在我很确定启动内核并且我拥有 CUDA Compute Capability 3.0 所以即使为每个值/运行对启动新内核可能不是低效的,我也没有可用的动态并行性去做这个。
所以我想知道这个解决方案在我去实施它之前是否合理,因为如果你不聪明的话,有很多事情最终无法在 CUDA 上运行良好。cudaMalloc
制作一个将cudaMemCpy调用到目的地的内核是否合理?我可以很容易地计算前缀总和,以知道将内存复制到哪里和从哪里复制,并使我所有的阅读至少合并。我担心的是打电话cudaMalloc
等等cudaMemCpy
很多次。
另一种可能的选择是将这些值写入共享内存,然后将它们复制到全局内存。我想知道我的第一个解决方案是否应该有效并且有效,或者我是否必须执行后者。