c++ - CUDA 真的没有类似 calloc() 的 API 调用吗?

标签 c++ c cuda calloc memset

从查看 CUDA 5.5 API ReferenceCUDA 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/

相关文章:

c++ - 监听UDP和监控

c++ - 基于时间的通知使用的是 UTC 时间还是本地时间?

r - R 中线性代数的 MAGMA 和 Rcpp

c++ - GPU 计算 (CUDA) tex2d/tex3d - 如何处理各向异性像素/体素

c++ - 何时使用递归互斥锁?

c++ - winsock2 无法绑定(bind)套接字

c - 我不明白为什么在转换中使用指针

cuda - pgi cuda fortran编译错误

c++ - 将负角度转换为正角度 : Involves invalid operand use

C - 打印素数列表(递归)