CUDA学习——Chapter 2(1)GPU内存(global memory)的讨论

本文详细介绍了CUDA编程中的GPU内存管理,包括主机代码与设备代码的区别、内存复制步骤以及CUDA内存分配函数cudaMalloc的使用。同时,讲解了GPU内存空间的组织结构,如网格、块和线程的维度概念,并通过实例展示了如何声明和理解网格与块配置。
摘要由CSDN通过智能技术生成

第二章

代码分为两类,一类叫作主机代码(host code),而一类叫做设备代码(device code)。前者在CPU上运行,后者在GPU上运行。访问的内存也是不一样的。本书代码主机内存中的变量名以h_为前缀,设备内存的变量名以d_为前缀。

从CUDA 6.0开始,可以使用一个指针访问CPU或GPU内存,不用担心无法寻址而崩溃的事情。

在核函数执行的时候,控制权马上交回给CPU。也就是说CPU和GPU是并行运行的,两者是异步的。如果主机代码需要GPU计算完成后返回的结果,则须使用cudaDeviceSychronize()函数来使得主机代码等待GPU完成。

主机内存和设备内存之间的数据是不互通的,因此执行核函数需要进行以下几个步骤:
(1)使用cudaMemcpy来将主机内存的数据拷贝进设备内存(前提是已经使用cudaMalloc来为设备变量开辟内存空间)),第四个参数为:cudaMemcpyHostToDevice
(2)调用核函数进行计算。
(3)使用cudaMemcpy将设备内存的数据拷贝回主机内存,第四个参数为:cudaMemcpyDeviceToHost

cudaMalloc的使用方法:
cudaMalloc的原型为:
cudaError_t cudaMalloc(void ** devPtr, size_t size);

返回值有两种可能:cudaSuccesscudaErrorMemoryAl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值