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】的更多相关文章

  1. 远程办公《Remote》读书笔记:中国程序员在家上班月入过六万不是梦

    这不是一本新书,这是一本很值得中国程序员看的老书,所以我不是来做卖新书广告的:) 但它的确是一本好书,这本书在Amazon上3个business categories排第一.作者Jason Fried ...

  2. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  3. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  4. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  5. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  6. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  7. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  8. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

  9. 《3D Math Primer for Graphics and Game Development》读书笔记2

    <3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...

  10. 《3D Math Primer for Graphics and Game Development》读书笔记1

    <3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...

随机推荐

  1. jquery获取、设置、删除cookie

    获取cookie: function getCookie(cname) { var name = cname + "="; var ca = document.cookie.spl ...

  2. git与eclipse集成之clone远程仓库到本地

    1. Git与Eclipse集成 1.1. Clone远程仓库到本地 1.1.1.        获取远程仓库地址(选择北京,访问速度比深圳快) 1.1.2.        将远程仓库导入到Eclip ...

  3. hibernate框架学习第五天:数据查询、投影等

    复习day1环境搭建CRUD操作DB6个核心的APIday2TO PO DO 及其状态切换OID 自然主键 代理主键(uuid)一级缓存 Session绑定 load/get关系1对1 1对多(重点) ...

  4. ffmpeg 增加视频流媒体质量评估滤镜 (Video Multimethod Assessment Fusion, VMAF)

    URL: https://github.com/Netflix/vmaf libvmaf Obtain the VMAF (Video Multi-Method Assessment Fusion) ...

  5. $Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)

    1 模版语法之变量:详见源码  -{{ 变量 }}:******重要******{#相当于print了该变量#} {#只写函数名 相当于()执行了#}<p>函数:{{ test }}< ...

  6. css和javascript代码写在页面中的位置说明

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. win10:家庭版开启组策略

    1.新建一个txt文件 2.复制以下内容到txt文件 @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Mi ...

  8. Ex 2_34 线性3SAT..._第四次作业

  9. 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)

    1 前言 有时需要生成随机的用户(或机器人)昵称,头像,金币等,但又不想太生硬,可以现在网上爬一些常见昵称到文本中,然后读取出来,随机使用即可. 2 代码 var nickNameArr = []; ...

  10. python创建tcp服务端和客户端

    1.tcp服务端server from socket import * from time import ctime HOST = '' PORT = 9999 BUFSIZ = 1024 ADDR ...