CUDA编程系统性学习笔记(一):存储,函数与线程概念

持续关注我的朋友可能知道,之前因为做一个点云配准的项目,重新又开始学习CUDA编程。以我浅薄的并行编程技术,对于一些对存储要求不是很高的小程序,还勉强能够应付。但是最近做的一个网格优化的并行项目,数据量大,动态存储要求高,对存储空间数据的更新频率频繁,自然对并行编程的存储使用有了更高的要求。因此,为了能够更进一步的提升并行编程技术,解决存储使用的一些问题,我最近学习了英伟达周斌老师的视频教程,计划做一个系统性的Cuda学习与提升。我计划做一个系列的博客,来分享一些我在并行编程中存储使用的一些心得体会,作为备忘,同时分享给大家。

1. 存储与函数的类别

Register;Shared Memory block内部数据共享;Local Memory;Global Memory;Constant Memory;Texture Memory;Instruction Memory (不可见);

线程私有的存储:Local memory

Block私有的存储:Shared Memory

整个设备共有的:Global Memory

函数命名对应的执行单元(Device: GPU Cuda;Host: CPU)

__device__ float filter[N] 显存定义变量   

__global__ void DeviceFunc()  执行位置 device (GPU)   调用位置 device

__global__ void KenerFunc()  执行位置 device (GPU) 调用位置host

一些注意事项:

 

一些数据类型的定义:

示例:

  一些数学函数

内建函数,牺牲精度,提升速度, 使用双下划线 :

 通过ID计算线程单元

2. 线程层次 

Grid:block组,一维或多维线程块

Block:一组线程Thread

 线程层次编号:

 示例:使用二维线程编号调用CUDA计算单元 

多块索引:

 

线程同步:(这里是块内同步,如果全局同步,开销过大)

线程调度:

SM->Block; SP->Thread

Wrap 块内的一组线程,作为调度折中。

3. 内存数据传输

对于device和host两个执行方式,其对应内存使用的权限。

 

CPU与GPU的数据交互:

到这里,我们把和GPU并行编程有关的基础概念做了介绍。基于这些概念,我们将在下一篇博客中进一步的学习如何实现高效的Cuda编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿老甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值