GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membuat pengatur waktu resolusi tinggi di Linux untuk mengukur kinerja program?

Lihat clock_gettime , yang merupakan antarmuka POSIX ke pengatur waktu resolusi tinggi.

Jika, setelah membaca halaman manual, Anda bertanya-tanya tentang perbedaan antara CLOCK_REALTIME dan CLOCK_MONOTONIC , lihat Perbedaan antara CLOCK_REALTIME dan CLOCK_MONOTONIC?

Lihat halaman berikut untuk contoh lengkapnya:http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/

#include <iostream>
#include <time.h>
using namespace std;

timespec diff(timespec start, timespec end);

int main()
{
    timespec time1, time2;
    int temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    for (int i = 0; i< 242000000; i++)
        temp+=temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl;
    return 0;
}

timespec diff(timespec start, timespec end)
{
    timespec temp;
    if ((end.tv_nsec-start.tv_nsec)<0) {
        temp.tv_sec = end.tv_sec-start.tv_sec-1;
        temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
    } else {
        temp.tv_sec = end.tv_sec-start.tv_sec;
        temp.tv_nsec = end.tv_nsec-start.tv_nsec;
    }
    return temp;
}

Untuk meringkas informasi yang disajikan sejauh ini, ini adalah dua fungsi yang diperlukan untuk aplikasi biasa.

#include <time.h>

// call this function to start a nanosecond-resolution timer
struct timespec timer_start(){
    struct timespec start_time;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
    return start_time;
}

// call this function to end a timer, returning nanoseconds elapsed as a long
long timer_end(struct timespec start_time){
    struct timespec end_time;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
    long diffInNanos = (end_time.tv_sec - start_time.tv_sec) * (long)1e9 + (end_time.tv_nsec - start_time.tv_nsec);
    return diffInNanos;
}

Berikut adalah contoh cara menggunakannya dalam mengatur waktu berapa lama waktu yang dibutuhkan untuk menghitung varian dari daftar masukan.

struct timespec vartime = timer_start();  // begin a timer called 'vartime'
double variance = var(input, MAXLEN);  // perform the task we want to time
long time_elapsed_nanos = timer_end(vartime);
printf("Variance = %f, Time taken (nanoseconds): %ld\n", variance, time_elapsed_nanos);

Linux
  1. Cara Mengukur Kinerja di Server VPS Linux Anda

  2. Cara membuat paket RPM Linux

  3. Cara Membuat File Proc Linux di Program C menggunakan LKM

  1. Cara Membuat Script Perintah Linux

  2. Cara Membuat Swap di Linux

  3. Cara membuat layanan Systemd di Linux

  1. Buat pengatur waktu di Linux

  2. Cara membuat file swap di Linux

  3. Cara Membuat Thread di Linux (Dengan Program Contoh C)