Измерение времени выполнения кода

Для использования функции wtime() достаточно скопировать ее в свою программу и подключить заголовочный файл #include <sys/time.h>.

Функция wtime() возвращает текущее время в секундах (см. пример в функции main()).

#include <sys/time.h>
#include <stdio.h>

double wtime()
{
    struct timeval t;
    gettimeofday(&t, NULL);
    return (double)t.tv_sec + (double)t.tv_usec * 1E-6;
}

int main()
{
    double t;

    t = wtime();
    /* Code */
    t = wtime() - t;

    printf("Elapsed time: %.6f sec.\n", t);  
    return 0;
}

Измерение времени выполнения кода в тактах процессора (RDTSC)

Для использования функции gettsc() достаточно скопировать ее в свою программу и подключить заголовочный файл #include <inttypes.h>.

#include <inttypes.h>
#include <stdio.h>

/* gettsc: Returns value of Time Stamp Counter. */
uint64_t gettsc()
{
#if defined(__x86_64__)
    uint32_t low, high;

    __asm__ __volatile__(
        "xorl %%eax, %%eax\n"
        "cpuid\n"
        :::     "%rax", "%rbx", "%rcx", "%rdx"
    );
    __asm__ __volatile__(
        "rdtsc\n"
        : "=a" (low), "=d" (high)
    );                 
    return ((uint64_t)high << 32) | low;
#elif defined(__i386__)
    uint64_t val;

    __asm__ __volatile__(
        "xorl %%eax, %%eax\n"
        "cpuid\n"
        :::     "%eax", "%ebx", "%ecx", "%edx"
    );
    __asm__ __volatile__(
        "rdtsc\n"
        : "=A" (val)
    );
    return val;
#else
#    error "Unsupported platform"
#endif
}

int main()
{
    uint64_t ticks;

    ticks = gettsc();
    /* Code */
    ticks = gettsc() - ticks;

    printf("CPU ticks: %" PRIu64 "\n", ticks);
    return 0;
}