我正在编写一个程序来监视进程如何使用 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
我的问题是:
如何理解nvmlDeviceGetProcessUtilization返回的SmUtil?
基于SmUtil的概念,我认为nvmlDeviceGetProcessUtilization代表的是该进程的内核函数在GPU上占用的时隙相对于所有时隙的采样概率。