STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Đo Lường Thời Gian Thực Thi Của Hàm trong C++

    Cách thức đo thời gian thực thi của hàm trong C/C++ để ước lượng hiệu suất của chương trình.
    03/11/2020 04/11/2020 3 phút đọc
    Đo Lường Thời Gian Thực Thi Của Hàm trong C++

    Để nắm được hiệu suất của chương trình hoặc 1 đoạn chương trình, cần đo lường thời gian thực thi của một hàm hay 1 đoạn chương trình, điển hình nhất là ở các thuật toán xử lý nhiều dữ liệu như thuật toán sắp xếp, xử lý nhiều pixels của frame trong video.

    Thư viện time.h trong C/C++ có hỗ trợ lấy được thời gian, từ đó có thể dùng để tính toán đo lường thời gian thực thi của hàm.

    Thư viện sử dụng

    Thư viện time.h là một thư viện được xây dựng sẵn trong C/C++ và thường sử dụng để tính toán thời gian. Trong C/C++ để sử dụng thư viện này cần include thư viện này vào những file cần dùng.

    #include <time.h>

    Cấu trúc dữ liệu và hàm trong time.h

    • clock(): hàm trả về số tick từ khi chương trình được chạy.
    • clock_t: kiểu dữ liệu mà hàm clock() trả về, clock_t là kiểu định nghĩa lại của unsinged long.
    #ifndef _CLOCK_T
    #define _CLOCK_T
    typedef __darwin_clock_t clock_t;
    #endif /* _CLOCK_T */

    typedef unsigned long __darwin_clock_t; /* clock() */

    Macro CLOCKS_PER_SEC là giá trị tích tắc đồng hồ trên 1 giây (number of clock ticks per second), trong hệ thống 32-bit được định nghĩa như sau:

    #define CLOCKS_PER_SEC  1000000    /* [XSI] */

    Sử dụng thư viện time.h để đo thời gian thực thi của hàm

    Ý tưởng:

    • Lấy thời gian trước khi gọi hàm - start = clock().
    • Gọi hàm.
    • Lấy thời gian sau khi gọi hàm - end = clock().
    • Tính hiệu của endstart.
    #include <time.h>
    
    clock_t start, end;
    double duration;
    
    start = clock();
    … /* Do the work. */
    end = clock();
    duration = ((double) (end - start)) / CLOCKS_PER_SEC;

    Lấy duration chia cho macro CLOCKS_PER_SEC.

    Code mẫu đo thời gian thực thi của thuật toán

    Đo thời gian thực thi của thuật toán Interchange Sort.

    Interchange Sort

    //
    //  main.c
    //  time
    //
    //  Created by NguyenNghia on 10/25/16.
    //  Copyright © 2016 nguyennghia. All rights reserved.
    //
    
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    void swap(int *num1, int *num2) {
        int temp;
        temp = *num1;
        *num1 = *num2;
        *num2 = temp;
    }
    
    int randomElementInArray(int a, int b){
       return a + rand() % (b - a + 1);
    }
    
    
    void interchangeSort(int *arr, int n){
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < n; j++) {
                if(arr[j] > arr[i]){
                    swap(&arr[j], &arr[i]);
                }
            }
        }
    }
    
    void printArray(int* arr, int n){
        for (int i = 0; i < n; i++) {
            printf("%d\t", arr[i]);
        }
        printf("\n");
    }
    
    int main(int argc, const char * argv[]) {
    
        
        clock_t start, end;
        double duration;
        
        int n = 9999;
        // init data
        int *arr = (int*)malloc(n);
        for (int i = 0; i < n; i++) {
            arr[i] = randomAlementInArray(0, n);
        }
        
        start = clock();
        interchangeSort(arr, n);
        end = clock();
        duration = (double)(end - start) / CLOCKS_PER_SEC;
        printf("interchangeSort take %f seconds", duration);
        
        printArray(arr, n);
        
        return 0;
    }

    * Xem nguồn bài viết: https://eitguide.net/cach-do-thoi-gian-thuc-thi-cua-mot-function-trong-cc/

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021