《CUDA并行程序设计:GPU编程指南》笔记 Chaper 5 线程网格、线程块、线程束

本文详细介绍了CUDA编程中的核心概念,包括线程网格、线程块、线程束的关系,以及如何在GPU上进行数据运算。首先讲解了GPU内存的申请与释放,接着说明了数据在CPU与GPU之间的复制过程。此外,还深入解析了CUDA中关键变量的含义,如gridDim、blockDim和threadIdx等,最后探讨了线程束的重要性及其对GPU利用率的影响。

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

1. 线程网格、线程块、线程束 关系

在这里插入图片描述

2. 如何将数据放到GPU上运算

1.首先要通过cudaMalloc和cudaFree申请或释放内存
2.然后使用cudaMemcpy将数据从CPU端复制到GPU

在这里插入图片描述

3. CUDA 中的相关变量含义

 gridDim.x – 线程网格X维度上线程块的数目 
 gridDim.y – 线程网格Y维度上线程块的数目
 
 blockDim.x – 一个线程块X维度上的线程数量 
 blockDim.y – 一个线程块Y维度上的线程数量
 
 threadIdx.x –线程块X维度上的线程索引 
 threadIdx.y –线程块Y维度上的线程索引

4. 线程束(WARPS)

同一个线程束中的所有线程同时执行,通过访存获取指令后广播至线程束所占用的SP,wrapSize固有大小32,用户不能改变

为什么线程束大小warpSize很重要?

原因:程序的分支会造成线程束中很多线程阻塞
实际情况:指令执行层面,硬件的调度是基于半个线程束而不是整个线程束,只需要将线程束一半的线程划分到同一个分支里,GPU利用率可以达到100%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值