cuda中关于占用率的计算

简介: cuda中关于占用率的计算

官方文档CUDA C++ Best Practices Guide中提到一个例子:对于7.0的设备,每个multiprocessor有65536个寄存器,且支持最大的并发线程束为64。要想每个multiprocessor达到100%的占用率,意味着每个线程最多能使用32个寄存器。可以使用官方提供的NVIDIA GPU Computing Toolkit\CUDA\v11.1\tools目录下的CUDA_Occupancy_Calculator.xls来计算相关参数。

For purposes of calculating occupancy, the number of registers used by each thread is one of the key factors. For example, on devices of compute capability 7.0 each multiprocessor has 65,536 32-bit registers and can have a maximum of 2048 simultaneous threads resident (64 warps x 32 threads per warp). This means that in one of these devices, for a multiprocessor to have 100% occupancy, each thread can use at most 32 registers. However, this approach of determining how register count affects occupancy does not take into account the register allocation granularity. For example, on a device of compute capability 7.0, a kernel with 128- thread blocks using 37 registers per thread results in an occupancy of 75% with 12 active 128-thread blocks per multi-processor, whereas a kernel with 320-thread blocks using the same 37 registers per thread results in an occupancy of 63% because only four 320-thread blocks can reside on a multiprocessor. Furthermore, register allocations are rounded up to the nearest 256 registers per block on devices with compute capability 7.0.

  1. 如果使用128 size的线程块(每个线程使用37个寄存器),会有12个活跃线程块/SM,从而有12*4(128/32,线程束/SM) = 48活跃线程束/SM,那么占用率为48/64=75%。
  2. 如果使用320 size的线程块(每个线程使用37个寄存器),会有4个活跃线程块/SM, 从而有4*10(320/32,线程束/SM) = 40活跃线程束/SM,那么占用率为40/64=62.5%。

这里最重要的数据是每个SM上的活跃线程块,这个数值受两个方面的资源限制,一个是寄存器资源,一个是共享内存的资源。

每个线程块使用128个线程

每个线程块使用320个线程

相关文章
|
并行计算 异构计算
CUDA streamCUDA流的基本概念
CUDA streamCUDA流的基本概念
2942 0
CUDA streamCUDA流的基本概念
|
人工智能 缓存 并行计算
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
简介:随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。Ada lovelace(后面简称Ada)是NVIDIA最新的图形处理器架构,随2022年9月20日发布的RTX 4090一起公布。
144043 62
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
|
前端开发 Java 数据库
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
283 0
|
2月前
|
弹性计算 开发者
阿里云服务器优惠政策解读:个人开发者、学生及初创企业最新租赁解读
阿里云2025年最新优惠:新用户38元/年享2核2G轻量服务器;老用户99元/年用ECS;学生领300元代金券免费获取;企业199元/年购2核4G云服务器。配置灵活,续费同价,助力个人开发者、学生及初创企业低成本上云。
538 8
|
5月前
|
Ubuntu
Ubuntu系统重装:一步一步指南
本文介绍了如何重装Ubuntu系统,重装系统可以让电脑重新恢复到原始状态,从而解决电脑出现的各种问题,提高电脑的运行效率。重装系统的过程需要准备U盘,从官网下载Ubuntu系统,进入BIOS设置,根据提示进行安装,安装完成后重启电脑即可完成重装Ubuntu系统。
|
并行计算 Shell TensorFlow
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
在使用TensorFlow-GPU训练MTCNN时,如果遇到“Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED”错误,通常是由于TensorFlow、CUDA和cuDNN版本不兼容或显存分配问题导致的,可以通过安装匹配的版本或在代码中设置动态显存分配来解决。
273 1
Tensorflow-GPU训练MTCNN出现错误-Could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
|
10月前
|
机器学习/深度学习 存储 算法
量子算法的设计与优化:迈向量子计算的未来
量子算法的设计与优化:迈向量子计算的未来
359 3
|
机器学习/深度学习 人工智能 并行计算
【AI系统】Tensor Core 基本原理
本文深入介绍了英伟达GPU中的Tensor Core,一种专为加速深度学习设计的硬件单元。文章从发展历程、卷积计算、混合精度训练及基本原理等方面,详细解析了Tensor Core的工作机制及其在深度学习中的应用,旨在帮助读者全面理解Tensor Core技术。通过具体代码示例,展示了如何在CUDA编程中利用Tensor Core实现高效的矩阵运算,从而加速模型训练和推理过程。
2456 0
|
机器学习/深度学习 并行计算 PyTorch
从零开始下载torch+cu(无痛版)
这篇文章提供了一个详细的无痛版教程,指导如何从零开始下载并配置支持CUDA的PyTorch GPU版本,包括查看Cuda版本、在官网检索下载包名、下载指定的torch、torchvision、torchaudio库,并在深度学习环境中安装和测试是否成功。
从零开始下载torch+cu(无痛版)
|
分布式计算 并行计算 算法
【高并发】什么是ForkJoin?看这一篇就够了!
在JDK中,提供了这样一种功能:它能够将复杂的逻辑拆分成一个个简单的逻辑来并行执行,待每个并行执行的逻辑执行完成后,再将各个结果进行汇总,得出最终的结果数据。有点像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。
7056 0
【高并发】什么是ForkJoin?看这一篇就够了!