CUDA 简介
2006年,英伟达发布了 CUDA,CUDA 是建立在 NVIDIA GPU 上的一个通用并行计算平台和编程模型,基于 CUDA 编程可以利用 GPU 的并行计算引擎来更加高效地解决比较复杂的计算难题。近年来,GPU 最成功的一个应用就是深度学习领域,基于 GPU 的并行计算已经成为训练深度学习模型的标配。
GPU 并不是一个独立运行的计算平台,而需要与 CPU 协同工作,可以看成是 CPU 的协处理器,因此当我们在说 GPU 并行计算时,其实是指的基于 CPU+GPU 的异构计算架构。在异构计算架构中,GPU 与 CPU 通过 PCIe 总线连接在一起来协同工作,CPU 所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下图所示。
可以看到 GPU 包括更多的运算核心,其特别适合数据并行的计算密集型任务,如大型矩阵运算,而 CPU 的运算核心较少,但是其可以实现复杂的逻辑运算,因此其适合控制密集型任务。另外,CPU 上的线程是重量级的,上下文切换开销大,但是 GPU 由于存在很多核心,其线程是轻量级的。因此,基于 CPU+GPU 的异构计算平台可以优势互补,CPU 负责处理逻辑复杂的串行程序,而 GPU 重点处理数据密集型的并行计算程序,从而发挥最大功效。
CUDA 是 NVIDIA 公司所开发的GPU 编程模型,它提供了 GPU 编程的简易接口,基于 CUDA 编程可以构建基于 GPU 计算的应用程序。
CPU 体系架构
略
数据集并行(Data-level Parallelism )
单指令多数据 Singel Instruction Multiple Data(SIMD)
x86 的向量计算
SSE2
AVX
线程级并行
程序员可以创建和销毁
多核
CPU的现实困境 能量墙
为串行计算优化
并行计算是方向
并行计算
概念
flynn 矩阵
A | B |
---|---|
SISD | SIMD |
MISD | MIMD |
并行编程模型
自动
共享存储模型
线程模型
消息传递模型
数据并行模型
CUDA 核