CUDA

本文详细介绍了CUDA编程中的关键概念,包括SM的架构、线程协作、GPU常量内存的使用、CUDA流的创建与管理以及在多GPU系统上的CUDA C应用。强调了线程同步的重要性,线程块大小的选择,以及如何利用CUDA流实现高效的并行执行。还提到了零拷贝内存在多GPU系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


概述

GPU硬件的核心组件是SM(streaming multiprocess),即流式多处理器。
SM的核心组件包括cuda核心,共享内存,寄存器。SM可以并发的执行数百个线程,并发能力取决于SM所拥有的资源数。
一个线程块只能在一个SM上被调度,SM可以调度多个线程块。
SM采用SIMT(single instruction,multiple thread)单指令多线程架构。基本执行单元是线程束wraps,线程束包含32个线程,这些线程执行相同的指令。从同一程序地址执行,但是据有独立的执行路径和不同的行为。
GPU规定线程束中的所有线程在同一周期内执行相同的指令,线程束分化会导致性能下降。线程块被分到SM时,他将进一步划分为多个线程束wraps,因为线程束是SM的基本执行单元。但是SM并发执行的线程束是有限制的,因为资源限制,SM要为每个线程块分配共享内存,也要为线程束的每个线程分配寄存器。所以SM的配置会影响线程块和线程束的并发数量。
SM的基本执行单元线程束wraps包含32个线程,所以block大小一般设置为32的倍数。

线程协作

硬件对线程块和线程块中的线程都有限制。一般线程块的数量限制为不超过65535,每个线程块中的线程数量不超过设备属性中的maxThreadsPerBlock域值。大多数限制值为每个线程块512个线程。

将CUDA C的关键字__shared__添加到变量声明中,使这个变量驻留在共享内存中。共享内存缓冲区位于GPU上,访问共享内存的延迟远远低于访问CPU上的普通缓冲区。共享内存为线程块内的共享,每个线程块都会产生一个共享变量的副本,因此只需要根据线程块中的线程的数量来分配共享内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值