2010-11-27 14 views
6

सटीक रूप से यह निर्धारित करते समय कि मेरे प्रोग्राम में एल्गोरिदम कितनी तेजी से चलता है, मैंने हमेशा क्वेरीरीफॉर्मेंस काउंटर() का उपयोग QueryPerformanceFrequency() के साथ किया है, हालांकि जब मैं कोर i5 का उपयोग कर रहा हूं तो क्या होता है/7 वास्तुकला?कोर i5/7 आर्किटेक्चर पर प्रोग्राम रनटाइम निर्धारित करना

क्या यह संभव है कि टर्बो बढ़ावा अचानक मेरा एल्गोरिथ्म के माध्यम से आधे रास्ते में लात होगा और अचानक मेरे प्रदर्शन टाइमर अब सही है क्योंकि मेरी घड़ी की आवृत्ति अब एक स्थिर है या यह वास्तव में कोई मुद्दा नहीं है? यदि यह एक मुद्दा है, तो एल्गोरिदम सही समय पर सही तरीके से क्या होगा?

+0

हां टर्बो बूस्ट किक कर सकते हैं। अच्छा अवलोकन :) – basarat

उत्तर

3

इसे बस रखने के लिए, हाँ, कुछ भी हो सकता है। आधुनिक सीपीयू का सिर्फ सादा वास्तविक दुनिया के प्रदर्शन को कठिन बनाने का अनुमान लगाता है। यह केवल नवीनतम इंटेल x86-64 सीपीयू तक ही सीमित नहीं है, यह 8 बिट पीआईसी माइक्रोकंट्रोलर, और सब कुछ के बीच समान रूप से लागू होता है।

इसके बारे में करने के लिए एकमात्र उचित बात सिर्फ परीक्षण करना है। असली वर्कलोड के लिए वास्तविक हार्डवेयर पर वास्तविक रन-टाइम प्रदर्शन के बारे में सटीक विचार प्राप्त करने के लिए आपको कई बार दोहराए गए परीक्षण करने की आवश्यकता होगी।

दूसरी ओर, यदि एक एल्गोरिदम एक ही हार्डवेयर ("मेरी मशीन पर") पर दूसरे से बेहतर प्रदर्शन करता है तो यह आमतौर पर अन्य सेटअप पर समान तुलनात्मक परिणाम देगा, हालांकि यह निरंतर कारक से भिन्न हो सकता है।

+0

तो वास्तव में मुझे सीपीयू चक्रों की औसत संख्या को देखना चाहिए जो एक एल्गोरिदम प्रक्रिया को आवृत्ति से विभाजित करने और नैनोसेकंड में एक समय प्राप्त करने के बजाय लिया गया था? – Faken

+0

Boost.Date_Time से: लंबे कुल_नॉज़ेकंड्स() किसी भी शेष अंक – Hank

+0

फेंकने वाले नैनोसेकंड की कुल संख्या प्राप्त करें: आपको वास्तव में केवल उस मूल इकाई के बारे में सोचना चाहिए जिसे आप माप रहे हैं। यदि समय समारोह नैनोसेकंद देता है, तो यही आपको विचार करना चाहिए। किसी भी अतिरिक्त gyrations के माध्यम से जाने में कोई बात नहीं है क्योंकि वे आसानी से जानकारीपूर्ण नहीं हैं। – SingleNegationElimination

2

यहाँ QueryPerformanceCounter के विषय पर एक दिलचस्प लेख है: जाहिर है

http://www.virtualdub.org/blog/pivot/entry.php?id=106

, VirtualDub दोस्त उसका उपयोग बंद कर, और अब timeGetTime के पक्ष में है। एक अच्छा पढ़ा।

मैं Boost.Date_Time, विशेष रूप से बढ़ावा :: posix_time सामान का उपयोग करें।

1

वहाँ वास्तव में दो अलग-अलग यहाँ मुद्दे हैं:

  1. किसी भी समय विधि की विश्वसनीयता जब सीपीयू घड़ी आवृत्ति परिवर्तन (या तो जैसे टर्बो बूस्ट के माध्यम से बढ़ रही है या जैसे बिजली की बचत या थर्मल प्रबंधन में लात की वजह से कम हो रही) - यह कुछ अन्य उत्तरों में संबोधित किया गया है

  2. बेंचमार्क माप की विश्वसनीयता (विश्वसनीय घड़ी दी गई) - यह अधिक समस्याग्रस्त है - यदि आप अनुकूलन पर काम कर रहे हैं और छोटे सुधारों की तलाश में हैं, उदाहरण के लिए लगभग 10%, तो अल में टर्बो बूस्ट से घड़ी विविधता के प्रभाव से गुमराह करना आसान है। संभावित समाधान हैं:

    2.1। टर्बो बूस्ट और अन्य घड़ी आवृत्ति स्केलिंग

    2.2 अक्षम करें। एक काफी लंबे समय से समय के लिए प्रदर्शित मानक क्लॉक स्पीड विविधताओं

1

QPC के लिए समय स्रोत परंपरागत रूप से घड़ी आवृत्ति से प्राप्त कभी नहीं था बाहर औसत करने के लिए। हालांकि, मदरबोर्ड निर्माता एक पैसा या दो बंद करने की कोशिश कर रहे हैं, हालांकि कोनों को काट रहे हैं। वे आमतौर पर चिप्ससेट के अंदर से आवृत्ति को चुनते हैं। मैंने किसी की एएमडी मशीन के बारे में सुना है जिसमें 2 गीगाहर्ट्ज का क्यूपीएफ वैल्यू था, जो गुणा करने के बाद सीपीयू घड़ी के लिए खतरनाक रूप से उस मूल्य के करीब था। अगर आपको ऐसा बड़ा मूल्य मिलता है तो केवल घबराओ।

क्यूपीसी का पूर्ण मूल्य कभी आपकी चिंता न हो। यह कोर की गुणवत्ता पर भारी निर्भर करेगा। अपने कोड में वृद्धिशील सुधारों को देखने के लिए केवल क्यूपीसी माप का उपयोग करें।

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