【发布时间】:2017-02-16 18:23:54
【问题描述】:
我需要在 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。
另一个可能的选择是将这些值写入共享内存,然后将它们复制到全局内存。我想知道我的第一个解决方案是否应该有效且有效,或者我是否必须执行后者。
【问题讨论】:
标签: cuda compression run-length-encoding