2009-04-24 24 views
9

Yüksek Performanslı Olay Zamanlayıcısını (HPET) bir profilleme aracı için çok yüksek hassasiyetli ölçümleri hızlı bir şekilde almak için kullanmak istiyorum. timeGetTime 1ms'de yeterli çözünürlük sağlamaz ve QueryPerformanceCounter okunduğumdan çok daha yavaştır. Sorunu araştırırken HPET'e rastladım, ama aslında nasıl elde edileceğine dair hiçbir örnek göremiyorum.HPET doğrudan Windows'ta erişilebilir mi?

Doğrudan bunu kullanabilir miyim (derleme iyi), yoksa zaten Win32 API'sinde yerleşik olarak bulunan multimedya/yüksek performanslı zamanlama araçlarına güvenmek zorunda mıyım?

+1

Bunu kullanmayı çok isterim, sanırım benim profilerimdeki aynı problemi yaşamak. – leppie

+0

Bu, ilgili gibi görünüyor: http://msdn.microsoft.com/en-us/magazine/cc163996.aspx –

+0

Başka bir güncelleme olarak: RDTSC ve 'QueryPerformanceCounter', sistem sabit olmayan bir temel frekansa sahip olduğunda güvenli değildir (sistem içinde hız aşımı). Windows, çarpık zamanlamalara yol açan durumlarda QPC frekansını ayarlayamaz. Bu durumlarda, HPET ve ACPI güvenilir bir zamanlayıcı için tek alternatiftir. ** Bu nedenle, bu soru açık ve cevapsız kalıyor. ** – Mysticial

cevap

-1

Etrafında kazarken this info buldum ve en uygun maliyetli yol gibi görünüyor. Meclisi kazmaya cesaret edince bunu deneyeceğim. :)

GÜNCELLEME benim profilcisine ile bu test etti. biraz daha hızlı olmasına rağmen, hala başka bir ton ton var gibi görünüyor :((Ben yeterli yararı olmadığı gibi zamanlama ile uğraşmadı)

+3

Hayır! RDTSC kullanmayın, çok çekirdekli makinelerde garip şeyler yapar. Her bir çekirdeğin kendi sayacına sahip olması, olumsuz zaman harcayan fonksiyonlar gibi efektler verebilir. Zaman damgası sayaçları her zaman senkronize değildir! Orada yapıldı, bunu yaptım. –

+0

Ve iş parçacığının kaydını tuttuğunu mu söylüyorsun? Bu farkı nasıl etkiler? – leppie

+1

İş parçacığının kaydını tutmak, sadece * bir sorunun * olmadığını, bir sorun olduğunu veya nasıl düzeltileceğini söyleyecektir. RDTSC'yi güvenle kullanmak için * iş parçacığını belirli bir çekirdeğe sabitlemelisiniz *. RDTSC farkını kullanıcı alanından çekirdekler arasında güvenli bir şekilde hesaplamanın bir yolu yoktur. –

1

Ayrıca HPET kullanmakla da ilgileniyorum Anladığım kadarıyla, QueryPerformanceCounter ve QueryPerformanceFrequency aslında HPET için sayaç ve saate erişiyor ve bu Windows XP altında çalışıyor (bkz., örneğin, http://www.geisswerks.com/ryan/FAQS/timing.html).

Zamanlama kodu kadar, bence QueryPerformanceCounter kullanarak aslında HPET tabanını oluşturan sayaca erişiyorsunuz ve bu işlem yonga kümesinde (işlemci yerine) mevcut.

+2

Anladığım kadarıyla, XP HPET'i desteklemiyor, bu nedenle QueryPerformanceCounter aslında RDTSC kullanıyor. –

+0

Tam açıklama için https://en.wikipedia.org/wiki/High_Precision_Event_Timer#cite_note-7 (bkz. "Kullanım ve uyumluluk" içindeki XP SP3'te not alın). Özetle, XP yazılım ve çeşitli donanımlarla "en iyi çaba" HPET _emulation_ kullanır. –

İlgili konular