繁体   English   中英

在内核上工作的CUDA上的向量

[英]Vector on CUDA working on the Kernel

我将使用CUDA在GPU上实现创建3D模型的方法。 我几年前就这样做了,但是我猜想CUDA从那以后就发展了,所以我尝试就如何最好地做我的工作获得一些建议。

在我的C ++版本中,我有一个Voxel向量,其中Voxel是一个包含浮点数的结构。 该矢量应该代表整个网格,在这里我将独立地对每个体素进行计算。

之前,我必须使用指针和cudaMalloc等,以便能够访问设备上的体素。 我正在考虑是否可以使用一些新功能。

您可以在实际内核上使用类似vector之类的东西吗? 推力不适合,因为应该从主机调用它。

更有趣的是,是否有可能在设备上进行动态内存分配,以便在GPU上实现八叉树之类的东西?

这将允许更大规模的重建。

任何想法表示赞赏!

编辑:

似乎必须坚持使用指针和cudaMalloc进行经典的c样式编码,但是可以进行动态内存分配。

说我有这个结构:

struct Data {
     float *p;
 }

我从数组开始

Data data[10];

然后我想稍后在data[2]分配一个由30个浮点数组成的数组,您将执行以下操作

data[2].p = (float*)malloc(30*sizeof(float));

代码在Cuda上看起来如何?

  1. 您可以在实际内核上使用类似vector之类的东西吗?

    不是,不是

  2. 是否可以在设备上进行动态内存分配,以便在GPU上实现八叉树之类的功能?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM