基本上,我正在使用 Nvidia 的新 github 存储库,并尝试在跨平台设置中编译它们。具体来说,我正在尝试在 Fedora 33 上编译它们。
我遇到了一个问题:
In file included from /home/chris/.../sample_example.cpp:55:
/home/chris/.../nvml_monitor.hpp:19:10: fatal error: cfgmgr32.h: No such file or directory
19 | #include <cfgmgr32.h>
| ^~~~~~~~~~~
这cfgmgr32.h
似乎是一个特定于 Windows 的库。
在该文件中nvml_monitor.hpp
,看起来我可以禁用大部分 Windows 内容。但是,我认为以下特定于 Windows 的函数将会很有用:
float getCpuLoad()
{
static uint64_t _previousTotalTicks = 0;
static uint64_t _previousIdleTicks = 0;
FILETIME idleTime, kernelTime, userTime;
GetSystemTimes(&idleTime, &kernelTime, &userTime);
auto FileTimeToInt64 = [](const FILETIME& ft) {
return (((uint64_t)(ft.dwHighDateTime)) << 32) | ((uint64_t)ft.dwLowDateTime);
};
auto totalTicks = FileTimeToInt64(kernelTime) + FileTimeToInt64(userTime);
auto idleTicks = FileTimeToInt64(idleTime);
uint64_t totalTicksSinceLastTime = totalTicks - _previousTotalTicks;
uint64_t idleTicksSinceLastTime = idleTicks - _previousIdleTicks;
float result = 1.0f - ((totalTicksSinceLastTime > 0) ? ((float)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0);
_previousTotalTicks = totalTicks;
_previousIdleTicks = idleTicks;
return result * 100.f;
}
我所寻找的不是任何人来“做这项工作”或任何东西——只是一个开始的地方或一个可以拉动的线索。
当在此问题空间中搜索 Linux 解决方案时,结果会被 shell 级响应混淆。但是,相反,我正在寻找的是C
提供此信息的接口和句柄的标头。
cfgmgr32.h
是否有任何特定的 Linux 标头与Windows 中的标头用途相似?如果没有,是否有可搜索的 Linux 内核资源来发现这些标头或功能?
答案1
在 Linux 中,此信息可在/proc/stat
的cpu
线,并且通常是从那里解析的 - 我认为没有一个用户空间可访问的函数可以提供相同的信息。
该行中的值给出了用户模式所花费的时间、低优先级用户模式所花费的时间、系统模式所花费的时间、空闲任务所花费的时间等;详情请参阅上面的链接。
函数可用于检索当前进程和/或其子进程的时间信息;例如POSIX 的getrusage
和times
。