CUDA简介

CUDA:Compute Unified Device Architecture,统一计算设备架构,CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU (Graphics processing unit) 能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。

CUDA 即是 NVIDIA 的 GPGPU 模型,它使用C语言为基础

和CPU的比较

优点:

  • 更大的内存带宽
  • 更多的执行单元,虽然频率比CPU低
  • 价格更低

缺点:

  1. 运算单元多,只适合高度并行化的工作
  2. 对于具有高度分支的程序,效率会比较差
The GPU Devotes More Transistors to Data Processing

具体来说,GPU特别适合大量并行的数据运算(高运算密度)。由于对每个数据进行相同的操作,所以对复杂的流控制需求较低,并且因为处理许多数据单元并且具有高运算密度,内存读取延时可以通过运算来隐藏,CPU采用的是高速缓存cache来缩减延时 (latency )

可伸缩Scaleable的编程模式

核心是三个关键的抽象:

  1. 线程组的层次结构
  2. 共享内存
  3. 障碍同步

这种可扩展的编程模型允许市场上的各种GPU架构,GeForce,Quadro,Tesla等。

Automatic Scalability

A GPU is built around a scalable array of multithreaded Streaming Multiprocessors (SMs).

Streaming Multiprocessors (SMs)
在一个multiprocess中,一个线程块的所有线程可以同时执行,多个线程块block也可以同时执行,使用SIMT (Single-Instruction, Multiple-Thread) 构架,一个线程内部通过指令流水进行指令级别的并行,通过硬件多线程进行线程级别的并行。
一个GPU中有多个SM,每个SM有多个core(processor),但是只有一个指令单元,同时只能够执行完全相同的指令集。
Warp
Multiprocessor执行线程块时,把他们以32个并行线程为一组,称为warps,每个warp由warp scheduler调度执行,warp中的每个线程在相同的程序地址处开始执行,但他们有自己的指令地址计数器和寄存器状态。
当他们执行相同的指令时可以达到最大的效率,但当因为由于依靠数据决定的条件分支产生了分歧(warp divergence),warp连续执行每个分支路径,禁止不相关的线程,执行完成后,又回归到相同的执行路径。不同warps执行互相独立。

多线程的CUDA程序具有自动适应性,它被分解为相互独立的线程块,可以以任意的顺序执行,不管是并行还是串行,所以一个编译好的CUDA程序可以在任意数目的多处理器上运行,只有运行的系统需要知道实际的处理器数量

Kernels

一种扩展的C函数,调用时通过N个不同的CUDA线程执行N次,不像通常C函数一样只执行一次
__global__说明符来声明kernel函数,执行的次数通过<<<...>>>执行配置语法来说明
每个线程对应的唯一标识ID通过内置的threadIdx变量获取

// Kernel definition 
__global__ void VecAdd(float* A, float* B, float* C) 
{ 
    int i = threadIdx.x; 
    C[i] = A[i] + B[i]; 
    
} 
int main() 
{
    ... 
    // Kernel invocation with N threads 
    VecAdd<<<1, N>>>(A, B, C); 
    ... 
}

Thread Hierarchy

线程被分成成块的网格。Grid和Block都是三维的

例如:
dim3 dimBlock(8, 8, 8);
dim3 dimGrid(100, 100, 1);
Kernel<<<dimGrid, dimBlock>>>(…);
不过通常我们使用的一维grid和block
Kernel<<<block_count, block_size>>>(…);

每个block中的thread数目有限,因为他们在同一个内存核心中,共享有限的内存资源,通常最多1024个线程。
grid中的block的数量:最大数目一般为65535,由被处理的数据的大小或者系统中处理器的数量决定

  • 如果超出了任何一个数目,GPU会出错或者产生垃圾数据
  • GPU编程的部分时间就是用来处理硬件限制的
  • 这个限制意味着必须要对Kernel程序分配线程不足进行处理
Grid of Thread Blocks
index of thread 和 thread ID的关系

threadIdx是一个三维矢量,所以线程可以通过一、二、三维线程索引index来识别,组成对应维度的线程块thread block。

一维索引直接对应线程ID
二维(Dx, Dy)的块, 线程索引为 (x, y)对应ID为(x + y Dx);
三维(Dx, Dy, Dz)块, 索引为(x, y, z) 对应ID为 (x + y Dx+ z Dx Dy).

blockIdx 索引变量可以用来标识网格中的块,blockDim可以获取维度


同步 synchronization

线程通信和资源共享:
通过同步来相互协调,调用固有函数__syncthreads()
只在block层次产生作用,类似于C/C++中的 barrier()函数

原子操作 Atomic Operation

执行读-修改-写的原子操作,在全局或共享内存空间中
串行操作
atomic<op>(float *address, float val);
op的范围: Add, Sub, Exch, Min, Max, Inc, Dec, And, Or, Xor
atomicCAS(int *address, int compare, int val)

warp shuffle

CC >= 3.0 在一个warp内的线程交换变量
int __shfl(int var, int srcLane, int width=warpSize);


计算能力 CC

设备的计算能力由版本号代表,也叫做 SM Version

这个版本号标识了GPU硬件的支持特性,在应用运行时使用,决定在当前GPU上可以实现的硬件特性和指令。它由主版本号X和小版本号Y组成,表示为X.Y
主版本号表示核心构架相同,副版本号表示核心构架的改进,可能增加了新的特性

The major revision number Core architecture
5 Maxwell architecture
3 Kepler architecture
2 Fermi architecture
1 Tesla architecture.

The Tesla architecture is no longer supported starting with CUDA 7.0.

支持CUDA的GPU列表
计算能力的技术规格

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容