如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?

Posted FILWY_M

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?相关的知识,希望对你有一定的参考价值。

如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?

了解这个问题首先要理解指针,可以参考这两个博客,这两个博客对于指针的简介很直观。

指针游戏1 最简单的指针游戏_Dezeming的博客-CSDN博客_游戏指针

指针游戏2 传递地址的指针_Dezeming的博客-CSDN博客_指针游戏2

int *dev_c;

cudaMalloc()的第一个参数是一个指针,指向用于保存新分配内存地址的变量。也就是cudaMalloc分配了一块内存,这块内存的位置假设为add,我们想让dev_c获取这个地址,即dev_c=add

如果我们直接使用

cudaMalloc( (void*)dev_c, sizeof(int) );

指针游戏2博客可知,在函数中,会创建形参而代替实参,也就是在 cuda_Malloc函数中,会创建一个指针(形参)这里假设为p,最终将新分配内存的地址add会给p,而不是给了dev_c,显然这不是我们想要的,那么如何让新分配内存的地址给了dev_c,所以需要使用两个星星,也就是双重指针

cudaMalloc( (void**)&dev_c, sizeof(int) );

此时函数中同样会创建一个指针(形参),同样假设为p,此时有p= &dev_c,那么*p=dev_c,此时在函数中将将新分配内存的地址add*p,那么此时就有*p=dev_c=add,这样就达到了我们的目的,关系如下图所示。

以上是关于如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解Cuda中的cudaMalloc函数的第一个参数是两个星星?

如何理解CUDA中的cudaMalloc()的参数

CUDA C

cudaMalloc 在哪个内存空间分配内存?

我应该如何以及何时将倾斜指针与 cuda API 一起使用?

从版本 285 开始,nvidia 驱动程序中 cudaMalloc 的灾难性减速