基于cuda编程可以利用GPUs的并行计算引擎来更高效地解决比较复杂的计算问题。
GPU需要与CPU协同计算。可以看作是CPU的协处理器,因此,在说GPU并行计算时,其实指的是基于CPU+GPU的异构计算架构。
异构计算架构中,GPU与CPU通过PCle总线连接在一起协同工作。
CPU所在位置被称为主机端(host),GPU所在位置称为设备端(device)。
为什么使用GPU计算?
GPUs的并行计算引擎强大,大幅加快计算速度。
机器学习以及人工智能需要训练模型,需要大量的计算,特别是稠密矩阵向量计算,GPU可以快10倍以上。
基于GPU的并行计算已经成为训练深度学习模型的标配。
GPU与CPU的分工
GPU包括更多的运算核心,其特别适合数据并行的计算密集型任务。
CPU的运算核心较少,但是可以实现复杂的逻辑运算,因此适合控制密集型任务。
CPU上的线程时重量级的,上下文切换开销大。
GPU存在很多核心,线程是轻量级的。
基于GPU+CPU 的异构计算平台可以优势互补,CPU负责逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序。
GPU计算架构:
CUDA程序架构
专业术语:
SPA:Streaming Processor Array 流处理器阵列
TPC/GPC:Texture(Graphics) Processor Cluster 多个流处理器成为一个小组
SM:Streaming Multiprocessor(32SP)流多处理器
SP:Streaming processor或CUDA Core 流处理器
GPU的程序在执行的时候,网格的块映射到流多处理器时,最小单位按照block去做的,就是同一个block要映射到同一个流多处理器。
一个warp里面所有的线程要执行相同的指令,否则会有指令的分散,导致效率的降低。