cuda by example【读书笔记1】
cuda
1. 以前用OpenGL和DirectX API简介操作GPU,必须了解图形学的知识,直接操作GPU要考虑并发,原子操作等等,cuda架构为此专门设计。满足浮点运算,用裁剪后的指令集执行通用计算,不是仅限于执行图形计算,不仅可以任意读写内存,还可以访问共享内存。提供了许多功能加速计算,设计了CUDA C语言编写通用计算
2. 在GPU上执行的函数通常称为核函数 __global__修饰符告诉编译器,函数应该编译到GPU上而不是主机 cuda编译器将负责实现从主机代码中调用GPU代码
3. kernel<<1,1>>( ); 尖括号里面的参数不是传递给设备代码的参数(参数1是设备在执行核函数时使用的并行线程块数量,参数2是并行线程数量),而是告诉运行时如何启动设备代码。传递给设备代码的参数是放在圆括号里的。会根据尖括号的内容在多处理器上启动多个核函数副本。
4. CUDA C的强大之处是淡化了主机代码和设备代码之间的差异 一定不能在主机代码里对cudaMalloc( )返回的指针进行解引用,主机代码可以把它作为参数传递,算术运算,甚至转换为不同的类型,但绝对不可以使用这个指针来读取或写入内存。要用cudaFree( )释放。主机指针只能访问主机内存,设备指针只能访问设备内存。
5. cudaMemcpy( )的最后一个参数是cudaMemcpyDeviceToHost表示设备指针到主机指针copy
6. 并行线程块的集合称为线程格(Grid), 并行线程(Thread)的集合称为线程块(Block)。线程块的最大数量不能超过65535,线程数量不能超过512,可以综合利用线程块和线程数量计算。
7. CUDA C的程序中可以使用全局内存和共享内存: __shared__表示GPU上的共享内存单元,作用是实现线程间的通信。调用核函数时,每一个线程块会运行一个核函数的副本,同时编译器也会为每一个线程块产生一个共享内存单元的私有副本,供该线程块内所有线程使用。所以内存存储单元只用线程数索引就行。
8. 在GPU上对任意矢量求和,为了突破上述的硬件上限,我们将并行的线程数量看成是处理器的数量。尽管GPU处理单元的数量可能小于或大于这个值。我们认为每个线程在逻辑上都可以并行执行,硬件可以调度它们以便实际执行。要注意线程索引和线程递增量的写法。这里线程递增的是总的线程数。相当于对程序的工作量进行了总线程数规模的划分。
__shared__ float cache[threadsPerBlock];
int tid = threadIdx.x + blockIdx.x * blockDim.x; // 线程索引
int cacheIndex = threadIdx.x; // 共享内存的线程索引 float temp = ;
while (tid < N) { // N维向量
temp += a[tid] * b[tid];
tid += blockDim.x * gridDim.x; // 每次递增 block数*线程数
} // set the cache values
cache[cacheIndex] = temp;
9. __syncthreads( ) 的用法是同步,等待所有线程完成这句指令在进行下面的语句。这里要注意不能随便把它放到if条件语句中,因为有线程中有if语句称为线程发散,除非线程块中每个线程都执行了__syncthreads( ) 否则没有任何线程能执行__syncthreads( ) 之后的指令。 一般在写入共享内存和读取共享内存之间添加同步点
10. 用常量内存来替换全局内存可以有效的减少内存带宽
cuda by example【读书笔记1】的更多相关文章
- 远程办公《Remote》读书笔记:中国程序员在家上班月入过六万不是梦
这不是一本新书,这是一本很值得中国程序员看的老书,所以我不是来做卖新书广告的:) 但它的确是一本好书,这本书在Amazon上3个business categories排第一.作者Jason Fried ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
- LOMA280保险原理读书笔记
LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...
- 《3D Math Primer for Graphics and Game Development》读书笔记2
<3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...
- 《3D Math Primer for Graphics and Game Development》读书笔记1
<3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...
随机推荐
- VC使一个对话框不显示
//add this void CbkDlg::OnNcPaint() { ShowWindow(SW_HIDE); CDialog::OnNcPaint(); } 初始化时 ...
- SharePoint 2016 vs部署报错:无法加载功能xxx未能加载文件或程序集xxx或它的某一个依赖项。系统找不到指定的文件
环境描述: SharePoint 2016 单服务器场模式 开发工具:VS2017,项目类型(功能):计时器. 问题描述: 在用vs直接部署时,报错如下: 部署步骤"激活功能"中出 ...
- MATLAB GUI对话框设计
原文地址:http://blog.csdn.net/shuziluoji1988/article/details/8532982 1.公共对话框: 公共对话框是利用windows资源的对话框,包括文件 ...
- dig常用命令
Dig是域信息搜索器的简称(Domain Information Groper),使用dig命令可以执行查询域名相关的任务. ###1. 理解dig的输出结果 $ dig chenrongrong.i ...
- GO 新开发者要注意的陷阱和常见错误
转自:http://colobu.com/2015/09/07/gotchas-and-common-mistakes-in-go-golang/ 初级 开大括号不能放在单独的一行 未使用的变量 未使 ...
- Django 笔记(三)模版路径 ~ 静态引用
1.模版路径: 在 settings,py 里的 TEMPLATES = [] 内添加一句代码拼接路径 'DIRS': [os.path.join(BASE_DIR, 'templates')] 有两 ...
- swift 学习- 12 -- 方法
// 方法 是与某些特定类型相关的函数. 类, 结构体,枚举 都可以定义实例方法, 实例方法为给类型的实例封装了具体的任务与功能. 类, 结构体, 枚举 也可以定义类型方法, 类型方法与类型本身 ...
- Confluence 6 数据库整合的限制
数据库整合的限制 注意: Confluence 自带的 XML 方式导出方法并不适用于备份和整合大数据集.这里有一些第三方的数据库工具你可以使用能够帮助你对大数据集进行备份和整合.如果你在选择正确工具 ...
- python - 发送html格式的邮件
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom ...
- nginx+php负载均衡集群环境中的session共享方案梳理
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...