CUDA的编程模型

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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

在这里插入图片描述
CUDA 编程模型提供了 GPU 架构的抽象,作为应用程序与其在 GPU 硬件上的可能实现之间的桥梁。这篇文章概述了 CUDA 编程模型的主要概念,概述了它们如何在 C/C++ 等通用编程语言中公开。

先介绍一下CUDA编程模型中广泛使用的两个关键字:host和device。

主机是系统中可用的 CPU。与 CPU 相关联的系统内存称为主机内存。GPU 称为设备,GPU 内存也称为设备内存。

要执行任何 CUDA 程序,有三个主要步骤:

将输入数据从主机内存复制到设备内存,也称为主机到设备传输。
加载 GPU 程序并执行,在芯片上缓存数据以提高性能。
将结果从设备内存复制到主机内存,也称为设备到主机传输。

CUDA 内核和线程层次结构

图 1 显示 CUDA 内核是一个在 GPU 上执行的函数。应用程序的并行部分由K 个不同的 CUDA 线程并行执行K次,而不是像常规 C/C++ 函数那样只执行一次。
在这里插入图片描述

图 1. 内核是一个在 GPU 上执行的函数。

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

在这里插入图片描述

图 2. CUDA 内核被细分为多个块。

一组线程称为一个 CUDA 块。CUDA 块被分组到一个网格中。内核作为线程块网格执行(图 2)。

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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值