0.引言
本文记载了CUDA的学习过程~刚开始接触GPU相关的东西,包括图形、计算、并行处理模式等,先从概念性的东西入手,然后结合实践开始学习。CUDA感觉没有一种权威性的书籍,开发工具变动也比较快,所以总感觉心里不是很踏实。所以本文就是从初学者的角度,从无知开始探索的过程。当然在学习过程中避免不了出现概念性的理解错误,出现描述模糊不确切的地方还望指出,共勉共勉~

1.CUDA的概念

2.CUDA的模型

CUDA的运行模型,让host中的每个kernel按照线程网格的方式(Grid)在显卡硬件(GPU)上执行。每一个线程网格又包含多个线程块(block),每一个线程块又包含多个线程(Thread)。

 

Thread是UCDA模型中最基本的运行单元,执行最基本的程序指令。每一组协作的Thread被归于一个Block。在Block内部允许共享存储,可以容纳Thread的上限是512个。Grid是一组Block,共享全局存储空间。每一个Grid对应着一个Kernel任务(GPU上执行的核心任务)。

Warp:GPU执行程序时(Multi-processor)调度单位,目前CUDA的Warp的大小为32,同在一个Warp线程,在相同的指令下执行不同的数据。由于Multi-processor的数量不同,所以一个Block内的所有Thread不一定全部同时运行,但是每个Warp内的所有Thread一定同时运行。因此,我们定义BlockSize的时候应该是Warp Size的整数倍,也就是BlockSize应该为32 的整数倍。理论上来说,Thread的数量越多,就越能弥补单个Thread读取数据的 latency,但是当Tread越多,每个Thread可用的寄存器数量也就越少,严重的时候甚至能造成Kernel无法启动。因此每个Block至少应该包含64个Thread,一般数目为128或者256,具体的数量依据Multi-processor的数目而定。一个Multi-processor最多可以同时运行768个Thread,但是每个Multi-processor最多包含8个Block,因此要保持100%利用率,Block与Size就应该保持下列设定:
2 blocks x 384 threads 
3 blocks x 256 threads
4 blocks x 192 threads
6 blocks x 128 threads 
8 blocks x 96 threads 

CUDA学习ing..的更多相关文章

  1. CUDA学习,第一个kernel函数及代码讲解

    前一篇CUDA学习,我们已经完成了编程环境的配置,现在我们继续深入去了解CUDA编程.本博文分为三个部分,第一部分给出一个代码示例,第二部分对代码进行讲解,第三部分根据这个例子介绍如何部署和发起一个k ...

  2. CUDA学习之二:shared_memory使用,矩阵相乘

    CUDA中使用shared_memory可以加速运算,在矩阵乘法中是一个体现. 矩阵C = A * B,正常运算时我们运用 C[i,j] = A[i,:] * B[:,j] 可以计算出结果.但是在CP ...

  3. CUDA学习之一:二维矩阵加法

    今天忙活了3个小时,竟然被一个苦恼的CUDA小例程给困住了,本来是参照Rachal zhang大神的CUDA学习笔记来一个模仿,结果却自己给自己糊里糊涂,最后还是弄明白了一些. RZ大神对CUDA关于 ...

  4. CUDA学习笔记(三)——CUDA内存

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5f.html 结合lec07_intro_cuda.pptx学习 内存类型 CGMA: Compute ...

  5. CUDA学习笔记(二)【转】

    来源:http://luofl1992.is-programmer.com/posts/38847.html 编程语言的特点是要实践,实践多了才有经验.很多东西书本上讲得不慎清楚,不妨自己用代码实现一 ...

  6. cuda学习2-block与thread数量的选取

    由上一节可知,在main函数中,cuda程序的并行能力是在add<<<N,1>>>( dev_a, dev_b, dev_c )函数中体现的,这里面设置的是由N个b ...

  7. cuda学习3-共享内存和同步

    为什么要使用共享内存呢,因为共享内存的访问速度快.这是首先要明确的,下面详细研究. cuda程序中的内存使用分为主机内存(host memory) 和 设备内存(device memory),我们在这 ...

  8. CUDA学习之从CPU架构说起

    最近要学习GPU编程,就去英伟达官网下载CUDA, 遇到的第一个问题就是架构的选择 所以我学习的CUDA的第一步是从学习认识CPU架构开始的,x86-64简称x64,是64位版的x86指令集,向前兼容 ...

  9. CUDA学习笔记1

    最近要做三维重建就学习一下cuda的一些使用. CUDA并行变成的基本四路是把一个很大的任务划分成N个简单重复的操作,创建N个线程分别执行. CPU和GPU,有各自的存储空间: Host, CPU a ...

随机推荐

  1. 代码阅读软件kscope源码安装指导

    安装 kscope-1.6.2 1. ./configure --without-arts --prefix=/soft/kscope-1.6.2  (I customize the installi ...

  2. css,js工具篇

    4. web前端开发分享-css,js工具篇   web前端开发乃及其它的相关开发,推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emm ...

  3. C#基础知识梳理索引

    C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...

  4. ps -aux中的time 的意思

    ps -aux 显示所有包含其他使用者的行程 aux 输出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER: 行程拥有者 ...

  5. 认识WinDbg

    WinDbg学习笔记(一)--认识WinDbg 一.前言    本人学习WinDbg已经有好几天了,虽说技术掌握的还不太熟练,不过也总算是入门了在学习WinDbg的过程中,觉得WinDbg真的比Oll ...

  6. bios和dos中断

    1.字符功能调用类(Character-Oriented Function)01H.07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H — ...

  7. ios开发之路十一(ARC forbids explicit message send of 'autorelease'错误)

    在ios中经常会遇到:ARC forbids explicit message send of 'autorelease' 或“ARC forbids explicit message send of ...

  8. 简单的mvc之一:简单的开始

    mvc学习到现在,相对所学到的一系列的知识做一个总结,于是就有了这个标题—简单的mvc.文如名,写的是简单的mvc的知识,目标群也不言而喻.这一篇来个简单的开始,从头建立一个web项目,比如hello ...

  9. LESS编译方案

    我的LESS编译方案 2013-08-07 10:22 by 逆风之羽, 469 阅读, 2 评论, 收藏, 编辑 背景 近期项目前端决定使用less,简单介绍一下,详细信息有兴趣查看官方文档(htt ...

  10. Jquery 图片轮播实现原理总结

    Jquery 图片轮播实现原理总结 以前要做图片轮播效果的时候,总是在网上找一段jquery的复制粘贴进去,只索取不奉献,今个就把我对这个的实现原理讲解一下. 首先说下,我在网上找的例子全是用的UL ...