我在CUDA中运行算法,该算法将三角形列表作为输入,然后尝试在网格上对它们进行体素化,输出应该是三角形触摸的网格单元列表。当然,此列表的大小会根据输入三角形而有所不同。我知道列表大小的上限(gridsize x gridsize x gridsize)。
问题是,分配一个包含所有可能网格单元格的大表,并在该表中标记真/假是麻烦的并且占用大量内存。此外,CUDA原子操作仅适用于32/64位值,这对于简单的布尔标志来说是过度的。
在主机上,我会将标记为已填充的网格单元格添加到矢量中,然后对矢量进行排序并删除重复项。
CUDA是否存在用于存储可变大小列表的方法/算法?
答案 0 :(得分:2)
您可以使用与顺序版本相同的方法,只使用基元的并行实现(排序,唯一)。
最简单的入门方法是使用Thrust查看,weld vertices example应该让您开始使用语法,大纲如下所示:
thrust::transform
算法将三角形列表转换为网格单元格列表thrust::sort
算法的比较运算符对网格单元格列表进行排序thrust::unique
删除重复项