2009-04-24 5 views
9

मैं एक रूपरेखा उपकरण के लिए उच्च निष्पादन घटना टाइमर (HPET) का उपयोग करने के लिए जल्दी से बहुत ही उच्च परिशुद्धता माप लेना चाहते हैं। टाइम गेटटाइम 1 एमएमएस पर पर्याप्त रिज़ॉल्यूशन प्रदान नहीं करता है, और QueryPerformanceCounter जितना चाहें उतना धीमा प्रति पठन है। मैं समस्या का शोध करते समय एचपीईटी में आया, लेकिन मैं वास्तव में इसे प्राप्त करने के तरीके के किसी भी नमूने नहीं देख सकता।क्या एचपीईटी विंडोज में सीधे पहुंच योग्य है?

तो मैं यह सीधे (विधानसभा ठीक है) का उपयोग करें, या मैं पहले से ही Win32 एपीआई में निर्मित मल्टीमीडिया/उच्च निष्पादन समय उपकरणों का सहारा लेना पड़ कर सकता है?

+1

मुझे इसका भी उपयोग करना अच्छा लगेगा, जैसा कि मुझे लगता है कि मैं मेरे प्रोफाइलर में एक ही समस्या का सामना करना पड़ता है। – leppie

+0

यह लगता संबंधित: http://msdn.microsoft.com/en-us/magazine/cc163996.aspx –

+0

एक और अद्यतन के रूप में: RDTSC और 'QueryPerformanceCounter' जब सिस्टम एक गैर निरंतर आधार आवृत्ति है उपयोग करने के लिए सुरक्षित नहीं हैं (सिस्टम के भीतर overclocking)। विंडोज उन मामलों में क्यूपीसी आवृत्ति को समायोजित करने में विफल रहता है जो समयबद्ध समय की ओर जाता है। उन मामलों में, एचपीईटी और एसीपीआई विश्वसनीय टाइमर के लिए एकमात्र विकल्प बने रहते हैं। ** इसलिए, यह प्रश्न खुला और अनुत्तरित रहता है। ** – Mysticial

उत्तर

-1

जबकि चारों ओर से खुदाई मैं this info पाया, और ऐसा लगता है कि यह सबसे अधिक लागत प्रभावी तरीका हो सकता है। जब मैं असेंबली में खोदने के लिए हिम्मत प्राप्त करता हूं तो मैं इसे आज़माउंगा। :)

अद्यतन

मैं अपने प्रोफाइलर के साथ इस परीक्षण किया गया। हालांकि थोड़ा तेज़, ऐसा लगता है कि मेरे पास अभी भी अन्य ओवरहेड टन है :((मुझे समय के साथ परेशान नहीं था क्योंकि मुझे पर्याप्त लाभ नहीं लग रहा था)

+3

नहीं! आरडीटीएससी का प्रयोग न करें, यह मल्टीकोर मशीनों पर अजीब चीजें करेगा। प्रत्येक कोर का अपना काउंटर होने पर प्रभाव नकारात्मक समय लेने वाले कार्यों जैसे प्रभाव दे सकते हैं। टाइमस्टैम्प काउंटर हमेशा सिंक में नहीं होते हैं! वहां गया, ऐसा किया। –

+0

और कहें कि आप धागे का ट्रैक रखते हैं? इससे अंतर कैसे प्रभावित हो सकता है? धागे की – leppie

+1

रखते हुए ट्रैक सिर्फ आपको बताएगा कि वहाँ * हो सकता है * एक समस्या हो, नहीं अगर वहाँ * * कोई समस्या है या इसे ठीक करने के लिए है। आरडीटीएससी का सुरक्षित रूप से उपयोग करने के लिए * आपको थ्रेड को एक विशिष्ट कोर पर पिन करना होगा। उपयोगकर्ताओं के स्थान से कोर में आरडीटीएससी अंतर को सुरक्षित रूप से गणना करने का कोई तरीका नहीं है। –

1

मुझे एचपीईटी का उपयोग करने में भी रूचि है, लेकिन एक के रूप में टाइमर। जिस तरह से मैं इसे समझते हैं, QueryPerformanceCounter और QueryPerformanceFrequency वास्तव में HPET के लिए काउंटर और घड़ी तक पहुँच रहे हैं, और यह Windows XP के तहत काम करता है (देखें उदाहरण के लिए, http://www.geisswerks.com/ryan/FAQS/timing.html)।

तो जहाँ तक समय कोड के रूप में, मुझे लगता है QueryPerformanceCounter का उपयोग करके आप वास्तव में काउंटर तक पहुंच प्राप्त कर रहे हैं जो एचपीईटी का आधार बनता है, और यह चिपसेट (प्रोसेसर की बजाय) में मौजूद है।

+2

जैसा कि मैं समझता हूं, एक्सपी एचपीईटी का समर्थन नहीं करता है, इसलिए QueryPerformanceCounter वास्तव में RDTSC का उपयोग कर रहा है। –

+0

पूरी जानकारी के लिए ("का प्रयोग करें और संगतता" में XP SP3 पर टिप्पणी) देखें https://en.wikipedia.org/wiki/High_Precision_Event_Timer#cite_note-7। संक्षेप में, एक्सपी सॉफ्टवेयर और विभिन्न हार्डवेयर के साथ "सर्वश्रेष्ठ प्रयास" एचपीईटी _emulation_ का उपयोग करता है। –

संबंधित मुद्दे