Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

sexta-feira, 28 de março de 2008

Monitorando tempo de execução de uma função

Esse macete eu achei especialmente útil na hora de estudar o desempenho dos diversos algoritmos de ordenação. Aprendi no "Advanced Programming in the UNIX Environment" (Stevens e Rago), no Seção 8.16.

Vamos direto à prática, para detalhes é necessário consultar o livro e/ou as man pages.

Primeiro temos que criar a seguinte função para imprimir o tempo:


#include <unistd.h>

static void imprimetempo(clock_t tempo) {
    static long clktck = 0;

    if(clktck == 0)
        if((clktck = sysconf(_SC_CLK_TCK)) < 0)
            perror("sysconf");

    printf("%7.2f s", tempo / (double) clktck);
}


E para que esta função seja útil temos que chamá-la de maneira análoga ao exemplo abaixo:


#include <sys/times.h>

int main() {
    clock_t ini, fim;
    .
    .
    .
    ini = times(NULL);
    funcao_que_quero_ver_quanto_tempo_leva(argumentos);
    fim = times(NULL);

    printf("Tempo que levou: ");
    imprimetempo(fim - ini);
    .
    .
    .
    return 0;
}

Nenhum comentário:

tags