【问题标题】:how to find the active SMs?如何找到活跃的SM?
【发布时间】:2013-02-14 11:23:00
【问题描述】:

有什么方法可以让我知道空闲/活跃 SM 的数量?或者至少读取每个 SM 的电压/功率或温度值,我可以通过它知道它是否工作? (在 gpu 设备上执行某些作业时实时)。

%smid 帮助我知道了每个 SM 的 ID。类似的东西会有所帮助。

感谢和问候, 拉克什

【问题讨论】:

  • 如果你有源代码的访问权限,你可以通过%smid找到活跃SM的数量。

标签: cuda gpgpu nvidia ptx


【解决方案1】:

CUDA 分析工具接口 (CUPTI) 包含一个事件 API,可以对 GPU PM 计数器进行运行时采样。 CUPTI SDK 作为 CUDA 工具包的一部分提供。有关采样的文档可以在 CUPTI 事件 API \Sampling Events 部分找到。

以下一个或多个计数器可以让您更好地了解 SM 活动:

  • active_cycles:多处理器至少有一个活动 warp 的周期数。
  • active_warps:每个周期的累计活动扭曲数。对于每个循环,它都会增加循环中活动扭曲的数量 可以在 0 到 {48,64} 的范围内。

【讨论】:

  • 谢谢。这是非常有帮助的。但我需要更多的澄清。假设一个 CUDA 应用程序正在运行,它占用 14 个 SM 中的 2 个,例如 50 秒。 (我可以使用 nvprof 进行检查。但 nvprof 最后给出了 active_cycles 或 active_warps 结果)。如果我开发另一个分析应用程序,通过使用 CUPTI API,是否可以与 CUDA 应用程序同时运行它,并知道并记录 CUDA 应用程序在第 5 秒、第 10 秒等使用的 SM 数量?
  • 是的。请阅读文档并重新查看 {CUDA Toolkit}\extras\CUPTI\sample\event_sampling 中的示例。该示例以 200 Hz 的频率查询后台线程上的计数器。您可能应该以大于 2^32 / gpu_core_clock_frequency / log2(max_event_increment) 的频率查询,否则某些计数器会溢出。
  • 我浏览了 event_sampling 代码。他们在同一个程序中使用了两个线程,其中一个负责采样工作。我的情况不同。我希望使用 CUPTI API 的分析应用程序在我要求的那一刻向我查询和显示结果(SM 状态、active_cycles 或 active_warps 就可以了);就像 nvidia-smi 一样。这应该独立于已在 GPU 上作为通用应用程序运行的后台进程。
  • [continuing..] 这意味着,已经在 GPU 上运行的应用程序和我的分析应用程序是两个不同的进程,因此属于不同的上下文。但是在我查询的那一刻,我的分析应用程序应该与后台用户应用程序同时运行几毫秒,然后立即向我显示结果。当我的分析应用程序运行时,用户应用程序也不应该停止。
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多