CUDA并行加速二---GPU架构

CUDA并行加速二------GPU架构

串行,并行

了解GPU和CPU我们首先要谈一谈串行计算和并行计算的概念。我们知道,高性能计算的关键就是利用多核处理器进行并行计算。当我们求解一个计算机程序任务时,我们很自然的想法就是将该任务分解成一系列小任务,把这些小任务一一完成。
在串行计算时,我们的想法就是让我们的处理器每次处理一个计算任务,处理完一个计算任务后再计算下一个任务,直到所有小任务都完成了,那么这个大的程序任务也就完成了,也就是N个任务我们就要使用NT个时间,所以在我们CPU编程的时候,因为多核处理器的出现导致多线程可以加速CPU处理的效率,例如上诉所说的我们假如开了4个线程,同时处理这四个任务那么我们需要的时间就是NT/4。
就此我们延伸出,如果有N核处理,那么我们只需要NT/N个时间就能完成这个任务,就此就引出并行编程,上诉也就是并行编程的粗浅概念。

CPU虽然每个核心自身能力极强,处理任务上非常强悍,无奈他核心少,在并行计算上表现不佳;反观GPU,虽然他的每个核心的计算能力不算强,但他胜在核心非常多,可以同时处理多个计算任务,在并行计算的支持上做得很好。
GPU和CPU的不同硬件特点决定了他们的应用场景,CPU是计算机的运算和控制的核心,GPU主要用作图形图像处理。图像在计算机呈现的形式就是矩阵,我们对图像的处理其实就是操作各种矩阵进行计算,而很多矩阵的运算其实可以做并行化,这使得图像处理可以做得很快,也使得深度学习可以发展起来,因此GPU在图形图像领域也有了大展拳脚的机会。

总结:
CPU:擅长流程控制和逻辑处理,不规则数据结构,不可预测存储结构, 单线程程序,分支密集型算法
GPU:擅长数据并行计算,规则数据结构,可预测存储模式

GPU硬件架构

首先了解下SP,SM;
SP:最基本的处理单元,streaming processor,也称为CUDA core。最后具体的指令和任务都是在SP上处理的。GPU进行并行计算,也就是很多个SP同时做处理。
SM:多个SP加上其他的一些资源组成一个streaming multiprocessor。也叫GPU大核,其他资源如:warp scheduler,register,shared memory等。SM可以看做GPU的心脏(对比CPU核心),register和shared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力。
简而言之,SP是线程执行的硬件单位,SM中包含多个SP,一个GPU可以有多个SM(比如16个),最终一个GPU可能包含有上千个SP。这么多核心“同时运行”,速度可想而知,这个引号只是想表明实际上,软件逻辑上是所有SP是并行的,但是物理上并不是所有SP都能同时执行计算(比如我们只有8个SM却有1024个线程块需要调度处理),因为有些会处于挂起,就绪等其他状态,这有关GPU的线程调度。
单个SM:
CUDA并行加速二---GPU架构

下图就是SP和SM关系:
CUDA并行加速二---GPU架构

TPC、GPC:GPC是Graphics Processing Cluster图形处理集群bai的缩写,属于duGPU的次级单位,一个GPU包含有几组GPC,GPU的架构和代号不同,GPC相应的数量也不同,比如NVIDIA的GTX680的核心GK104具有四个GPC,每个GPC下面还包含2组SMX(Streaming Multiprocessor Extreme的缩写)计算集群和1组光栅单元,在SMX下面才是基本的CUDA计算核心以及纹理单元等其它基本单元

Warp Scheduler:在GPU软件架构中一个warp需要占用一个SM运行,多个warps需要轮流进入SM,而这一个过程由SM的硬件warp scheduler负责调度。

Share Memory:共享内存,
CUDA并行加速二---GPU架构

GPU软件架构

grid:多个Block
block:block是软件概念,一个block只会由一个sm调度,程序员在开发时,通过设定block的属性,告诉GPU硬件,我有多少个线程,线程怎么组织。而具体怎么调度由sm的warps scheduler负责,block一旦被分配好SM,该block就会一直驻留在该SM中,直到执行结束。一个SM可以同时拥有多个blocks。
threads:硬件终端SM,每个处理线程
warp:Nvidia把32个threads组成一个warp,warp是调度和运行的基本单元
CUDA并行加速二---GPU架构