关于cudaMalloc内存分配以及二重指针

对于一个初学者,开始学习cuda内存机制的时候会存在一些疑问。最大的疑问莫过于,为什么函数中的第一个参数是void** devptr,也就是一个二级指针呢?笔者参考了网上一些作答,虽然思路还不错,但是毕竟没有抓住要害。
CUDA 中的 cudaMalloc使用二重指针(void**)的一些理解
如何理解CUDA中的cudaMalloc()的参数
实际上,这个问题不能简单的从CPU的内存来分析,而是要分析一下显存中的内存分配。
主要测试代码如下

unsigned int* gpu_block_x;
cudaMalloc((void**)&gpu_block_x, arraySizeInBytes);
printf("The address of gpu_block_x's pointer: %p\n", &gpu_block_x); //打印二级指针的地址
printf("The address of gpu_block_x: %p\n", gpu_block_x);    //打印gpu中的地址

在刚开始,unsigned int* gpu_block_x 这个指针是个空指针,没有指向任何地址。当然,为了在GPU中做数据处理,我们希望这个指针地址储存在显存中。北桥消失以后,GPU和CPU之间通过PCI-E相连。但是二者储存的地址不同。由于指令在CPU中处理࿰

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值