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 ...
随机推荐
- git与eclipse集成之导入组件到Eclipse工程
从工作目录中选择要导入的组件,右键选择:Import Projects,弹出窗口如下图所示,选择Import as general project 点击next,修改或使用默认的组件名称 点击fini ...
- web网页测试用例(非常实用)
转自:http://blog.csdn.net/yuki_ying/article/details/54946541 一.Web测试中,各类web控件测试点总结 一 .界面检查 进入一个页面测试,首先 ...
- 终于,我还是下决心学Java后台了
我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了.最近计划学习Java后台,因为最近接了私活的问题,好多都要Java后台和前端一起做.平常我在做什么,当然是忙着赚钱了 除了敲代码,你还有什么副业 ...
- swift 学习- 18 -- 自动引用计数
// Swift 使用 自动引用计数 (ARC) 机制来跟踪和管理你的应用程序的内存, 通常情况下, Swift 内存管理机制会一直起作用, 你无须自己来考虑内存的管理, ARC 会在类的实例不再被使 ...
- hexo d 部署博客时出错
问题描述: // 第一次遇到的问题 Error: packet_write_wait: Connection to 192.30.253.113 port 22: Broken pipe packet ...
- 用flask实现的添加后保留原url搜索条件
1.具体实现 #!usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask,render_template,request,r ...
- svn上check下来的项目,用idea打开,菜单栏没有svn工具解决办法
1.用idea打开你的项目(idea已经配置过小乌龟了) 2.菜单栏点击VCS,Enable Version Control Integration... 3.选择Subversion 4.这时候,菜 ...
- laravel 多检索条件列表查询
public function indexQuestions(Request $request, ResponseFactoryContract $response, QuestionModel $q ...
- Niagara 泵阀
1.泵阀系统 2.Niagara 每次在启动workbench的时候安装一下daemon,后启动platform 启动station的时候,当station的status变成Running之后启动
- cf1143E 倍增好题!
一开始感觉用莫队可以搞一下,但是看了题解才发现这题其实是倍增套路题 把排列转换成nxt数组,然后倍增dp[i][j]表示第i个数后面有(1<<j)个数的最靠左的区间 然后从右往左扫一次即可 ...