- cudaError_t cudaMalloc (void **devPtr, size_t size );
此函数返回值是 CUDA 中定义的一个错误代码。
主要是第一个参数。为什么是两个星星呢?用个例子来说明下。
- float *device_data=NULL;
- size_t size = 1024*sizeof(float);
- cudaMalloc((void**)&device_data, size);
上面这个例子中我在显存中申请了一个包含 1024 个单精度浮点数的一维数组。而 device_data 这个指针是存储在主存上的。之所以取 device_data 的地址,是为了将 cudaMalloc 在显存上获得的数组首地址赋值给 device_data。在函数中为形参赋值是不会在实参中发生变化的,但是指针传递的是地址,我们操作了某个地址的数据,实际上是真的改变了指定地址的数据。像这个申请显存的函数,第一个参数传递的是 device_data 这个指针的地址,然后改变这个地址的内容就会带给实参真正的改变。