CUDA(Compute Unified Device Architecture): 统一计算架构,是GPU的编程接口。 CUDA是C语言的一种扩展,它允许使用标准C来进行GPU代码编程。这个代码即适用于主机处理器(CPU),也适用于设备处理器(GPU)。
CPU负责派生出运行在GPU设备处理器的多线程任务(CUDA称其为内核程序)。GPU设有内部调度器来把这些内核程序分配到相应的GPU硬件上。
CUDA的编译原则:基于虚拟指令集的运行时编译。
GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以堪称是CPU的协处理器,因此GPU并行计算,是指CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCI-E总线连接在一起来协同工作,CPU所在的位置称为主机端(host),而GPU所在的位置称为设备端(device)。
GPU适合数据并行的计算密集型任务,CPU适合控制密集型任务。
一、弗林分类法:对计算机架构进行划分
* SISD——单指令,单数据
* SIMD——单指令,多数据
* MISD——多指令,单数据
* MIMD——多指令,多数据
GPU实现的是“单指令,多线程”(SIMT,Single Instruction Multiple Thread)模型。
SIMT和SIMD本质相同:都是单指令多数据。SIMT比SIMD更灵活,允许一条指令的多数据分开寻址,SIMD是必须连续在一起的片段。
二、常用的并行模式
1、基于循环的模式:最关键的是发现循环