> 백엔드 개발 > C++ > Linux 및 Windows에서 프로세서 및 실시간 실행 기간을 측정하는 방법은 무엇입니까?

Linux 및 Windows에서 프로세서 및 실시간 실행 기간을 측정하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-13 02:45:02
원래의
1096명이 탐색했습니다.

How to Measure Processor and Real-Time Execution Duration on Linux and Windows?

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:

    • 월 시간: 성능 카운터
    • CPU 시간: GetProcessTimes()
  • Linux:

    • 월 시간: gettimeofday()
    • CPU 시간: clock()

데모

다음은 구현을 보여주는 간단한 예입니다.

#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿