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 块被分组到一个网格中。内核作为线程块网格执行