__global__函数中的动态内存分配

时间:2011-09-16 20:27:02

标签: cuda malloc

我有一张CC 1.1卡,我的程序需要我在全局设备功能中动态分配数组。

将为每个执行的线程创建这些数组。

malloc引发了一个错误,网上冲浪告诉我,对于低于2.0的CC,使用malloc是非法的。

我想问一下有没有解决办法呢?

由于

2 个答案:

答案 0 :(得分:1)

对于CC1.1设备,唯一的解决方法是从cudaMalloc的主机分配足够的全局内存,然后在线程之间进行划分。

在大多数情况下,只是从主机预先分配内存工作得很好,我从来没有遇到过一个 使用内核malloc的任务(尽管有时这样的想法似乎很好,很快就发现, 不会破坏与旧设备的兼容性。我也怀疑它的性能,但我从未运行任何基准测试。)

答案 1 :(得分:1)

我建议您使用固定大小的内存:

__global__ my_kernel(...) {

__shared__ float memory[BLOCK_SIZE];

};

很少需要在GPU上进行动态分配,并且很可能会引入一些性能瓶颈。特别是具有计算能力1.1,您需要调整对齐 共享内存的性能最佳,避免内部内存争用。