performance - 多内核性能分析(CUDA C)
问题描述
我有具有多个内核的 CUDA 程序在系列上运行(在同一个流中 - 默认一个)。我想对整个程序进行性能分析,特别是 GPU 部分。我正在使用 nvprof 工具使用一些指标进行分析,例如 completed_occupancy、inst_per_warp、gld_efficiency 等。
但是分析器分别为每个内核提供指标值,而我想为它们计算这些值以查看程序的 GPU 总使用量。我应该为每个指标取所有内核的(平均值或最大值或总数)吗?
解决方案
一种可能的方法是使用加权平均方法。
假设我们的时间轴中有 3 个不重叠的内核。假设内核 1 运行 10 毫秒,内核 2 运行 20 毫秒,内核 3 运行 30 毫秒。在我们的整个应用程序时间线中,所有 3 个内核总共占用了 60 毫秒。
我们还假设分析器报告 gld_efficiency 指标如下:
kernel duration gld_efficiency
1 10ms 88%
2 20ms 76%
3 30ms 50%
您可以按如下方式计算加权平均值:
88*10 76*20 50*30
"overall" global load efficiency = ----- + ----- + ----- = 65%
60 60 60
我相信可能还有其他有意义的方法。例如,更好的方法可能是让探查器报告每个内核的全局加载事务总数,并基于此而不是内核持续时间进行加权:
kernel gld_transactions gld_efficiency
1 1000 88%
2 2000 76%
3 3000 50%
88*1000 76*2000 50*3000
"overall" global load efficiency = ------- + ------- + ------- = 65%
6000 6000 6000
推荐阅读
- node.js - Firebase 托管的本地服务器导致 React 应用程序中频繁出现 HTTP 错误
- r - 在 3 因子分组图中重新排序
- here-api - HERE 从哪里获取他们的数据?
- python - 尝试添加第三个伺服
- python - Django Rest Framework 未显示 PATCH/PUT 请求的表单字段
- javascript - 系统从睡眠模式恢复后的 Javascript Promise 行为
- php - 使用 php 在电子邮件中发送表单字段
- python - 从 HTML .txt 文件中读取各个部分
- c++ - 如何从类似 SQL 的行中提取所有参数?
- kotlin - 如何在 Kotlin 的 WeakHashMap 上调用“放置”?