Rumah > Artikel > pembangunan bahagian belakang > Bagaimana Mengukur Tempoh Pelaksanaan Pemproses dan Masa Nyata pada Linux dan 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:
Linux:
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!