gettimeofday () có thể sẽ làm những gì bạn muốn.
Nếu bạn đang sử dụng phần cứng Intel, đây là cách đọc bộ đếm lệnh thời gian thực của CPU. Nó sẽ cho bạn biết số chu kỳ CPU được thực thi kể từ khi bộ xử lý được khởi động. Đây có lẽ là bộ đếm chi phí thấp nhất, chi tiết nhất mà bạn có thể nhận được để đo hiệu suất.
Lưu ý rằng đây là số chu kỳ CPU. Trên linux, bạn có thể lấy tốc độ CPU từ / proc / cpuinfo và chia để lấy số giây. Chuyển đổi này thành một đôi khá tiện dụng.
Khi tôi chạy điều này trên hộp của mình, tôi nhận được
11867927879484732
11867927879692217
mất nhiều thời gian để gọi printf: 207485
Đây là hướng dẫn của nhà phát triển Intel cung cấp rất nhiều chi tiết.
#include <stdio.h>
#include <stdint.h>
inline uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax, %%eax\n"
"cpuid\n"
"rdtsc\n"
: "=a" (lo), "=d" (hi)
:
: "%ebx", "%ecx");
return (uint64_t)hi << 32 | lo;
}
main()
{
unsigned long long x;
unsigned long long y;
x = rdtsc();
printf("%lld\n",x);
y = rdtsc();
printf("%lld\n",y);
printf("it took this long to call printf: %lld\n",y-x);
}