Linux 및 Windows에서 프로세서 및 실시간 실행 시간을 측정하는 방법
프로그램의 CPU와 실시간 실행 시간을 결정하는 것이 중요합니다. 성능 최적화를 위해. x86 및 x86_64 아키텍처를 모두 지원하는 Linux 및 Windows에서 이를 달성하는 방법은 다음과 같습니다.
함수 실행 및 벽시계 시간 측정
사용자가 소비한 CPU 시간을 측정하려면 함수 및 실행하는 데 걸리는 벽시계 시간을 확인하려면 다음 코드를 사용하세요.
int startcputime, endcputime, wcts, wcte; startcputime = cputime(); function(args); endcputime = cputime(); std::cout << "it took " << endcputime - startcputime << " s of CPU to execute this\n"; wcts = wallclocktime(); function(args); wcte = wallclocktime(); std::cout << "it took " << wcte - wcts << " s of real time to execute this\n";
플랫폼 독립적 아키텍처
제시된 시간 측정 접근 방식은 아키텍처 독립적입니다. , 이는 다양한 프로세서 아키텍처에서 구현되고 일관된 결과를 제공할 수 있음을 의미합니다.
구현
다음은 C와 C 모두에서 Windows 및 Linux에서 작동하는 다용도 솔루션입니다.
// Windows #ifdef _WIN32 #include <Windows.h> double get_wall_time(){ LARGE_INTEGER time, freq; if (!QueryPerformanceFrequency(&freq)){ // Handle error return 0; } if (!QueryPerformanceCounter(&time)){ // Handle error return 0; } return (double)time.QuadPart / freq.QuadPart; } double get_cpu_time(){ FILETIME a, b, c, d; if (GetProcessTimes(GetCurrentProcess(), &a, &b, &c, &d) != 0){ // Returns total user time. // Can be tweaked to include kernel times as well. return (double)(d.dwLowDateTime | ((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001; }else{ // Handle error return 0; } } // Linux #else #include <time.h> #include <sys/time.h> double get_wall_time(){ struct timeval time; if (gettimeofday(&time, NULL)){ // Handle error return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } double get_cpu_time(){ return (double)clock() / CLOCKS_PER_SEC; } #endif
특정 플랫폼 구현:
Windows:
Linux:
데모
다음은 구현을 보여주는 간단한 예입니다.
#include <math.h> #include <iostream> using namespace std; int main(){ // Start Timers double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); // Computational task (e.g., numerical summation). double sum = 0; #pragma omp parallel for reduction(+ : sum) for (long long i = 1; i < 10000000000; i++){ sum += log((double)i); } // Stop timers double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl; // Prevent code elimination (optimization). cout << endl; cout << "Sum = " << sum << endl; }
이 코드 가상의 수치 합을 통해 벽시계와 CPU 시간을 측정합니다.
위 내용은 Linux 및 Windows에서 프로세서 및 실시간 실행 기간을 측정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!