CUDA:矢量列表实现

时间:2014-05-20 13:35:36

标签: c++ algorithm list vector cuda

我在CUDA中运行算法,该算法将三角形列表作为输入,然后尝试在网格上对它们进行体素化,输出应该是三角形触摸的网格单元列表。当然,此列表的大小会根据输入三角形而有所不同。我知道列表大小的上限(gridsize x gridsize x gridsize)。

问题是,分配一个包含所有可能网格单元格的大表,并在该表中标记真/假是麻烦的并且占用大量内存。此外,CUDA原子操作仅适用于32/64位值,这对于简单的布尔标志来说是过度的。

在主机上,我会将标记为已填充的网格单元格添加到矢量中,然后对矢量进行排序并删除重复项。

CUDA是否存在用于存储可变大小列表的方法/算法?

1 个答案:

答案 0 :(得分:2)

您可以使用与顺序版本相同的方法,只使用基元的并行实现(排序,唯一)。

最简单的入门方法是使用Thrust查看,weld vertices example应该让您开始使用语法,大纲如下所示:

  1. 使用thrust::transform算法将三角形列表转换为网格单元格列表
  2. 定义比较运算符以定义网格单元格的排序
  3. 使用带有thrust::sort算法的比较运算符对网格单元格列表进行排序
  4. 使用thrust::unique删除重复项