我将使用CUDA在GPU上实现一种创建3D模型的方法 . 几年前我做过这个,但是我觉得CUDA从那时起就已经发展了,所以我试着对如何最好地做我将要做的事情进行一些投入 .
在我的C版本中,我有一个Voxels矢量,其中Voxel是一个包含浮点数的结构 . 该矢量应该代表整个网格,我将独立地在每个体素上进行计算 .
早些时候,我不得不使用指针和cudaMalloc等,以便能够访问设备上的体素 . 我在考虑是否有一些我可以使用的新功能 .
有没有像你可以在实际内核上使用的矢量?推力不合适,因为它应该从主机调用 .
更有趣的是,是否有可能在设备上进行动态内存分配,以便我可以在GPU上实现像八叉树这样的东西?
这将允许更大规模的重建 .
任何想法都表示赞赏!
编辑:
似乎必须坚持使用指针和cudaMalloc的经典c风格编码,但动态内存分配是可能的 .
说我有这个结构:
struct Data {
float *p;
}
我从一个数组开始
Data data[10];
然后我想稍后在 data[2]
中分配一个包含30个浮点数的数组,你会做类似的事情
data[2].p = (float*)malloc(30*sizeof(float));
Cuda上的代码怎么样?
1 回答
不是,不是 .
是的,多年来计算能力> = 2.0设备支持设备代码中的动态内存分配 . 请注意,设备堆内存分配不是特别快,因此除非您拥有可以重复使用任何分配的代码,否则将会降低性能 . 另请注意,您当前无法从主机API访问设备堆,因此如果需要将数据传输回主机,则需要在传输内核中执行一些额外的工作,以将数据从堆移动到全局内存或主机零拷贝/托管缓冲区 .