gpt4 book ai didi

c - 如何在内核中动态分配数组?

转载 作者:太空狗 更新时间:2023-10-29 16:27:31 25 4
gpt4 key购买 nike

我需要在内核函数中动态分配一些数组。我该怎么做?

我的代码是这样的:

__global__ func(float *grid_d,int n, int nn){  
int i,j;
float x[n],y[nn];
//Do some really cool and heavy computations here that takes hours.
}

但这行不通。如果这是在主机代码中,我可以使用 malloc。 cudaMalloc 在主机上需要一个指针,在设备上需要一个指针。在内核函数中,我没有主机指针。

那么,我该怎么办呢?

如果分配所有数组的时间太长(几秒钟)(我需要大约 4 个大小为 n 和 5 个大小为 nn),这将不是问题。因为内核可能至少会运行 20 分钟。

最佳答案

动态内存分配仅在计算能力 2.x 和更新的硬件上受支持。您可以在内核中使用 C++ new 关键字或 malloc,因此您的示例可以变成:

__global__ func(float *grid_d,int n, int nn){  
int i,j;
float *x = new float[n], *y = new float[nn];
}

这会在具有上下文生命周期的本地内存运行时堆上分配内存,因此如果您不想再次使用内存,请确保在内核完成运行后释放内存。您还应该注意,无法直接从主机 API 访问运行时堆内存,因此您不能将在内核内部分配的指针作为参数传递给 cudaMemcpy,例如。

关于c - 如何在内核中动态分配数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480213/

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