例如,cudaMalloc((void**)&device_array, num_bytes);
这个问题已经被asked之前,回复是“因为cudaMalloc
返回错误代码”,但我不明白 - 双指针与返回错误代码有什么关系?为什么简单的指针不能完成这项工作?
如果我写
cudaError_t catch_status;
catch_status = cudaMalloc((void**)&device_array, num_bytes);
错误代码将被放入catch_status
,并且返回一个指向分配的 GPU 内存的简单指针应该就足够了,不是吗?
在 C 中,数据可以按值或通过模拟按引用传递(即通过指向数据的指针)。按值是一种单向方法,按指针允许函数及其调用环境之间的双向数据流。
当一个数据项通过函数参数列表传递给函数时,并且函数期望修改原始数据项,以便修改后的值显示在调用环境中,正确的 C 方法是传递数据项通过指针。在 C 中,当我们传递指针时,我们获取要修改的项的地址,创建一个指针(在本例中可能是指向指针的指针)并将该地址传递给函数。这允许函数在调用环境中修改原始项(通过指针)。
通常情况下malloc
返回一个指针,我们可以在调用环境中使用赋值将这个返回值赋给所需的指针。如果是cudaMalloc
,CUDA 设计者选择使用返回值而不是指针来携带错误状态。因此,调用环境中指针的设置必须通过传递给函数的参数之一通过引用(即通过指针)进行。既然它是一个指针值我们想要设置,我们必须获取指针的地址(创建一个指向指针的指针)并将该地址传递给cudaMalloc
功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)