CUDA 有没有办法在设备端函数中动态分配内存?我找不到任何这样做的例子。
从 CUDA C 编程手册:
B.15 动态全局内存分配
void* malloc(size_t size); void free(void* ptr);
从全局内存中的固定大小的堆中动态分配和释放内存。
CUDA 内核
malloc()
函数从设备堆中分配至少 size 个字节,并返回一个指向已分配内存的指针,如果没有足够的内存来满足请求,则返回 NULL。返回的指针保证与 16 字节边界对齐。CUDA 内核
free()
函数释放 指向的内存ptr
,该内存必须由先前的调用返回malloc()
。如果ptr
是NULL
,则忽略对 free() 的调用。使用相同的 ptr 重复调用 free() 具有未定义的行为。给定 CUDA 线程通过分配的内存
malloc()
在 CUDA 上下文的生命周期内保持分配,或者直到它通过调用显式释放free()
。它可以被任何其他 CUDA 线程使用,即使在随后的内核启动时也是如此。任何 CUDA 线程都可以释放由另一个线程分配的内存,但应注意确保不会多次释放同一指针。