以下代码广泛用于GPU全局内存分配:

float *M;
cudaMalloc((void**)&M,size);


我想知道为什么我们必须将一个指针传递给一个指向cudaMalloc的指针,以及为什么它的设计不像这样:

float *M;
cudaMalloc((void*)M,size);


感谢您的简要说明!

最佳答案

cudaMalloc需要将指针的值写入M(不是*M),因此M必须通过引用传递。

另一种方法是以经典的malloc方式返回指针。但是,与malloc不同,cudaMalloc返回错误状态,就像所有CUDA运行时函数一样。

08-26 16:09