gpt4 book ai didi

c++ - 在内核上工作的 CUDA 上的 vector

转载 作者:行者123 更新时间:2023-11-30 03:50:02 27 4
gpt4 key购买 nike

我将实现一种使用 CUDA 在 GPU 上创建 3D 模型的方法。我几年前就这样做了,但我想 CUDA 从那时起就已经发展起来了,所以我试着就如何最好地做我要做的事情征集一些意见。

在我的 C++ 版本中,我有一个 Voxel vector ,其中 Voxel 是一个包含 float 的结构。该 vector 应该表示整个网格,我将在其中独立地对每个体素进行计算。

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

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

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

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

欢迎任何想法!

编辑:

似乎必须坚持使用指针和 cudaMalloc 的经典 C 风格编码,但动态内存分配是可能的。

假设我有这个结构:

struct Data {
float *p;
}

我从一个数组开始

Data data[10];

然后我想稍后在 data[2] 中分配一个包含 30 个 float 的数组,你会做类似的事情

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

代码在 Cuda 上会是什么样子?

最佳答案

  1. Is there something like vector you can use on the actual kernel?

    不是真的,不是。

  2. is it possible to do dynamic memory allocation on the device, so that I could implement something like octrees on the GPU?

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

关于c++ - 在内核上工作的 CUDA 上的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32050271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com