如何理解nvmlDeviceGetProcessUtilization返回的SmUtil?

问题描述 投票:0回答:1

我正在编写一个程序来监视进程如何使用 GPU,我发现了 nvml 提供的 API,nvmlDeviceGetProcessUtilization。

根据此 API 的注释,它读取运行进程中 GPU SM(3D/计算)、帧缓冲区、视频编码器和视频解码器的最新利用率。

我每隔10秒或1秒调用一次API并打印出样本,如下:

“ReadTime”表示我的程序调用 API 的时间。 “样本”是API返回的样本。

ReadTime:10:58:56.194 - 样本:[Pid:28128,时间戳:10:58:55.462519,SmUtil:05,MemUtil:01,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:28104,时间戳:10:58:55.127657,SmUtil:05,MemUtil:02,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:28084,时间戳:10:58:48.051124,SmUtil:03,MemUtil:01,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:28050,时间戳:10:58:53.944518,SmUtil:03,MemUtil:01,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27989,时间戳:10:58:47.043732,SmUtil:03,MemUtil:01,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27976,时间戳:10:58:53.604955,SmUtil:09,MemUtil:03,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27814,时间戳:10:58:48.386200,SmUtil:19,MemUtil:07,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27900,时间戳:10:58:56.132879,SmUtil:17,MemUtil:06,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27960,时间戳:10:58:51.423172,SmUtil:06,MemUtil:02,EncUtil:00,DecUtil:00] ReadTime:10:58:56.194 - 样本:[Pid:27832,时间戳:10:58:47.883811,SmUtil:21,MemUtil:08,EncUtil:00,DecUtil:00] SUM - GPUId:0,进程:10,smSum:91,memSum:32,encSum:0,decSum:0

我的问题是:

  1. 为什么这个API返回的样本中,无论我是每秒调用一次还是每10秒调用一次,每个进程只有一个样本?
  2. 每个样本中的时间戳似乎几乎不规则。 nvml如何确定采样时间?
  3. SmUtil是如何衍生的?根据nvml.h头文件中nvmlUtilization_st结构体的描述,它被nvmlDeviceGetUtilizationRates使用。 GPU 使用率是指“过去采样期间一个或多个内核在 GPU 上执行的时间百分比”。按照我的理解,就是即使GPU有多个核心,如果在一个时间片内只有GPU中的一个核心被占用,那么就认为整个CPU都被占用了。这个时间片作为分子来计算整个GPU的利用率。那么,如何理解nvmlDeviceGetProcessUtilization返回的进程的SmUtil呢?

如何理解nvmlDeviceGetProcessUtilization返回的SmUtil?

gpu nvidia utilization nvml
1个回答
0
投票

基于SmUtil的概念,我认为nvmlDeviceGetProcessUtilization代表的是该进程的内核函数在GPU上占用的时隙相对于所有时隙的采样概率。

© www.soinside.com 2019 - 2024. All rights reserved.