CUDA编程模型
本篇博客主要对CUDA的编程模型、内存层次结构、线程管理进行简单的介绍。
1、编程结构
CUDA是一种通用的并行计算平台和编程模型,是在C语言基础上扩展。
一些术语区分:
设备 | GPU及其内存(设备内存) |
主机 | CPU及其内存(主机内存 ) |
CUDA编程模型主要是异步的,因此在GPU上进行的运算可以与主机-设备通信重叠。一个典型的CUDA程序包括由并行代码互补的串行代码。如图所示,串行代码(及任务并行代码)在主机CPU上执行,而并行代码在GPU上执行。主机代码按照ANSI C标准进行编写,而设备代码使用CUDA 进行编写。你可以将所有的代码统一放在一个源文件中,也可以使用多个源文件来构建应用程序和库。
一个典型的CUDA程序实现流程遵循以下模式。
- 把数据从CPU内存拷贝到GPU内存。
- 调用核函数对存储在GPU内存中的数据进行操作。
- 将数据从GPU内存传送到CPU内存。
图表 1 一个典型的CUDA程序
2 内存层次结构成
CUDA编程模型从GPU架构中抽象出一个内存层次结构。如下图所示的是一个简化的GPU内存结构,它主要包含两部分:全局内