Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengukur Tempoh Pelaksanaan Pemproses dan Masa Nyata pada Linux dan Windows?

Bagaimana Mengukur Tempoh Pelaksanaan Pemproses dan Masa Nyata pada Linux dan Windows?

Barbara Streisand
Barbara Streisandasal
2024-11-13 02:45:021049semak imbas

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

Cara Mengukur Tempoh Pelaksanaan Pemproses dan Masa Nyata pada Linux dan Windows

Menentukan CPU program dan tempoh pelaksanaan masa nyata adalah penting untuk pengoptimuman prestasi. Begini cara untuk mencapainya pada Linux dan Windows, menyokong kedua-dua seni bina x86 dan x86_64.

Pelaksanaan Fungsi dan Pengukuran Masa Jam Dinding

Untuk mengukur masa CPU yang dibelanjakan oleh anda fungsi dan masa jam dinding yang diperlukan untuk berjalan, gunakan yang berikut kod:

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";

Seni Bina Bebas Platform

Pendekatan pengukuran masa yang dibentangkan adalah bebas seni bina, bermakna ia boleh dilaksanakan dan memberikan hasil yang konsisten merentas seni bina pemproses yang berbeza .

Pelaksanaan

Berikut adalah serba boleh penyelesaian yang berfungsi untuk Windows dan Linux dalam kedua-dua C dan C :

//  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

Pelaksanaan Platform Khusus:

  • Windows:

    • Wall Time: Kaunter Prestasi
    • Masa CPU: GetProcessTimes()
  • Linux:

    • Wall Time: gettimeofday()
    • Masa CPU: clock()

Demonstrasi

Berikut ialah contoh mudah yang mempamerkan pelaksanaan:

#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;
}

Kod ini mengukur jam dinding dan masa CPU yang diambil oleh penjumlahan berangka hipotetikal.

Atas ialah kandungan terperinci Bagaimana Mengukur Tempoh Pelaksanaan Pemproses dan Masa Nyata pada Linux dan Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn