CUDA占用率计算方法
通常认为:一个SM中所有的线程在同时工作,那么这个SM的效率或占用率就是100%,在这种情况下,处理程序的速度是最快的,效率是最高的。如果实际中由于资源的限制(如共享内存,寄存器),不是所有的线程都同时工作,这时,称正在运行的线程为活跃(actived)或常驻(resident)线程。占用率一般受三个条件的限制:
1.SM最大并发线程数,SM最大并发Warp数,SM最大并发块数
2.共享内存资源限制
3.寄存器资源限制
每个SM是GPU处理数据的最基本单元,它们运行都是独立并行的,SM的数量通常最直观地体现了GPU硬件的能力。
程序具体参数的设置可以在一些工具的帮助下进行,CUDA安装目录有个tools的文件夹,文件夹中有一个CUDA Occupancy Calculator的excel文件。把表格中硬件参数加入进去,就可以自动计算出来相应的程序运行参数。
1、占用率公式:每个SM中活跃线程束的数量/每个SM中最大的线程束的数量。可以看到我的设备每个SM中最大线程束是32固定的,所以现在问题变为活跃线程束为什么是20。粉色圈中的部分的最小值才是决定占用率的因素,所以可以看到占用率是由上图中粉色圈中的寄存器因素计算而来。寄存器因素显示:(每个SM有10个活跃blocks)*(每个block有2个线程束)=20.(所以占用率公式的分子即活跃线程束的数量就是这样来的)。
2、所以现在变为寄存器因素中每个SM中活跃blocks为什么是10。也就是浅蓝色C为什么是10。易知,C=B/A。所以此时问题变为A为什么==2,B为什么==20。
3、我查看了下A的公式:=IF(myAllocationGranularity="block",CEILING(CEILING(MyWarpsPerBlock,myWarpAllocationGranularity)*MyRegCount*limitThreadsPerWarp,myAllocationSize),MyWarpsPerBlock) 而绿色圈中显示寄存器分配粒度不是"block",而是warp,所以此时A=myWarpsPerBlock=64/32=2
4、我查看了下B的公式:
=IF(myAllocationGranularity="block",limitRegsPerBlock,FLOOR(limitRegsPerBlock/CEILING(MyRegCount*limitThreadsPerWarp,myAllocationSize),myWarpAllocationGranularity)) 而绿色圈中显示寄存器分配粒度不是"block",而是warp,所以此时B=FLOOR(limitRegsPerBlock/CEILING(MyRegCount*limitThreadsPerWarp,myAllocationSize),myWarpAllocationGranularity) 代入我紫色圈中的设置数值后:
所以到此为止,就知道ABC三处是怎么计算的了。
参考文献:CUDA Occupancy Calculator中计算占用率_wd1603926823的专栏-CSDN博客_cuda占用率计算
CUDA占用率计算方法相关推荐
- c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%
好记性不如烂笔头 --东西太多,脑子永远不够用 问题 用 C 语言写个程序,运行时,cpu占用率一直保持50% 解决方案 一看题目好眼熟!<编程之美>!然而已经记不清楚了,果然东西需要经常 ...
- CUDA: Occupancy(占用率)详解
#CUDA: Occupancy(占用率)详解 占用率是指每个多处理器(Streaming Multiprocessor,SM)的活动线程束(warps)数量与实际的活动warps数量的比率. 高的占 ...
- 占用率_有问有答:任务管理器里面的GPU占用率到底是怎么算的?
从总体上来说,Windows 10是一个好系统,虽然我们天天戏称它为"Bug 10",但不可否认的是,从立项以来,开发团队就一直在努力为它加入新的功能,其中有不少是相当实用的,比如 ...
- TensorFlow 显存占用率高 GPU利用率低
文章目录 nvidia-smi指令 动态刷新GPU信息 显存占用高,但是CPU使用率低 回头再看 nvidia-smi指令 命令位置: 所以Path中添加环境变量: C:\Program Files\ ...
- 训练神经网络gpu占用率低,gpu为什么适合神经网络
为什么Matlab训练神经网络用不了GPU . 可以用gpu加速训练,可以通过增加'useGPU'字段:train(net,P,T,'useGPU','yes');或先将数据集P,T通过函数Pgpu= ...
- java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用
可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...
- 1709 ltsb 内存占用_有问有答:任务管理器里面的GPU占用率到底是怎么算的?
从总体上来说,Windows 10是一个好系统,虽然我们天天戏称它为"Bug 10",但不可否认的是,从立项以来,开发团队就一直在努力为它加入新的功能,其中有不少是相当实用的,比如 ...
- Linux下如何查看高CPU占用率线程
转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...
- IDEA的CPU占用率高问题解决方法
前言:这段时间发现 IDEA 的 CPU 占用率猛涨,时不时就飙升到百分之7.80,使得敲代码的体验感十分不佳,在经过一番查找之后终于解决了问题,在此记录一下 IDEA的CPU占用率高问题解决方法 问 ...
最新文章
- 「JOISC 2016 Day 3」回转寿司
- solr异常--Expected mime type application/octet-stream but got text/html.
- getResource(String name)用法及源码分析
- unicode编码查询方法
- 如何把自己github博客配置到一个腾讯云购买的自定义域名上
- 蓝桥杯第六届国赛JAVA真题----切开字符串
- java map reduce 原理_MapReduce实现原理详解
- all方法 手写promise_我团队的一年前端实现Promise所有方法
- 马自达 3 为什么抛弃了触摸屏?
- 现代信号处理 张贤达_清华信号处理著名学者张贤达去世,享年74岁
- springboot结合mybatis连接数据库
- 川崎机器人f控制柜接线图_Kawasaki川崎机器人控制柜维修
- Thinkpadt450 win7下面禁用触摸板
- 微信小程序制作水印相机
- excel删除无尽空白行_批量删除空白行其实很简单,这3中方法都能快速搞定,简单易学...
- 【运筹学】整数规划 ( 相关概念 | 整数规划 | 整数线性规划 | 整数线性规划分类 )
- 【网络安全】练习与复习十二
- C++动态规划入门习题+解析
- 华为云数字资产链,构建新型数字经济价值
- Dream it possible-我的2016