CUDA真的没有calloc() - 就像API调用一样吗?

ein*_*ica 4 c c++ cuda memset calloc

从查看CUDA 5.5 API参考CUDA C编程指南看来,似乎没有cudaCalloc(),与GPU相当的标准C库calloc().

  • 是否真的没有用于分配初始化为全零的缓冲区的API功能?
  • 是否有更好的东西我可以比打电话给我们cudaMalloc(),然后cudaMemset()

Rob*_*lla 8

是否真的没有用于分配初始化为全零的缓冲区的API功能?

确实没有.

有什么更好的我可以做cudaMalloc()后面跟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)
Run Code Online (Sandbox Code Playgroud)

上面的宏将使用我通常做的错误检查(基于使用cudaGetLastError();或者如果你愿意,你可以直接建立你的首选错误检查宏.请参阅有关错误处理的这个问题.