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流的基本概念
2408 0
CUDA streamCUDA流的基本概念
|
人工智能 缓存 并行计算
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
简介:随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。Ada lovelace(后面简称Ada)是NVIDIA最新的图形处理器架构,随2022年9月20日发布的RTX 4090一起公布。
142179 62
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
|
机器学习/深度学习 PyTorch TensorFlow
TensorRT 模型加速——输入、输出、部署流程
本文首先简要介绍 Tensor RT 的输入、输出以及部署流程,了解 Tensor RT 在部署模型中起到的作用。然后介绍 Tensor RT 模型导入流程,针对不同的深度学习框架,使用不同的方法导入模型。
2562 1
|
12月前
|
监控 异构计算
Jetson 学习笔记(八):htop查看CPU占用情况和jtop监控CPU和GPU
在NVIDIA Jetson平台上使用htop和jtop工具来监控CPU、GPU和内存的使用情况,并提供了安装和使用这些工具的具体命令。
869 0
|
关系型数据库 MySQL 应用服务中间件
使用docker搭建nacos集群
使用docker搭建nacos集群
1930 1
使用docker搭建nacos集群
Pyside6-第三篇-QToolButton一个的按钮
Pyside6-第三篇-QToolButton一个的按钮
552 0
|
分布式计算 并行计算 算法
【高并发】什么是ForkJoin?看这一篇就够了!
在JDK中,提供了这样一种功能:它能够将复杂的逻辑拆分成一个个简单的逻辑来并行执行,待每个并行执行的逻辑执行完成后,再将各个结果进行汇总,得出最终的结果数据。有点像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。
6854 0
【高并发】什么是ForkJoin?看这一篇就够了!
|
算法 安全 网络安全
AIGC涉及七大风险
【1月更文挑战第17天】AIGC涉及七大风险
1187 1
AIGC涉及七大风险
|
人工智能 弹性计算 并行计算
技术改变AI发展:CUDA Graph优化的底层原理分析(GPU底层技术系列一)
随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。CUDA是一种并行计算平台和编程模型,由Nvidia推出,可利用GPU的强大处理能力进行加速计算。
106447 1
|
并行计算 PyTorch 算法框架/工具
PyTorch中查看GPU使用情况以及一些重要函数
PyTorch中查看GPU使用情况以及一些重要函数
1325 0