从查看 CUDA 5.5 API Reference和 CUDA C Programming Guide似乎没有 cudaCalloc()
,它是标准 C 库的 calloc()
的 GPU 等效项.
- 是否真的没有用于分配初始化为全零的缓冲区的 API 功能?
- 有什么比调用
cudaMalloc()
然后调用cudaMemset()
更好的方法吗?
最佳答案
Is there really no API functionality for allocating a buffer initialized to all-zeros?
确实没有。
Is there something better I can do that cudaMalloc() followed by cudaMemset()?
如果方便的话,您可以使用宏(如果第一个问题的答案是否定的,您还没有告诉我们什么是更好):
#define cudaCalloc(A, B, C) \
do { \
cudaError_t __cudaCalloc_err = cudaMalloc(A, B*C); \
if (__cudaCalloc_err == cudaSuccess) cudaMemset(*A, 0, B*C); \
} while (0)
上面的宏将使用我通常做的那种错误检查(基于使用 cudaGetLastError()
;或者如果你愿意,你可以直接在宏中构建你喜欢的错误检查. 有关错误处理,请参阅 this question。
关于c++ - CUDA 真的没有类似 calloc() 的 API 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233762/