为什么我们必须将指针传递给指向cudaMalloc的指针

Hai*_*ang 3 cuda

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

float *M;
cudaMalloc((void**)&M,size);
Run Code Online (Sandbox Code Playgroud)

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

float *M;
cudaMalloc((void*)M,size);
Run Code Online (Sandbox Code Playgroud)

感谢任何简单的描述!

Mar*_*mes 6

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

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

  • Martin James:不像malloc那样返回指针的原因是因为所有cuda运行时函数都需要返回错误状态.为了符合这一点,指针被视为第一个参数. (3认同)