首页 文章

在CUDA的传染媒介研究核心

提问于
浏览
1

我将使用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
    • 你可以在实际内核上使用像vector这样的东西吗?

    不是,不是 .

    • 是否可以在设备上进行动态内存分配,这样我就可以在GPU上实现像八叉树这样的东西?

    是的,多年来计算能力> = 2.0设备支持设备代码中的动态内存分配 . 请注意,设备堆内存分配不是特别快,因此除非您拥有可以重复使用任何分配的代码,否则将会降低性能 . 另请注意,您当前无法从主机API访问设备堆,因此如果需要将数据传输回主机,则需要在传输内核中执行一些额外的工作,以将数据从堆移动到全局内存或主机零拷贝/托管缓冲区 .

相关问题