CUDA--GPU 编程模型基础

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

并行编程模型

自动

共享存储模型

线程模型

消息传递模型

数据并行模型

1

CUDA 核

参考资料


如果你觉得这篇文章对你有帮助,不妨请我喝杯咖啡,鼓励我创造更多!