我目前有一个要移植到 CUDA 的 C++ 代码。cpp 代码使用向量进行数据存储。我对 CUDA 相当陌生,我知道向量不能直接与 CUDA 一起使用。
要存储的元素数量基于某些计算的结果(基本上是阈值检查。存储大于阈值的样本)。我了解在内核中使用 malloc 进行动态内存分配非常慢。所以一种选择是固定元素的最大数量,为它们分配内存并重写数组的代码来代替向量。这里的缺点是浪费内存,因为我存储了 0 到 100 个元素之间的任何地方,当然我必须做很多重写。
推力库在设备上提供向量,但从我在网站上阅读的内容来看,人们似乎回避推力。如果我包含thrust/device_vector.h 和thrust/host_vector.h 并保持向量不变,这是一个合理的解决方案吗?使用推力有什么缺点?
一些背景信息:此代码是管道的一部分,其先前阶段在 GPU 中执行。将此代码移植到 GPU 的原因是让管道实时运行(希望如此)。并行化是在更高级别上完成的,我将把整个 cpp 代码作为一个内核,它将运行大约 800 个线程(每个线程代表一个分散度量或 DM)。到目前为止,每个 DM 都是通过每次调用 C++ 代码顺序完成的。