기본적으로 저는 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 솔루션을 검색할 때 결과는 셸 수준 응답으로 인해 혼동됩니다. 하지만 그 대신 내가 찾고 있는 것은 C
이 정보를 제공하는 인터페이스와 핸들의 헤더입니다.
cfgmgr32.h
Windows의 헤더와 유사한 목적을 제공하는 특정 Linux 헤더가 있습니까? 그렇지 않은 경우 이러한 헤더나 기능을 검색할 수 있는 검색 가능한 Linux 커널 리소스가 있습니까?
답변1
Linux에서는 이 정보를 다음에서 찾을 수 있습니다./proc/stat
cpu
라인, 일반적으로 거기에서 구문 분석됩니다. 동일한 정보를 제공하는 사용자 공간 액세스 기능이 없다고 생각합니다.
이 행의 값은 사용자 모드에서 소요된 시간, 낮은 우선순위 사용자 모드에서 소요된 시간, 시스템 모드에서 소요된 시간, 유휴 작업에서 소요된 시간 등을 제공합니다. 자세한 내용은 위 링크를 참조하세요.
예를 들어 함수를 사용하여 현재 프로세스 및/또는 해당 하위 프로세스에 대한 타이밍 정보를 검색할 수 있습니다.POSIXgetrusage
그리고times
.