【发布时间】:2014-01-20 12:10:51
【问题描述】:
从CUDA 5.5 API Reference 和CUDA C Programming Guide 看来,似乎没有cudaCalloc(),在GPU 上相当于标准C 库的calloc()。
- 真的没有用于分配初始化为全零的缓冲区的 API 功能吗?
- 有什么比拨打
cudaMalloc()然后cudaMemset()更好的办法吗?
【问题讨论】:
-
编译器库可能将 calloc 实现为 malloc + memset 的包装器。
-
@Lundin:我会说可能不会。您可以分配归零的内存块而无需实际设置任何数据,只需将块标记为空(例如,未从虚拟内存映射到物理内存,写入它们会导致页面错误)。当然,这取决于您使用的是什么机器。我不确定 GPU 上的内存归零是如何发生的,但很可能你可以做得比 malloc+memset 更好。
-
使用
thrust::device_vector。 -
@JaredHoberock:你能回答这个问题并解释为什么在这种情况下使用
thrust::device_vector是一个好主意吗? -
下面的答案有没有让你满意的?如果是,请接受。你有扔石头藏手的坏习惯。