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 ...
随机推荐
- Aurelius vs mORMot vs EntityDAC Delphi 的 ORM框架
Aurelius vs mORMot vs EntityDAC Delphi 的 ORM框架: http://www.tmssoftware.com/site/aurelius.asp#produ ...
- cocosCreater开发时遇到的问题
生成vscode任务后无法编译: ctrl +p -> 输入task compile 编译任务时提示 :由于使用任务版本 0.1.0,以下工作区文件夹将被忽略 这是cocos默认生成的code ...
- 手动注册 Omron SYSMAC OPC Server 2
使用如下注册表操作实现 Omron SYSMAC OPC Server 2 的注册,包括COM组件和ProgID. 注意,手动注册适用于在win10等不兼容老版本程序的正常使用的情况,此方法一般在单机 ...
- JS导出excel设置下载的标题/与angular结合冲突
2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...
- hibernate映射关系(多对多)
Student与Teacher关系多对多(只建了2个实体类) public class Student { private int id; private String name; private S ...
- Linux/Ubuntu安装搜狗输入法
零.你首先需要安装fcitx小企鹅输入法,相信绝大部分用linux的中国人都用这个输入法,安装fcitx后同时还能解决Sublime Text的中文输入问题. 安装fcitx输入法前首先要安装fcit ...
- linux中ping带时间及打印内容到文件
ping命令就不多说了,-i是时间间隔,-c是ping的次数 这种是每隔30秒ping一次,并在后面显示时间: ping 192.168.30.123 -i 30 | awk '{ print $0& ...
- filter(HTML)滤镜用法
CCS滤镜参考语法:STYLE="filter:filtername(fparameter1, fparameter2...)" (Filtername为滤镜的名称,fparame ...
- Confluence 6 从关闭的连接中恢复
当数据库服务器进行重启或者因为网络问题导致连接中断.所有在数据库连接池中的连接都会被中断.希望处理这个问题,通常需要 Confluence 进行重启. 但是,数据库连接池中的连接可以通过运行 SQL ...
- 遇到的一个移动端从下往上过渡的弹框,在Android下过渡动画的优化问题。
优化之前: /* 分享弹框样式 */ .popUpDiv { width: 100vw; height: 100vh; transition: all 0.5s ease; position: fix ...