我有一张CC 1.1卡,我的程序需要我在全局或设备功能中动态分配数组。
将为每个执行的线程创建这些数组。
malloc引发了一个错误,网上冲浪告诉我,对于低于2.0的CC,使用malloc是非法的。
我想问一下有没有解决办法呢?
由于
答案 0 :(得分:1)
对于CC1.1设备,唯一的解决方法是从cudaMalloc
的主机分配足够的全局内存,然后在线程之间进行划分。
在大多数情况下,只是从主机预先分配内存工作得很好,我从来没有遇到过一个 使用内核malloc
的任务(尽管有时这样的想法似乎很好,很快就发现, 不会破坏与旧设备的兼容性。我也怀疑它的性能,但我从未运行任何基准测试。)
答案 1 :(得分:1)
我建议您使用固定大小的内存:
__global__ my_kernel(...) {
__shared__ float memory[BLOCK_SIZE];
};
很少需要在GPU上进行动态分配,并且很可能会引入一些性能瓶颈。特别是具有计算能力1.1,您需要调整对齐 共享内存的性能最佳,避免内部内存争用。