2009-04-24 42 views
9

Tôi muốn sử dụng Bộ hẹn giờ sự kiện hiệu suất cao (HPET) cho công cụ định hình để thực hiện các phép đo chính xác rất nhanh, nhanh chóng. timeGetTime không cung cấp đủ độ phân giải ở 1ms và QueryPerformanceCounter chậm hơn nhiều lần đọc hơn tôi muốn. Tôi đã gặp HPET trong khi nghiên cứu vấn đề, nhưng tôi không thể thấy bất kỳ mẫu nào về cách thực sự đạt được nó.HPET có thể truy cập trực tiếp trong Windows không?

Vì vậy, tôi có thể sử dụng nó trực tiếp (lắp ráp là tốt), hoặc tôi phải dựa vào các công cụ thời gian đa phương tiện/hiệu suất cao đã được xây dựng vào API Win32?

+1

Tôi rất thích sử dụng nó quá, như tôi đoán tôi chịu cùng một vấn đề trong hồ sơ của tôi. – leppie

+0

Điều này có vẻ liên quan: http://msdn.microsoft.com/en-us/magazine/cc163996.aspx –

+0

Là bản cập nhật thêm: RDTSC và 'QueryPerformanceCounter' không an toàn khi sử dụng khi hệ thống có tần số cơ sở không cố định (ép xung trong hệ thống). Windows không điều chỉnh tần số QPC trong những trường hợp dẫn đến thời gian lệch. Trong những trường hợp đó, HPET và ACPI vẫn là lựa chọn thay thế duy nhất cho một bộ đếm thời gian đáng tin cậy. ** Do đó, câu hỏi này vẫn mở và chưa được trả lời. ** – Mysticial

Trả lời

-1

Tôi tìm thấy this info khi đang tìm kiếm xung quanh, và có vẻ như đó có thể là cách hiệu quả nhất về chi phí. Tôi sẽ thử nó khi tôi có được can đảm để đào sâu vào lắp ráp. :)

CẬP NHẬT

Tôi thử nghiệm này với hồ sơ của tôi. mặc dù một chút nhanh hơn, có vẻ như tôi vẫn còn tấn hàng đầu khác: (Tôi không bận tâm với thời gian như tôi nó dường như không đủ lợi ích)

+3

Không! Không sử dụng RDTSC, nó sẽ làm những điều kỳ lạ trên các máy đa lõi. Mỗi lõi có bộ đếm riêng của nó có thể tạo ra các hiệu ứng như các hàm có thời gian âm ect. Các quầy Timestamp không phải lúc nào cũng đồng bộ! Đã ở đó, đã thực hiện điều đó. –

+0

Và nói rằng bạn theo dõi các chủ đề? Làm thế nào điều đó có thể ảnh hưởng đến sự khác biệt? – leppie

+1

Việc theo dõi chuỗi sẽ chỉ cho bạn biết rằng có * có thể * là sự cố, không phải nếu có * là sự cố hoặc cách khắc phục. Để sử dụng RDTSC một cách an toàn, bạn * phải * ghim luồng vào một lõi cụ thể. Không có cách nào để tính toán một cách an toàn sự khác biệt RDTSC giữa các lõi từ không gian người dùng. –

1

Tôi cũng quan tâm đến việc sử dụng HPET, nhưng như một Cách tôi hiểu nó, QueryPerformanceCounter và QueryPerformanceFrequency đang thực sự truy cập vào truy cập và đồng hồ cho HPET, và điều này hoạt động dưới Windows XP (xem, ví dụ, http://www.geisswerks.com/ryan/FAQS/timing.html). bằng cách sử dụng QueryPerformanceCounter bạn đang trong thực tế nhận được quyền truy cập vào các truy cập hình thành cơ sở của HPET, và điều này là tất cả hiện diện trong chipset (chứ không phải là bộ vi xử lý)

+2

Theo tôi hiểu, XP KHÔNG hỗ trợ HPET, vì vậy QueryPerformanceCounter thực sự đang sử dụng RDTSC. –

+0

Xem https://en.wikipedia.org/wiki/High_Precision_Event_Timer#cite_note-7 (lưu ý trên XP SP3 trong "Sử dụng và khả năng tương thích") để được giải thích đầy đủ. Tóm lại, XP sử dụng một "nỗ lực tốt nhất" HPET _emulation_ với phần mềm và phần cứng khác nhau. –

Các vấn đề liên quan