通常认为:一个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占用率计算方法相关推荐

  1. c语言程序会使cpu变高,用 C 语言写个程序,运行时,cpu占用率一直保持50%

    好记性不如烂笔头 --东西太多,脑子永远不够用 问题 用 C 语言写个程序,运行时,cpu占用率一直保持50% 解决方案 一看题目好眼熟!<编程之美>!然而已经记不清楚了,果然东西需要经常 ...

  2. CUDA: Occupancy(占用率)详解

    #CUDA: Occupancy(占用率)详解 占用率是指每个多处理器(Streaming Multiprocessor,SM)的活动线程束(warps)数量与实际的活动warps数量的比率. 高的占 ...

  3. 占用率_有问有答:任务管理器里面的GPU占用率到底是怎么算的?

    从总体上来说,Windows 10是一个好系统,虽然我们天天戏称它为"Bug 10",但不可否认的是,从立项以来,开发团队就一直在努力为它加入新的功能,其中有不少是相当实用的,比如 ...

  4. TensorFlow 显存占用率高 GPU利用率低

    文章目录 nvidia-smi指令 动态刷新GPU信息 显存占用高,但是CPU使用率低 回头再看 nvidia-smi指令 命令位置: 所以Path中添加环境变量: C:\Program Files\ ...

  5. 训练神经网络gpu占用率低,gpu为什么适合神经网络

    为什么Matlab训练神经网络用不了GPU . 可以用gpu加速训练,可以通过增加'useGPU'字段:train(net,P,T,'useGPU','yes');或先将数据集P,T通过函数Pgpu= ...

  6. java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

  7. 1709 ltsb 内存占用_有问有答:任务管理器里面的GPU占用率到底是怎么算的?

    从总体上来说,Windows 10是一个好系统,虽然我们天天戏称它为"Bug 10",但不可否认的是,从立项以来,开发团队就一直在努力为它加入新的功能,其中有不少是相当实用的,比如 ...

  8. Linux下如何查看高CPU占用率线程

    转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...

  9. IDEA的CPU占用率高问题解决方法

    前言:这段时间发现 IDEA 的 CPU 占用率猛涨,时不时就飙升到百分之7.80,使得敲代码的体验感十分不佳,在经过一番查找之后终于解决了问题,在此记录一下 IDEA的CPU占用率高问题解决方法 问 ...

最新文章

  1. 「JOISC 2016 Day 3」回转寿司
  2. solr异常--Expected mime type application/octet-stream but got text/html.
  3. getResource(String name)用法及源码分析
  4. unicode编码查询方法
  5. 如何把自己github博客配置到一个腾讯云购买的自定义域名上
  6. 蓝桥杯第六届国赛JAVA真题----切开字符串
  7. java map reduce 原理_MapReduce实现原理详解
  8. all方法 手写promise_我团队的一年前端实现Promise所有方法
  9. 马自达 3 为什么抛弃了触摸屏?
  10. 现代信号处理 张贤达_清华信号处理著名学者张贤达去世,享年74岁
  11. springboot结合mybatis连接数据库
  12. 川崎机器人f控制柜接线图_Kawasaki川崎机器人控制柜维修
  13. Thinkpadt450 win7下面禁用触摸板
  14. 微信小程序制作水印相机
  15. excel删除无尽空白行_批量删除空白行其实很简单,这3中方法都能快速搞定,简单易学...
  16. 【运筹学】整数规划 ( 相关概念 | 整数规划 | 整数线性规划 | 整数线性规划分类 )
  17. 【网络安全】练习与复习十二
  18. C++动态规划入门习题+解析
  19. 华为云数字资产链,构建新型数字经济价值
  20. Dream it possible-我的2016

热门文章

  1. Your Feedback Report at Adecco
  2. C++右值引用的参考
  3. linux下Eclipse+CDT开发环境配置与使用
  4. 系统无ifconfig,一条命令获取本机ip并将其赋值给指定变量来使用
  5. 第3章 简单爬虫架构
  6. JS获取浏览器高度 并赋值给类
  7. Linux dig
  8. NYOJ 5177 疯牛(最大化最小值 二分搜索)
  9. poj 1584(凸包+点在凸多边形内+圆在凸多边形内)
  10. PHP + mysql 对日期的操作