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