độ phân giải cao, Thời gian trên cao thấp cho các bộ xử lý Intel
Nếu bạn đang ở trên phần cứng Intel, đây là cách để đọc CPU real-time hướng dẫn truy cập. Nó sẽ cho bạn biết số chu trình CPU được thực thi vì bộ vi xử lý đã được khởi động. Đây có lẽ là bộ đếm hạt tốt nhất mà bạn có thể nhận được để đo lường 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 sang một đôi là khá tiện dụng.
Khi tôi chạy trên hộp của tôi, tôi nhận được
11867927879484732
11867927879692217
it took this long to call printf: 207485
Đây là Intel developer's guide mà cho phép tấn chi tiết.
#include <stdio.h> // stackoverflow bug: pre tag eats the filenames,
#include <stdint.h> // so i had to put spaces in the angle brackets
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);
}
Nguồn
2008-09-22 20:52:18
Lệnh RDTSC không được khuyến khích vì nó có thể cho kết quả không chính xác nếu CPU chuyển sang chế độ ngủ và không tạo kết quả nhất quán giữa các lõi của hệ thống đa lõi. –
Những vấn đề đó cũng áp dụng cho QueryPerformanceTimer - http://www.virtualdub.org/blog/pivot/entry.php?id=106 – yrp
QueryPerformanceCounter() trên Vista với HPET không có những vấn đề này, cũng như không XP với/USEPMTIMER. AMD cung cấp trình điều khiển bộ vi xử lý để cải thiện đồng bộ hóa QPC() trên XP. Sử dụng RDTSC trực tiếp ngăn cản bạn hưởng lợi từ bất kỳ cải tiến nào trong số này. – bk1e