我是CUDA的新手,正在尝试编写自己的内核。
在CPU方面,我有一系列包含整数的向量(一个向量/ GPU线程)。
我希望每个GPU线程都从其向量中删除一些元素,然后我将其复制回主机。在CPU方面,可比较的操作是:
vector.erase(element_number);
我的理解是GPU上不支持stl类型向量,我实际上不能使用Thrust(因为我使用自己的内核)。
但是,我可以将CPU矢量转换为数组(包括元素数量的数据),然后将数组复制到GPU。然后,如果我确定了要删除的元素,我可以将所有元素向下移动并减少元素的总数。
在我重新创建轮子并写下之前,我的问题是:是否有一些CUDA支持的操作已经这样做了?
答案 0 :(得分:1)
不是真的。您必须按照描述的方式编写自己的矢量类。
如果您不关心向量中元素的顺序,可以通过使用向量中的最后一个元素交换要擦除的元素,然后递减大小来实现擦除操作,而不是移动一切。