
CUDA 编程模型提供了 GPU 架构的抽象,作为应用程序与其在 GPU 硬件上的可能实现之间的桥梁。这篇文章概述了 CUDA 编程模型的主要概念,概述了它们如何在 C/C++ 等通用编程语言中公开。
先介绍一下CUDA编程模型中广泛使用的两个关键字:host和device。
主机是系统中可用的 CPU。与 CPU 相关联的系统内存称为主机内存。GPU 称为设备,GPU 内存也称为设备内存。
要执行任何 CUDA 程序,有三个主要步骤:
将输入数据从主机内存复制到设备内存,也称为主机到设备传输。
加载 GPU 程序并执行,在芯片上缓存数据以提高性能。
将结果从设备内存复制到主机内存,也称为设备到主机传输。
CUDA 内核和线程层次结构
图 1 显示 CUDA 内核是一个在 GPU 上执行的函数。应用程序的并行部分由K 个不同的 CUDA 线程并行执行K次,而不是像常规 C/C++ 函数那样只执行一次。

每个 CUDA 内核都以__global__声明说明符开头。程序员通过使用内置变量为每个线程提供唯一的全局 ID。

一组线程称为一个 CUDA 块。CUDA 块被分组到一个网格中。内核作为线程块网格执行(图 2)。
每个 CUDA 块由一个流式多处理器 (SM) 执行,不能迁移到 GPU 中的其他 SM(抢占、调试或 CUDA 动态并行期间除外)。根据 CUDA 块所需的资源,一个 SM 可以运行多个并发 CUDA 块。每个内核在一台设备上执行,CUDA 支持一次在一台设备上运行多个内核。图 3 显示了 GPU 中可用硬件资源的内核执行和映射。


CUDA编程模型为GPU架构提供了抽象,文章介绍了CUDA的关键概念,包括内核和线程层次结构、内存层次结构及计算能力。CUDA程序涉及主机到设备、设备到主机的数据传输,内核由线程块执行,每个块在流式多处理器上运行。内存层次结构包括寄存器、L1/共享内存、只读内存、L2缓存和全局内存。计算能力版本号表示GPU的规格和功能。

3029

被折叠的 条评论
为什么被折叠?



