प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
 
(8 intermediate revisions by 4 users not shown)
Line 2: Line 2:
{{more citations needed|date=January 2009}}
{{more citations needed|date=January 2009}}
{{Software development process|Tools}}
{{Software development process|Tools}}
[[सॉफ्टवेयर इंजीनियरिंग]] में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या [[कम्प्यूटेशनल जटिलता सिद्धांत|समय की जटिलता]], विशेष [[निर्देश सेट सिम्युलेटर|निर्देशों]] का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, [[प्रदर्शन इंजीनियरिंग|निष्पादन इंजीनियरिंग]] में सहायता करने के लिए कार्य करती है।
[[सॉफ्टवेयर इंजीनियरिंग]] में, प्रोफाइलिंग (रूपरेखा) ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या [[कम्प्यूटेशनल जटिलता सिद्धांत|समय की जटिलता]], विशेष [[निर्देश सेट सिम्युलेटर|निर्देशों]] का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, [[प्रदर्शन इंजीनियरिंग|निष्पादन इंजीनियरिंग]] में सहायता करने के लिए कार्य करती है।


प्रोफाइलिंग को [[इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग)|यंत्र]] द्वारा प्रोग्राम [[सोर्स कोड]] या इसके बाइनरी साध्य (एक्जीक्यूटेबल) रूप को एक ''प्रोफाइलर'' (या ''कोड प्रोफाइलर'') नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, यंत्रीकृत और अनुकरण के तरीके।
प्रोफाइलिंग को [[इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग)|यंत्र]] द्वारा प्रोग्राम [[सोर्स कोड|स्रोत कोड]] या इसके बाइनरी साध्य (एक्जीक्यूटेबल) रूप को एक ''प्रोफाइलर'' (या ''कोड प्रोफाइलर'') नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, यंत्रीकृत और अनुकरण के तरीके।


== प्रोग्राम की घटनाओं का संग्रहण ==
== प्रोग्राम की घटनाओं का संग्रहण ==
Line 10: Line 10:


== प्रोफाइलर्स का उपयोग ==
== प्रोफाइलर्स का उपयोग ==
[[File:CodeAnalyst3.png|thumb|[[CodeAnalyst]] प्रोफाइलर का ग्राफिकल आउटपुट।]]
[[File:CodeAnalyst3.png|thumb|[[CodeAnalyst|कोड एनालिस्ट]] प्रोफाइलर का ग्राफिकल आउटपुट।]]
{{quotation|
{{quotation|प्रोग्राम के व्यवहार को समझने के लिए प्रोग्राम विश्लेषण उपकरण अत्यंत महत्वपूर्ण हैं। नए आर्किटेक्चर पर प्रोग्राम कितना अच्छा प्रदर्शन करेंगे, इसका मूल्यांकन करने के लिए  [[कंप्यूटर आर्किटेक्ट्स|आर्किटेक्चर]] को ऐसे उपकरणों की आवश्यकता होती है। सॉफ़्टवेयर लेखकों को अपने प्रोग्राम का विश्लेषण करने और कोड के महत्वपूर्ण अनुभागों की पहचान करने के लिए उपकरणों की आवश्यकता होती है। [[संकलक]] लेखक प्रायः ऐसे उपकरणों का उपयोग यह पता लगाने के लिए करते हैं कि उनका [[निर्देश निर्धारण]] या [[शाखा भविष्यवाणी]] एल्गोरिथ्म कितना अच्छा प्रदर्शन कर रहा है ...| परमाणु, पीएलडीआई, '94||}}
Program analysis tools are extremely important for understanding program behavior. Computer architects need such tools to evaluate how well programs will perform on new [[computer architecture|architectures]]. Software writers need tools to analyze their programs and identify critical sections of code. [[Compiler]] writers often use such tools to find out how well their [[instruction scheduling]] or [[branch prediction]] algorithm is performing...|ATOM|[[Conference on Programming Language Design and Implementation|PLDI]]|'94}}
एक प्रोफाइलर का आउटपुट हो सकता है:


* देखी गई घटनाओं का एक सांख्यिकीय सारांश (एक 'प्रोफाइल')
एक प्रोफाइलर का आउटपुट हो सकता है-
:सारांश प्रोफ़ाइल जानकारी को अक्सर स्रोत कोड स्टेटमेंट के खिलाफ एनोटेट किया जाता है जहां घटनाएं होती हैं, इसलिए माप डेटा का आकार प्रोग्राम के कोड आकार के लिए रैखिक होता है।


/* ------------ स्रोत------------------------ गिनती */
* देखी गई घटनाओं का एक सांख्यिकीय सारांश (एक प्रोफ़ाइल) सारांश प्रोफ़ाइल जानकारी को प्रायः स्रोत कोड विवरण के विरुद्ध व्याख्या की जाती है जहां घटनाएं होती हैं, इसलिए माप डेटा का आकार प्रोग्राम के कोड आकार के लिए रैखिक होता है।
0001 अगर एक्स = ए 0055
/* ------------ स्रोत------------------------ गणना */
0002 तो करो
0003 XCOUNT 0032 में 1 जोड़ें
0004 अन्य
0005 अगर एक्स = बी 0055


* रिकॉर्ड की गई घटनाओं की एक धारा (एक 'ट्रेस')
0001        यदि  X = "A"                  0055
:अनुक्रमिक कार्यक्रमों के लिए, एक सारांश प्रोफ़ाइल आमतौर पर पर्याप्त होती है, लेकिन समानांतर कार्यक्रमों में प्रदर्शन की समस्याएं (संदेशों या सिंक्रनाइज़ेशन मुद्दों की प्रतीक्षा) अक्सर घटनाओं के समय के संबंध पर निर्भर करती हैं, इस प्रकार जो हो रहा है उसे समझने के लिए एक पूर्ण ट्रेस की आवश्यकता होती है।
: एक (पूर्ण) ट्रेस का आकार कार्यक्रम के [[निर्देश पथ की लंबाई]] के लिए रैखिक होता है, जिससे यह कुछ हद तक अव्यावहारिक हो जाता है। इसलिए एक कार्यक्रम में एक बिंदु पर एक निशान शुरू किया जा सकता है और आउटपुट को सीमित करने के लिए दूसरे बिंदु पर समाप्त किया जा सकता है।
* [[हाइपरविजर]] के साथ चल रही बातचीत (उदाहरण के लिए ऑन-स्क्रीन डिस्प्ले के माध्यम से निरंतर या आवधिक निगरानी)
: यह (अभी भी निष्पादित) कार्यक्रम के बारे में चल रहे मेट्रिक्स को देखने के अलावा निष्पादन के दौरान किसी वांछित बिंदु पर ट्रेस को चालू या बंद करने का अवसर प्रदान करता है। यह अन्य समानांतर प्रक्रियाओं के साथ अधिक विस्तार से बातचीत की जांच करने के लिए महत्वपूर्ण बिंदुओं पर अतुल्यकालिक प्रक्रियाओं को निलंबित करने का अवसर भी प्रदान करता है।


लंबे समय तक चलने वाले कोड को स्पष्ट करके प्रदर्शन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या मॉड्यूल या प्रोग्राम के पैमाने पर लागू किया जा सकता है।<ref>{{cite web| title=सी # डेस्कटॉप एप्लिकेशन में प्रदर्शन बाधा कैसे खोजें?| publisher=[[Stack Overflow]]| year=2012| url=https://stackoverflow.com/questions/13698674/how-to-find-the-performance-bottleneck-in-c-sharp-desktop-application}}</ref> विभिन्न रनटाइम स्थितियों को संभालने के लिए इसे अनुकूलित करने के उद्देश्य से, समय के दृष्टिकोण से कोड को समझने के लिए एक प्रोफाइलर का उपयोग किया जा सकता है<ref>{{cite web| last=Krauss| first=Kirk J| title=फोकस के साथ परफॉर्मेंस प्रोफाइलिंग| publisher=Develop for Performance| year=2017| url=http://www.developforperformance.com/PerformanceProfilingWithAFocus.html}}</ref> या विभिन्न भार।<ref>{{cite web| work=Stackify Developer Tips, Tricks and Resources| title=कोड प्रोफाइलिंग क्या है? कोड प्रोफाइलर्स के 3 प्रकार सीखें| publisher=Disqus| year=2016| url=https://stackify.com/what-is-code-profiling/}}</ref> प्रोफाइलिंग के परिणाम एक कंपाइलर द्वारा प्राप्त किए जा सकते हैं जो प्रोफाइल-निर्देशित अनुकूलन प्रदान करता है।<ref>{{cite web| last=Lawrence| first=Eric| work=testslashplain| title=प्रोफ़ाइल निर्देशित अनुकूलन के साथ आरंभ करना| publisher=WordPress| year=2016| url=https://textslashplain.com/2016/01/10/getting-started-with-profile-guided-optimization/}}</ref> प्रोफाइलिंग परिणामों का उपयोग व्यक्तिगत एल्गोरिथम के डिजाइन और अनुकूलन को निर्देशित करने के लिए किया जा सकता है; [[क्रॉस मैचिंग वाइल्डकार्ड एल्गोरिथम]] एक उदाहरण है।<ref>{{cite web| last=Krauss| first=Kirk| title=मैचिंग वाइल्डकार्ड: बिग डेटा के लिए एक बेहतर एल्गोरिथम| publisher=Develop for Performance| year=2018| url=http://www.developforperformance.com/MatchingWildcards_AnImprovedAlgorithmForBigData.html}}</ref> प्रोफाइलर्स कुछ एप्लिकेशन प्रदर्शन प्रबंधन प्रणालियों में बनाए गए हैं जो वितरित कंप्यूटिंग अनुप्रयोगों में लेनदेन प्रसंस्करण वर्कलोड में अंतर्दृष्टि प्रदान करने के लिए प्रोफाइलिंग डेटा एकत्र करते हैं।<ref>{{cite web| work=Stackify Developer Tips, Tricks and Resources| title=.नेट प्रोफाइलरों की सूची: 3 विभिन्न प्रकार और आपको उन सभी की आवश्यकता क्यों है| publisher=Disqus| year=2016| url=https://stackify.com/three-types-of-net-profilers/}}</ref>
0002          तो करें


0003            X गणना में 1 जोड़े        0032


0004            अतिरिक्त
0005        यदि  X = "B"              0055
* रिकॉर्ड की गई घटनाओं का स्रोत (एक अनुरेख)
:अनुक्रमिक प्रोग्रामों के लिए, एक सारांश प्रोफ़ाइल प्रायः पर्याप्त होती है, लेकिन समानांतर प्रोग्रामों (संदेशों या समकालन मुद्दों की प्रतीक्षा) में प्रदर्शन की समस्याएं प्रायः घटनाओं के समय के संबंध पर निर्भर करती हैं, इस प्रकार जो हो रहा है उसे समझने के लिए एक पूर्ण अनुरेख की आवश्यकता होती है। एक (पूर्ण) अनुरेख का आकार प्रोग्राम के [[निर्देश पथ की लंबाई]] के लिए रैखिक होता है, जिससे यह कुछ हद तक अव्यावहारिक हो जाता है। इसलिए एक प्रोग्राम में एक बिंदु पर एक अनुरेख प्रारम्भ किया जा सकता है और आउटपुट को सीमित करने के लिए दूसरे बिंदु पर समाप्त किया जा सकता है।
* [[हाइपरविजर]] के साथ एक सतत परस्पर क्रिया (उदाहरण के लिए ऑन-स्क्रीन डिस्प्ले के माध्यम से निरंतर या आवधिक निगरानी) यह (अभी भी निष्पादित) प्रोग्राम के बारे में चल रहे मेट्रिक्स को देखने के अलावा निष्पादन के दौरान किसी भी वांछित बिंदु पर अनुरेख को प्रारम्भ या बंद करने का अवसर प्रदान करता है। यह अन्य समानांतर प्रक्रियाओं के साथ अधिक विस्तार से परस्परिक क्रिया की जांच करने के लिए महत्वपूर्ण बिंदुओं पर अतुल्यकालिक प्रक्रियाओं को निलंबित करने का अवसर भी प्रदान करता है। 
लंबे समय तक चलने वाले कोड को स्पष्ट करके निष्पादन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या प्रतिरूपक (मॉड्यूल) या प्रोग्राम के पैमाने पर लागू किया जा सकता है।<ref>{{cite web| title=सी # डेस्कटॉप एप्लिकेशन में प्रदर्शन बाधा कैसे खोजें?| publisher=[[Stack Overflow]]| year=2012| url=https://stackoverflow.com/questions/13698674/how-to-find-the-performance-bottleneck-in-c-sharp-desktop-application}}</ref> विभिन्न कार्यावधि स्थितियों<ref>{{cite web| last=Krauss| first=Kirk J| title=फोकस के साथ परफॉर्मेंस प्रोफाइलिंग| publisher=Develop for Performance| year=2017| url=http://www.developforperformance.com/PerformanceProfilingWithAFocus.html}}</ref> या विभिन्न भारों को संभालने के लिए इसे अनुकूलित करने के उद्देश्य से, समय के दृष्टिकोण से कोड को समझने के लिए एक प्रोफाइलर का उपयोग किया जा सकता है।<ref>{{cite web| work=Stackify Developer Tips, Tricks and Resources| title=कोड प्रोफाइलिंग क्या है? कोड प्रोफाइलर्स के 3 प्रकार सीखें| publisher=Disqus| year=2016| url=https://stackify.com/what-is-code-profiling/}}</ref> प्रोफाइलिंग परिणामों को एक संकलक द्वारा ग्रहण किया जा सकता है जो प्रोफाइल-निर्देशित अनुकूलन प्रदान करता है।<ref>{{cite web| last=Lawrence| first=Eric| work=testslashplain| title=प्रोफ़ाइल निर्देशित अनुकूलन के साथ आरंभ करना| publisher=WordPress| year=2016| url=https://textslashplain.com/2016/01/10/getting-started-with-profile-guided-optimization/}}</ref> प्रोफाइलिंग परिणामों का उपयोग व्यक्तिगत एल्गोरिथम के डिजाइन और अनुकूलन को निर्देशित करने के लिए किया जा सकता है [[क्रॉस मैचिंग वाइल्डकार्ड एल्गोरिथम]] एक उदाहरण है।<ref>{{cite web| last=Krauss| first=Kirk| title=मैचिंग वाइल्डकार्ड: बिग डेटा के लिए एक बेहतर एल्गोरिथम| publisher=Develop for Performance| year=2018| url=http://www.developforperformance.com/MatchingWildcards_AnImprovedAlgorithmForBigData.html}}</ref> प्रोफाइलर्स कुछ एप्लिकेशन निष्पादन प्रबंधन प्रणालियों में निर्मित होते हैं जो वितरित एप्लिकेशनों में लेन-देन कार्यभार में अंतर्दृष्टि प्रदान करने के लिए प्रोफाइलिंग डेटा को एकत्रित करते हैं।<ref>{{cite web| work=Stackify Developer Tips, Tricks and Resources| title=.नेट प्रोफाइलरों की सूची: 3 विभिन्न प्रकार और आपको उन सभी की आवश्यकता क्यों है| publisher=Disqus| year=2016| url=https://stackify.com/three-types-of-net-profilers/}}</ref>
== इतिहास ==
== इतिहास ==
1970 के दशक की शुरुआत से IBM/360 और IBM/370 प्लेटफॉर्म पर प्रदर्शन-विश्लेषण उपकरण मौजूद थे, जो आमतौर पर टाइमर इंटरप्ट्स पर आधारित होते थे, जो कोड को निष्पादित करने में हॉट स्पॉट का पता लगाने के लिए सेट टाइमर-अंतराल पर [[कार्यक्रम की स्थिति शब्द]] (PSW) रिकॉर्ड करते थे।{{citation needed|date=February 2014}} यह [[नमूनाकरण (सांख्यिकी)]] का प्रारंभिक उदाहरण था (नीचे देखें)। 1974 की शुरुआत में इंस्ट्रक्शन सेट सिमुलेटर | इंस्ट्रक्शन-सेट सिमुलेटर ने पूर्ण ट्रेस और अन्य प्रदर्शन-निगरानी सुविधाओं की अनुमति दी।{{citation needed|date=February 2014}}
1970 के दशक के प्रारम्भ से IBM/360 और IBM/370 प्लेटफॉर्म पर निष्पादन-विश्लेषण उपकरण मौजूद थे, जो प्रायः टाइमरअवरोध पर आधारित होते थे, जो निष्पादन कोड में "हॉट स्पॉट" का पता लगाने के लिए लगाए गए टाइमर-अंतराल पर [[कार्यक्रम की स्थिति शब्द|प्रोग्राम स्थिति शब्द]] (PSW) रिकॉर्ड करते थे।{{citation needed|date=February 2014}} यह [[नमूनाकरण (सांख्यिकी)|नमूनाकरण]] का एक प्रारंभिक उदाहरण था (नीचे देखें)। 1974 के प्रारम्भ में निर्देश-लगाए अनुरूपक ने पूर्ण अनुरेख और अन्य निष्पादन-निगरानी सुविधाओं की अनुमति दी।{{citation needed|date=February 2014}}
यूनिक्स पर प्रोफाइलर-संचालित कार्यक्रम विश्लेषण 1973 से पहले का है,<ref name="prof">[http://www.tuhs.org/Archive/Distributions/Research/Dennis_v4/v4man.tar.gz Unix Programmer's Manual, 4th Edition]</ref> जब यूनिक्स सिस्टम में एक बुनियादी उपकरण शामिल था, <code>prof</code>, जिसने प्रत्येक फ़ंक्शन को सूचीबद्ध किया और कितने प्रोग्राम निष्पादन समय का उपयोग किया। 1982 में <code>gprof</code> अवधारणा को पूर्ण [[कॉल ग्राफ]]विश्लेषण तक विस्तारित किया।<ref name="gprof">
 
यूनिक्स पर प्रोफाइलर-संचालित प्रोग्राम विश्लेषण 1973 से प्रारम्भ होता है,<ref name="prof">[http://www.tuhs.org/Archive/Distributions/Research/Dennis_v4/v4man.tar.gz Unix Programmer's Manual, 4th Edition]</ref> जब यूनिक्स प्रणाली में एक बुनियादी उपकरण, <code>प्रोफ</code> सम्मिलित था, जो प्रत्येक फलन को सूचीबद्ध करता था और प्रोग्राम निष्पादन समय का कितना उपयोग करता था। 1982 में <code>जीप्रोफ</code> ने अवधारणा को एक पूर्ण [[कॉल ग्राफ]] विश्लेषण तक विस्तारित किया।<ref name="gprof">
S.L. Graham, P.B. Kessler, and M.K. McKusick, [http://docs.freebsd.org/44doc/psd/18.gprof/paper.pdf ''gprof: a Call Graph Execution Profiler''], Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, ''[[SIGPLAN]] Notices'', Vol. 17, No 6, pp. 120-126; [[doi:10.1145/800230.806987]]</ref>
S.L. Graham, P.B. Kessler, and M.K. McKusick, [http://docs.freebsd.org/44doc/psd/18.gprof/paper.pdf ''gprof: a Call Graph Execution Profiler''], Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, ''[[SIGPLAN]] Notices'', Vol. 17, No 6, pp. 120-126; [[doi:10.1145/800230.806987]]</ref>
1994 में, [[डिजिटल उपकरण निगम]] के अमिताभ श्रीवास्तव और [[एलन यूस्टेस]] ने एटीओएम का वर्णन करते हुए एक पेपर प्रकाशित किया<ref>
 
1994 में, [[डिजिटल उपकरण निगम]] के अमिताभ श्रीवास्तव और [[एलन यूस्टेस]] ने एटीओएम (ATOM)<ref>
A. Srivastava and A. Eustace, [http://www.ece.cmu.edu/~ece548/tools/atom/man/wrl_94_2.pdf ''ATOM: A system for building customized program analysis tools''], Proceedings of the ACM SIGPLAN Conference on Programming language design and implementation (PLDI '94), pp. 196-205, 1994; ACM ''SIGPLAN Notices'' - Best of PLDI 1979-1999 Homepage archive, Vol. 39, No. 4, pp. 528-539; [[doi:10.1145/989393.989446]]
A. Srivastava and A. Eustace, [http://www.ece.cmu.edu/~ece548/tools/atom/man/wrl_94_2.pdf ''ATOM: A system for building customized program analysis tools''], Proceedings of the ACM SIGPLAN Conference on Programming language design and implementation (PLDI '94), pp. 196-205, 1994; ACM ''SIGPLAN Notices'' - Best of PLDI 1979-1999 Homepage archive, Vol. 39, No. 4, pp. 528-539; [[doi:10.1145/989393.989446]]
</ref> (ओएम के साथ विश्लेषण उपकरण)एटीओएम प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता है: [[संकलन समय]] पर, यह विश्लेषण किए जाने वाले कार्यक्रम में कोड सम्मिलित करता है। वह डाला गया कोड विश्लेषण डेटा आउटपुट करता है। यह तकनीक - स्वयं का विश्लेषण करने के लिए एक प्रोग्राम को संशोधित करना - इंस्ट्रुमेंटेशन (कंप्यूटर प्रोग्रामिंग) के रूप में जाना जाता है।
</ref> (ओएम (OM) के साथ विश्लेषण उपकरण) का वर्णन करते हुए एक पेपर प्रकाशित किया। एटीओएम (ATOM) प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता है [[संकलन समय]], यह विश्लेषण किए जाने वाले प्रोग्राम में कोड सम्मिलित करता है। वह सम्मिलित कोड विश्लेषण डेटा को आउटपुट करता है। यह तकनीक स्वयं का विश्लेषण करने के लिए प्रोग्राम को संशोधित करती है - इसे "उपकरण" के रूप में जाना जाता है।  


2004 में दोनों <code>gprof</code> और एटीओएम पेपर 1999 में समाप्त होने वाली 20 साल की अवधि के लिए प्रोग्रामिंग लैंग्वेज डिजाइन और कार्यान्वयन पत्रों पर 50 सबसे प्रभावशाली सम्मेलन की सूची में दिखाई दिए।<ref>
2004 में <code>जीप्रोफ</code> और एटीओएम(ATOM) पेपर दोनों ही 1999 में समाप्त होने वाली 20 साल की अवधि के लिए 50 सबसे प्रभावशाली पीएलडीआई (PLDI) पत्रों की सूची में सम्मिलित हुए।<ref>
[http://www.cs.utexas.edu/users/mckinley/20-years.html 20 Years of PLDI (1979–1999): A Selection], [[Kathryn S. McKinley]], Editor</ref>
[http://www.cs.utexas.edu/users/mckinley/20-years.html 20 Years of PLDI (1979–1999): A Selection], [[Kathryn S. McKinley]], Editor</ref>
== आउटपुट के आधार पर प्रोफाइलर प्रकार ==
== आउटपुट के आधार पर प्रोफाइलर प्रकार ==


===फ्लैट प्रोफाइलर ===
===समतल प्रोफाइलर ===
फ्लैट प्रोफाइलर्स कॉल से औसत कॉल समय की गणना करते हैं, और कैली या संदर्भ के आधार पर कॉल के समय को नहीं तोड़ते हैं।
समतल प्रोफाइलर्स कॉल से औसत कॉल समय की गणना करते हैं, और कैली या संदर्भ के आधार पर कॉल के समय को नहीं तोड़ते हैं।


=== कॉल-ग्राफ प्रोफाइलर ===
=== कॉल-ग्राफ प्रोफाइलर ===
ग्राफ प्रोफाइलर्स को कॉल करें<ref name="gprof" />कॉल के समय, और कार्यों की आवृत्तियों, और कैली के आधार पर शामिल कॉल-चेन भी दिखाएं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं होता है<!--, but others can save full call tree-->.
कॉल ग्राफ प्रोफाइलर्स<ref name="gprof" /> कॉल के समय, और कार्यों की आवृत्तियों, और कैली के आधार पर सम्मिलित कॉल-चेन भी दिखाते हैं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं होता है।


=== इनपुट-संवेदनशील प्रोफाइलर ===
=== इनपुट-संवेदनशील प्रोफाइलर ===
इनपुट-संवेदनशील प्रोफाइलर<ref name="aprof">E. Coppa, C. Demetrescu, and I. Finocchi, [https://ieeexplore.ieee.org/document/6858059''Input-Sensitive Profiling''], IEEE Trans. Software Eng. 40(12): 1185-1205 (2014); [[doi:10.1109/TSE.2014.2339825]]</ref><ref>D. Zaparanuks and M. Hauswirth, ''Algorithmic Profiling'', Proceedings of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2012), ACM SIGPLAN Notices, Vol. 47, No. 6, pp. 67-76, 2012; [[doi:10.1145/2254064.2254074]]</ref><ref>T. Kustner, J. Weidendorfer, and T. Weinzierl, ''Argument Controlled Profiling'', Proceedings of Euro-Par 2009 – Parallel Processing Workshops, Lecture Notes in Computer Science, Vol. 6043, pp. 177-184, 2010; [[doi:10.1007/978-3-642-14122-5 22]]</ref> इनपुट वर्कलोड की विशेषताओं, जैसे इनपुट आकार या इनपुट मान, के प्रदर्शन उपायों से संबंधित करके फ्लैट या कॉल-ग्राफ़ प्रोफाइलर्स में एक और आयाम जोड़ें। वे चार्ट उत्पन्न करते हैं जो यह दर्शाते हैं कि किसी एप्लिकेशन का प्रदर्शन उसके इनपुट के कार्य के रूप में कैसे मापता है।
इनपुट-संवेदनशील प्रोफाइलर्स<ref name="aprof">E. Coppa, C. Demetrescu, and I. Finocchi, [https://ieeexplore.ieee.org/document/6858059''Input-Sensitive Profiling''], IEEE Trans. Software Eng. 40(12): 1185-1205 (2014); [[doi:10.1109/TSE.2014.2339825]]</ref><ref>D. Zaparanuks and M. Hauswirth, ''Algorithmic Profiling'', Proceedings of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2012), ACM SIGPLAN Notices, Vol. 47, No. 6, pp. 67-76, 2012; [[doi:10.1145/2254064.2254074]]</ref><ref>T. Kustner, J. Weidendorfer, and T. Weinzierl, ''Argument Controlled Profiling'', Proceedings of Euro-Par 2009 – Parallel Processing Workshops, Lecture Notes in Computer Science, Vol. 6043, pp. 177-184, 2010; [[doi:10.1007/978-3-642-14122-5 22]]</ref> इनपुट वर्कलोड की अभिलक्षणों जैसे इनपुट आकार या इनपुट मानों के निष्पादन उपायों से संबंधित समतल या कॉल-ग्राफ प्रोफाइलर्स में एक और आयाम जोड़ते हैं। वे चार्ट उत्पन्न करते हैं जो यह दर्शाते हैं कि किसी एप्लिकेशन का निष्पादन उसके इनपुट के कार्य के रूप में कैसे मापता है।


== प्रोफाइलर प्रकारों में डेटा ग्रैन्युलैरिटी ==
== प्रोफाइलर प्रकारों में डेटा कणिकता ==
प्रोफाइलर, जो खुद भी प्रोग्राम होते हैं, उनके निष्पादन पर जानकारी एकत्र करके लक्षित कार्यक्रमों का विश्लेषण करते हैं। उनके डेटा ग्रैन्युलैरिटी के आधार पर, कैसे प्रोफाइलर्स जानकारी एकत्र करते हैं, उन्हें घटना आधारित या सांख्यिकीय प्रोफाइलर्स में वर्गीकृत किया जाता है। प्रोफाइलर जानकारी एकत्र करने के लिए कार्यक्रम के निष्पादन को बाधित करते हैं, जिसके परिणामस्वरूप समय मापन में एक सीमित संकल्प हो सकता है, जिसे नमक के दाने के साथ लिया जाना चाहिए। [[बेसिक ब्लॉक]] प्रोफाइलर कोड की प्रत्येक पंक्ति को निष्पादित करने के लिए समर्पित निर्देश के अनुसार कई मशीन चक्रों की रिपोर्ट करते हैं, या इन्हें एक साथ जोड़ने के आधार पर एक समय; हो सकता है कि प्रति बेसिक ब्लॉक में रिपोर्ट किया गया समय [[सीपीयू कैश]] हिट और मिस के बीच के अंतर को न दर्शाए।<ref>{{cite web| work=OpenStax CNX Archive| title=टाइमिंग और प्रोफाइलिंग - बेसिक ब्लॉक प्रोफाइलर्स| url=https://archive.cnx.org/contents/d29c016a-2960-4fc9-b431-9eda881a28f5@3/timing-and-profiling-basic-block-profilers#id6897344}}</ref><ref>{{cite journal| last1=Ball| first1=Thomas| last2=Larus| first2=James R.| journal=ACM Transactions on Programming Languages and Systems| volume=16| issue=4| pages=1319–1360| title=इष्टतम रूप से प्रोफाइलिंग और ट्रेसिंग कार्यक्रम| publisher=ACM Digital Library| year=1994| url=https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf| doi=10.1145/183432.183527| s2cid=6897138| access-date=2018-05-18| archive-url=https://web.archive.org/web/20180518195918/https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf| archive-date=2018-05-18| url-status=dead}}</ref>
प्रोफाइलर, जो स्वयं भी प्रोग्राम होते हैं, उनके निष्पादन पर जानकारी एकत्र करके लक्षित प्रोग्रामों का विश्लेषण करते हैं। उनकी डेटा कणिकता के आधार पर, कैसे प्रोफाइलर्स जानकारी एकत्र करते हैं, उन्हें घटना आधारित या सांख्यिकीय प्रोफाइलर्स में वर्गीकृत किया जाता है। प्रोफाइलर जानकारी एकत्र करने के लिए प्रोग्राम के निष्पादन को बाधित करते हैं, जिसके परिणामस्वरूप समय मापन में एक सीमित संकल्प हो सकता है, जिसे नमक के दाने के साथ लिया जाना चाहिए। [[बेसिक ब्लॉक]] प्रोफाइलर कोड की प्रत्येक पंक्ति को निष्पादित करने के लिए समर्पित कई मशीन घड़ी चक्रों की रिपोर्ट करते हैं, या इन्हें एक साथ जोड़ने के आधार पर एक समय, प्रति बुनियादी ब्लॉक रिपोर्ट किए गए समय [[सीपीयू कैश|द्रुतिका]] प्राप्ति और चूकने के बीच अंतर को प्रतिबिंबित नहीं कर सकते हैं।<ref>{{cite web| work=OpenStax CNX Archive| title=टाइमिंग और प्रोफाइलिंग - बेसिक ब्लॉक प्रोफाइलर्स| url=https://archive.cnx.org/contents/d29c016a-2960-4fc9-b431-9eda881a28f5@3/timing-and-profiling-basic-block-profilers#id6897344}}</ref><ref>{{cite journal| last1=Ball| first1=Thomas| last2=Larus| first2=James R.| journal=ACM Transactions on Programming Languages and Systems| volume=16| issue=4| pages=1319–1360| title=इष्टतम रूप से प्रोफाइलिंग और ट्रेसिंग कार्यक्रम| publisher=ACM Digital Library| year=1994| url=https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf| doi=10.1145/183432.183527| s2cid=6897138| access-date=2018-05-18| archive-url=https://web.archive.org/web/20180518195918/https://www.classes.cs.uchicago.edu/current/32001-1/papers/ball-larus-profiling.pdf| archive-date=2018-05-18| url-status=dead}}</ref>
===घटना-आधारित प्रोफाइलर ===
यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित प्रोफाइलर्स हैं।
* [[जावा (प्रोग्रामिंग भाषा)|जावा]]- जेवीएमटीआई ([[जावा वर्चुअल मशीन टूल्स इंटरफ़ेस|जेवीएम टूल्स इंटरफेस]]) एपीआई  (API), पूर्व में जेवीएमपीआई (जेवीएम प्रोफाइलिंग इंटरफेस), कॉल, क्लास-भार, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं के प्रग्रहण के लिए प्रोफाइलरों को हुक प्रदान करता है।
* एनईटी (NET)- प्रोफाइलिंग एपीआई (''API'') का उपयोग कर सीएलआर (''CLR)'' को एक सीओएम (COM) सर्वर के रूप में एक प्रोफाइलिंग एजेंट संलग्न कर सकता है। जावा की तरह, कार्यावधि तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, JIT / एंटर / लीव, ऑब्जेक्ट निर्माण, आदि विधि जैसी घटनाओं को प्रग्रहण के लिए। विशेष रूप से शक्तिशाली है कि प्रोफाइलिंग एजेंट लक्ष्य एप्लिकेशन के बाइटकोड को मनमाने तरीके से फिर से लिख सकता है।
* पायथन: पायथन प्रोफाइलिंग में प्रोफाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और c_ {कॉल, वापसी, अपवाद}, पायथन_ {कॉल, वापसी, अपवाद} जैसी घटनाओं को अनुरेख करने के लिए 'sys.setprofile' फलन का उपयोग करना सम्मिलित है।
*[[रूबी (प्रोग्रामिंग भाषा)|रूबी]]- रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफ़ेस का उपयोग करती है। profile.rb में समतल-प्रोफाइलर, मॉड्यूल और रूबी-प्रोफ एक सी (C)-एक्सटेंशन मौजूद हैं।


=== सांख्यिकीय प्रोफाइलर्स ===
कुछ प्रोफाइलर प्रतिदर्श द्वारा संचालित होते हैं। एक प्रतिदर्श प्रोफाइलर [[ऑपरेटिंग सिस्टम]] [[रुकावट डालना|अवरोध]] का उपयोग करके नियमित अंतराल पर लक्ष्य प्रोग्राम [[कॉल स्टैक|कॉल ढेर]] की जांच करता है। प्रतिदर्श प्रोफाइल प्रायः संख्यात्मक रूप से कम सटीक और विशिष्ट होते हैं, लेकिन लक्ष्य प्रोग्राम को पूर्ण गति से चलाने की अनुमति देते हैं।


===इवेंट-आधारित प्रोफाइलर ===
परिणामी डेटा सटीक नहीं हैं, लेकिन एक सांख्यिकीय सन्निकटन है। "त्रुटि की वास्तविक मात्रा प्रायः एक से अधिक प्रतिदर्श अवधि होती है। वास्तव में, यदि कोई मान प्रतिदर्श अवधि का n गुना है, तो इसमें अपेक्षित त्रुटि n प्रतिदर्श अवधि का वर्गमूल है।"<ref>[http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html#SEC12 Statistical Inaccuracy of <code>gprof</code> Output] {{webarchive|url=https://web.archive.org/web/20120529075000/http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html |date=2012-05-29 }}</ref>
यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित प्रोफाइलर हैं:
* [[जावा (प्रोग्रामिंग भाषा)]]: [[जावा वर्चुअल मशीन टूल्स इंटरफ़ेस]] (जेवीएम टूल्स इंटरफेस) एपीआई, पूर्व में जेवीएमपीआई (जेवीएम प्रोफाइलिंग इंटरफेस), कॉल, क्लास-लोड, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं को फंसाने के लिए प्रोफाइलर्स को हुक प्रदान करता है।
* .NET फ्रेमवर्क | .NET: प्रोफाइलिंग एपीआई का उपयोग करके सीएलआर को एक COM सर्वर के रूप में एक प्रोफाइलिंग एजेंट संलग्न कर सकता है। जावा की तरह, रनटाइम तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, मेथड [[दुभाषिया]] / एंटर / लीव, ​​ऑब्जेक्ट क्रिएशन, आदि जैसी घटनाओं को फंसाने के लिए। विशेष रूप से शक्तिशाली इसमें प्रोफाइलिंग एजेंट मनमाने तरीके से लक्ष्य एप्लिकेशन के बायटेकोड को फिर से लिख सकता है।
* पायथन (प्रोग्रामिंग लैंग्वेज): पायथन प्रोफाइलिंग में प्रोफाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और 'sys.setprofile' फ़ंक्शन का उपयोग c_{call,return,Exception}, python_{call, जैसी घटनाओं को ट्रैप करने के लिए शामिल है। वापसी, अपवाद}।
* [[रूबी (प्रोग्रामिंग भाषा)]]: रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफ़ेस का उपयोग करती है। Profile.rb में फ्लैट-प्रोफाइलर, मॉड्यूल और रूबी-प्रोफ एक सी-एक्सटेंशन मौजूद हैं।


=== सांख्यिकीय प्रोफाइलर ===
व्यवहार में, प्रतिदर्श प्रोफाइलर प्रायः अन्य दृष्टिकोणों की तुलना में लक्ष्य प्रोग्राम के निष्पादन की अधिक सटीक चित्र प्रदान कर सकते हैं, क्योंकि वे लक्ष्य प्रोग्राम के लिए हस्तक्षेप नहीं करते हैं, और इस प्रकार उनके कई दुष्प्रभाव (जैसे मेमोरी द्रुतिका (कैश) या निर्देश पर डिकोडिंग अनुप्रक्रमण) नहीं होते हैं। चूंकि वे निष्पादन की गति को ज्यादा प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे रहेंगे। वे छोटे, जिन्हें प्रायः रूटीन या 'दृढ़' लूप कहा जाता है, की लागत के अधिक-मूल्यांकन के लिए अपेक्षाकृत प्रतिरक्षा हैं। वे उपयोगकर्ता मोड बनाम व्यवधान कारक (इंटरप्टिबल) कर्नेल मोड जैसे [[सिस्टम कॉल|प्रणाली कॉल]] प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं।  
कुछ प्रोफाइलर सैम्पलिंग (सांख्यिकी) द्वारा संचालित होते हैं। एक सैंपलिंग प्रोफाइलर [[ऑपरेटिंग सिस्टम]] [[रुकावट डालना]]्स का उपयोग करके नियमित अंतराल पर लक्ष्य प्रोग्राम के [[कॉल स्टैक]] की जांच करता है। नमूनाकरण प्रोफाइल आमतौर पर संख्यात्मक रूप से कम सटीक और विशिष्ट होते हैं, लेकिन लक्ष्य कार्यक्रम को पूर्ण गति से चलाने की अनुमति देते हैं।


परिणामी डेटा सटीक नहीं है, लेकिन एक सांख्यिकीय अनुमान है। त्रुटि की वास्तविक मात्रा आमतौर पर एक से अधिक नमूना लेने की अवधि होती है। वास्तव में, यदि कोई मान नमूना अवधि का n गुना है, तो उसमें अपेक्षित त्रुटि n नमूनाकरण अवधि का वर्गमूल है।<ref>[http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html#SEC12 Statistical Inaccuracy of <code>gprof</code> Output] {{webarchive|url=https://web.archive.org/web/20120529075000/http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html |date=2012-05-29 }}</ref>
फिर भी, व्यवधान को संभालने के लिए कर्नेल कोड में सीपीयू (CPU) चक्रों की मामूली हानि होती है, डायवर्टेड कैश उपयोग होता है, और अबाधित कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ है।
व्यवहार में, सैंपलिंग प्रोफाइलर अक्सर अन्य दृष्टिकोणों की तुलना में लक्ष्य कार्यक्रम के निष्पादन की अधिक सटीक तस्वीर प्रदान कर सकते हैं, क्योंकि वे लक्ष्य कार्यक्रम के लिए घुसपैठ नहीं करते हैं, और इस प्रकार उनके कई दुष्प्रभाव नहीं होते हैं (जैसे मेमोरी कैश या निर्देश पर डिकोडिंग पाइपलाइन)। चूंकि वे निष्पादन की गति को ज्यादा प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे रहेंगे। वे छोटे, जिन्हें अक्सर रूटीन या 'तंग' लूप कहा जाता है, की लागत के अधिक-मूल्यांकन के प्रति अपेक्षाकृत प्रतिरोधी होते हैं। वे उपयोगकर्ता मोड बनाम इंटरप्टिबल कर्नेल मोड जैसे [[सिस्टम कॉल]] प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं।


फिर भी, व्यवधान को संभालने के लिए कर्नेल कोड में सीपीयू चक्रों की मामूली हानि होती है, डायवर्टेड कैश उपयोग होता है, और अबाधित कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ है।
समर्पित हार्डवेयर इससे आगे जा सकता है एआरएस कॉर्टेक्स-एम3 (ARM Cortex-M3) और कुछ हाल के एमआईपीएस (MIPS) प्रोसेसर जेटीएजी (JTAG) इंटरफ़ेस में एक पीसीएससैम्पल (PCSAMPLE) पंजीकृत है, जो प्रोग्राम गणक को वास्तव में असंसूचनीय तरीके से प्रतिरूप करता है, जिससे एक समलत प्रोफाइल के हस्तक्षेप करने वाले संग्रह को अनुमति मिलती है।


समर्पित हार्डवेयर इससे आगे जा सकता है: ARM Cortex-M3 और कुछ हाल के MIPS प्रोसेसर JTAG इंटरफ़ेस में एक PCSAMPLE रजिस्टर है, जो [[कार्यक्रम गणक]] को वास्तव में undetectable तरीके से सैंपल करता है, जिससे एक फ्लैट प्रोफाइल के गैर-दखल देने वाले संग्रह की अनुमति मिलती है।
जावा/प्रबंधित कोड के लिए प्रायः उपयोग किए जाने वाले कुछ<ref>{{cite web| title=लोकप्रिय सी # प्रोफाइलर्स| publisher=Gingtage| year=2014| url=http://www.ginktage.com/2014/10/popular-c-profilers/}}</ref> सांख्यिकीय प्रोफाइलर [[SmartBear Software|स्मार्टबियर सॉफ्टवेयर]] के [[AQtime|एक्यू समय (AQtime)]]<ref>{{cite web| work=AQTime 8 Reference| title=नमूना प्रोफाइलर - सिंहावलोकन| publisher=SmartBear Software| year=2018| url=https://support.smartbear.com/viewarticle/54581/}}</ref> और माइक्रोसॉफ्ट के [[सीएलआर प्रोफाइलर|सीएलआर(CLR) प्रोफाइलर]] हैं।<ref>{{cite web| work=Microsoft .NET Framework Unmanaged API Reference| last=Wenzal| first=Maira|display-authors=etal| title=प्रोफाइलिंग अवलोकन| publisher=Microsoft| year=2017| url=https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/profiling-overview#supported-features}}</ref> वे प्रोफाइलर प्राकृत कोड रूपरेखा का भी समर्थन करते हैं, साथ ही Apple Inc. का शार्क (OSX),<ref>{{cite web| work=[[Apple Developer Tools]]| title=प्रदर्शन उपकरण| publisher=Apple, Inc.| year=2013| url=https://developer.apple.com/library/content/documentation/Performance/Conceptual/PerformanceOverview/PerformanceTools/PerformanceTools.html}}</ref> [[ओप्रोफाइल]] (लिनक्स),<ref>{{cite web| work=[[IBM DeveloperWorks]]| last1=Netto| first1=Zanella| last2=Arnold| first2=Ryan S.| title=Power पर Linux के प्रदर्शन का मूल्यांकन करें| year=2012| url=https://www.ibm.com/developerworks/linux/library/l-evaluatelinuxonpower/}}</ref>  [[Intel|इंटेल वीट्यून (Intel]] [[VTune]]) और समांतर प्रवर्धक ([[Intel Parallel Studio|इंंटेल समांतर स्टुडियो]] का हिस्सा), और [[Oracle Corporation|ओरेकल]] [[Oracle Corporation|कार्पोरेशन]] [[Performance Analyzer|प्रदर्शन विश्लेषक]],<ref>{{cite conference |last1=Schmidl |first1=Dirk |first2=Christian |last2=Terboven |first3=Dieter |last3=an Mey |first4=Matthias S. |last4=Müller |title=ओपनएमपी टास्क-पैरेलल प्रोग्राम्स के लिए परफॉरमेंस टूल्स की उपयुक्तता|conference=Proc. 7th Int'l Workshop on Parallel Tools for High Performance Computing |year=2013 |pages=25–37 |isbn=9783319081441 |url=https://books.google.com/books?id=-I64BAAAQBAJ&pg=PA27}}</ref> अन्य लोगों के बीच। 


कुछ आमतौर पर इस्तेमाल किया<ref>{{cite web| title=लोकप्रिय सी # प्रोफाइलर्स| publisher=Gingtage| year=2014| url=http://www.ginktage.com/2014/10/popular-c-profilers/}}</ref> Java/प्रबंधित कोड के लिए सांख्यिकीय प्रोफाइलर [[SmartBear Software]] का [[AQtime]] हैं<ref>{{cite web| work=AQTime 8 Reference| title=नमूना प्रोफाइलर - सिंहावलोकन| publisher=SmartBear Software| year=2018| url=https://support.smartbear.com/viewarticle/54581/}}</ref> और [[माइक्रोसॉफ्ट]] का [[सीएलआर प्रोफाइलर]]।<ref>{{cite web| work=Microsoft .NET Framework Unmanaged API Reference| last=Wenzal| first=Maira|display-authors=etal| title=प्रोफाइलिंग अवलोकन| publisher=Microsoft| year=2017| url=https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/profiling-overview#supported-features}}</ref> वे प्रोफाइलर Apple Inc. के Apple Developer Tools#Shark (OSX) के साथ नेटिव कोड प्रोफाइलिंग का भी समर्थन करते हैं,<ref>{{cite web| work=[[Apple Developer Tools]]| title=प्रदर्शन उपकरण| publisher=Apple, Inc.| year=2013| url=https://developer.apple.com/library/content/documentation/Performance/Conceptual/PerformanceOverview/PerformanceTools/PerformanceTools.html}}</ref> [[ओप्रोफाइल]] (लिनक्स),<ref>{{cite web| work=[[IBM DeveloperWorks]]| last1=Netto| first1=Zanella| last2=Arnold| first2=Ryan S.| title=Power पर Linux के प्रदर्शन का मूल्यांकन करें| year=2012| url=https://www.ibm.com/developerworks/linux/library/l-evaluatelinuxonpower/}}</ref> [[Intel]] [[VTune]] और Parallel Amplifier ([[Intel Parallel Studio]] का हिस्सा), और [[Oracle Corporation]] [[Performance Analyzer]],<ref>{{cite conference |last1=Schmidl |first1=Dirk |first2=Christian |last2=Terboven |first3=Dieter |last3=an Mey |first4=Matthias S. |last4=Müller |title=ओपनएमपी टास्क-पैरेलल प्रोग्राम्स के लिए परफॉरमेंस टूल्स की उपयुक्तता|conference=Proc. 7th Int'l Workshop on Parallel Tools for High Performance Computing |year=2013 |pages=25–37 |isbn=9783319081441 |url=https://books.google.com/books?id=-I64BAAAQBAJ&pg=PA27}}</ref> दूसरों के बीच में।
=== उपकरण (इंस्ट्रुमेंटेशन) ===
यह तकनीक आवश्यक जानकारी एकत्र करने के लिए लक्ष्य प्रोग्राम में प्रभावी रूप से निर्देश जोड़ती है। ध्यान दें कि किसी प्रोग्राम को [[यंत्र|यंत्रीकृत]] करने से प्रदर्शन में परिवर्तन हो सकता है, और कुछ मामलों में गलत परिणाम और/या [[heisenbug|हाइजेनबग]] हो सकते हैं। प्रभाव इस बात पर निर्भर करेगा कि कौन सी जानकारी एकत्र की जा रही है, रिपोर्ट किए गए समय विवरण के स्तर पर, और बुनियादी ब्लॉक रूपरेखा का उपयोग उपकरण के साथ किया जाता है या नहीं।<ref>{{cite magazine| last1=Carleton| first1=Gary| last2=Kirkegaard| first2=Knud| last3=Sehr| first3=David| title=प्रोफ़ाइल-निर्देशित अनुकूलन| magazine=[[Dr. Dobb's Journal]]| year=1998| url=http://www.drdobbs.com/profile-guided-optimizations/184410561}}</ref> उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल की गणना के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, यह गणना करने से कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में सूचना एकत्र करने के लिए विशेष हार्डवेयर होते हैं इस स्थिति में प्रोग्राम पर प्रभाव न्यूनतम है।


=== इंस्ट्रुमेंटेशन ===
उपकरण प्रोफाइलरों के लिए उपलब्ध नियंत्रण के स्तर और समय संकल्प की मात्रा निर्धारित करने के लिए महत्वपूर्ण है।
यह तकनीक आवश्यक जानकारी एकत्र करने के लिए लक्ष्य कार्यक्रम में प्रभावी रूप से निर्देश जोड़ती है। ध्यान दें कि किसी प्रोग्राम को [[यंत्र]] करने से प्रदर्शन में परिवर्तन हो सकता है, और कुछ मामलों में गलत परिणाम और/या [[heisenbug]] हो सकते हैं। प्रभाव इस बात पर निर्भर करेगा कि कौन सी जानकारी एकत्र की जा रही है, रिपोर्ट किए गए समय के विवरण के स्तर पर, और बुनियादी ब्लॉक प्रोफाइलिंग का प्रयोग उपकरण के संयोजन के साथ किया जाता है या नहीं।<ref>{{cite magazine| last1=Carleton| first1=Gary| last2=Kirkegaard| first2=Knud| last3=Sehr| first3=David| title=प्रोफ़ाइल-निर्देशित अनुकूलन| magazine=[[Dr. Dobb's Journal]]| year=1998| url=http://www.drdobbs.com/profile-guided-optimizations/184410561}}</ref> उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल को गिनने के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, यह गिनने से कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में सूचना एकत्र करने के लिए विशेष हार्डवेयर होते हैं; इस मामले में कार्यक्रम पर प्रभाव न्यूनतम है।
* '''नियमावली (मैनुअल)-''' प्रोग्रामर द्वारा निष्पादित, उदाहरण- स्पष्ट रूप से कार्यावधि की गणना करने के लिए निर्देशों को जोड़कर, माप [[एपीआई|एपीआई (API)]] जैसे कि [[आवेदन प्रतिक्रिया माप|एप्लिकेशन प्रतिक्रिया मापन मानक]] के लिए घटनाओं या कॉलों की गणना करें।
* '''स्वचालित स्रोत स्तर-''' उपकरण नीति के अनुसार स्वचालित उपकरण द्वारा स्रोत कोड में जोड़ा गया उपकरण।
*'''मध्यवर्ती भाषा-''' कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) बाइनरी ऑफसेट पुनर्लेखन समस्याओं से बचने के लिए असेम्बली या विघटित बाइटकोड में जोड़ा गया उपकरण।
*'''संकलक ने सहायता की'''
* '''बाइनरी अनुवाद-''' उपकरण संकलित [[निष्पादन]] योग्य में उपकरण जोड़ता है।
*'''कार्यावधि इंस्ट्रूमेंटेशन-''' निष्पादन से ठीक पहले कोड यंत्रीकृत किया जाता है। प्रोग्राम रन पूरी तरह से टूल द्वारा पर्यवेक्षण और नियंत्रित किया जाता है।
*'''कार्यावधि अन्तःक्षेपण-''' कार्यावधि उपकरण की तुलना में अधिक हल्का होता है। सहायक कार्यों में जाने के लिए कोड को कार्यावधि पर संशोधित किया जाता है।  


इंस्ट्रुमेंटेशन नियंत्रण के स्तर और प्रोफाइलरों के लिए उपलब्ध समय संकल्प की मात्रा निर्धारित करने के लिए महत्वपूर्ण है।
=== अनुवादक उपकरण ===
* मैनुअल: प्रोग्रामर द्वारा निष्पादित, उदा। स्पष्ट रूप से रनटाइम की गणना करने के लिए निर्देशों को जोड़कर, माप [[एपीआई]] जैसे कि [[आवेदन प्रतिक्रिया माप]] मानक के लिए घटनाओं या कॉलों की गणना करें।
* अनुवादक डिबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकते हैं क्योंकि अनुवादक प्रत्येक लक्ष्य विवरण का सामना करता है। एक बाइटकोड, [[नियंत्रण तालिका]] या जेआईटी(JIT) अनुवादक के तीन उदाहरण हैं जो प्रायः लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह अवसरों को सक्षम करते हैं।
* स्वचालित स्रोत स्तर: उपकरण नीति के अनुसार स्वचालित उपकरण द्वारा स्रोत कोड में जोड़ा गया उपकरण।
* इंटरमीडिएट भाषा: कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) बाइनरी ऑफ़सेट री-राइटिंग मुद्दों से बचने के लिए असेंबली भाषा या विघटित [[बाईटकोड]] में जोड़ा गया इंस्ट्रूमेंटेशन।
* कंपाइलर ने सहायता की
* बाइनरी अनुवाद: उपकरण एक संकलित [[निष्पादन]] योग्य में इंस्ट्रूमेंटेशन जोड़ता है।
* रनटाइम इंस्ट्रूमेंटेशन: सीधे निष्पादन से पहले कोड को इंस्ट्रूमेंट किया जाता है। प्रोग्राम रन पूरी तरह से टूल द्वारा पर्यवेक्षण और नियंत्रित किया जाता है।
* रनटाइम इंजेक्शन: रनटाइम इंस्ट्रूमेंटेशन की तुलना में अधिक हल्का। सहायक कार्यों के लिए छलांग लगाने के लिए कोड को रनटाइम पर संशोधित किया जाता है।


=== दुभाषिया उपकरण ===
=== हाइपरविजर/अनुरूपक ===
* दुभाषिया डिबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकता है क्योंकि दुभाषिया प्रत्येक लक्ष्य कथन का सामना करता है। एक बायटेकोड, [[नियंत्रण तालिका]] या [[समय-समय पर संकलन]] दुभाषिया तीन उदाहरण हैं जो आमतौर पर लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह अवसरों को सक्षम करते हैं।
* '''हाइपरविजर-''' हाइपरविजर के तहत (प्रायः) अपरिवर्तित प्रोग्राम चलाकर डेटा एकत्र किया जाता है। उदाहरण- सिमॉन
 
*'''अनुरूपक और हाइपरविजर-'''  निर्देश निर्धारित अनुरूपक के तहत अपरिवर्तित प्रोग्राम चलाकर डेटा को अंतःक्रियात्मक रूप से और चयनात्मक रूप से एकत्र किया जाता है।
=== हाइपरवाइजर/सिम्युलेटर ===
* हाइपरवाइजर: हाइपरवाइजर के तहत (आमतौर पर) अनमॉडिफाइड प्रोग्राम चलाकर डेटा एकत्र किया जाता है। उदाहरण: सिमोन
* सिम्युलेटर और हाइपरविजर: निर्देश सेट सिम्युलेटर के तहत असंशोधित कार्यक्रम चलाकर डेटा को इंटरैक्टिव और चुनिंदा रूप से एकत्र किया गया।


== यह भी देखें ==
== यह भी देखें ==
<!-- Please keep entries in alphabetical order & add a short description [[WP:SEEALSO]] -->
{{div col|small=yes|colwidth=20em}}
{{div col|small=yes|colwidth=20em}}
* [[एल्गोरिथम दक्षता]]
* [[एल्गोरिथम दक्षता]]
* [[बेंचमार्क (कंप्यूटिंग)]]
* [[मानदण्ड]]
* [[जावा प्रदर्शन]]
* [[जावा प्रदर्शन]]
* [[प्रदर्शन विश्लेषण उपकरणों की सूची]]
* [[प्रदर्शन विश्लेषण उपकरणों की सूची]]
* [[प्रदर्शन अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस]] आधुनिक माइक्रोप्रोसेसरों पर हार्डवेयर प्रदर्शन काउंटरों के लिए एक पोर्टेबल इंटरफ़ेस (लाइब्रेरी के रूप में) है।
* [[पीएपीआई]] आधुनिक माइक्रोप्रोसेसरों पर हार्डवेयर प्रदर्शन गणनाओं के लिए एक पोर्टेबल इंटरफ़ेस (पुस्तकालय के रूप में) है।
* प्रदर्शन इंजीनियरिंग
* निष्पादन इंजीनियरिंग
* प्रदर्शन की भविष्यवाणी
* निष्पादन भविष्यवाणी
* [[प्रदर्शन सुधारना]]
* [[प्रदर्शन सुधारना]]
* [[रनटाइम सत्यापन]]
* [[कार्यावधि सत्यापन]]
* प्रोफ़ाइल-निर्देशित अनुकूलन
* प्रोफ़ाइल-निर्देशित अनुकूलन
* स्टेटिक कोड विश्लेषण
* स्थैतिक कोड विश्लेषण
* [[सॉफ्टवेयर पुरातत्व]]
* [[सॉफ्टवेयर पुरातत्व]]
* वर्स्ट-केस निष्पादन समय (WCET)
* निकृष्‍टतम् निष्पादन समय (डबल्यूसीईटी)
{{div col end}}
{{div col end}}
<!-- please keep entries in alphabetical order -->


== संदर्भ==
== संदर्भ==
{{reflist|30em}}
{{reflist|30em}}


==इस पेज में लापता आंतरिक लिंक की सूची==
*कार्यक्रम अनुकूलन
*गतिशील कार्यक्रम विश्लेषण
*प्रोफ़ाइल-निर्देशित अनुकूलन
*लेनदेन प्रक्रिया
*आवेदन प्रदर्शन प्रबंधन
*वितरित अभिकलन
*प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर सम्मेलन
*निर्देश के अनुसार चक्र
*पायथन (प्रोग्रामिंग भाषा)
*सभा की भाषा
*सिमॉन
*सबसे खराब स्थिति निष्पादन समय
*स्थैतिक कोड विश्लेषण
*प्रदर्शन भविष्यवाणी
==बाहरी संबंध==
==बाहरी संबंध==
* Article "[http://www.ibm.com/developerworks/rational/library/05/1004_gupta/ Need for speed &mdash; Eliminating performance bottlenecks]" on doing execution time analysis of Java applications using [[IBM Rational Application Developer]].
* Article "[http://www.ibm.com/developerworks/rational/library/05/1004_gupta/ Need for speed &mdash; Eliminating performance bottlenecks]" on doing execution time analysis of Java applications using [[IBM Rational Application Developer]].
*[http://software.intel.com/sites/products/documentation/hpc/vtune/windows/jit_profiling.pdf Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer]
*[http://software.intel.com/sites/products/documentation/hpc/vtune/windows/jit_profiling.pdf Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer]


{{DEFAULTSORT:Software Performance Analysis}}[[Category: सॉफ्टवेयर अनुकूलन]]
{{DEFAULTSORT:Software Performance Analysis}}
 
[[Category:All articles needing additional references|Software Performance Analysis]]
[[Category:All articles with unsourced statements|Software Performance Analysis]]
[[Category:Articles needing additional references from January 2009|Software Performance Analysis]]
[[Category:Articles with invalid date parameter in template|Software Performance Analysis]]
[[Category:Articles with short description|Software Performance Analysis]]
[[Category:Articles with unsourced statements from February 2014|Software Performance Analysis]]
[[Category:CS1 français-language sources (fr)]]
[[Category:CS1 maint]]
[[Category:CS1 Ελληνικά-language sources (el)]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 14/12/2022|Software Performance Analysis]]
[[Category:Lua-based templates|Software Performance Analysis]]
[[Category:Machine Translated Page|Software Performance Analysis]]
[[Category:Multi-column templates|Software Performance Analysis]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages using div col with small parameter|Software Performance Analysis]]
[[Category:Pages with script errors|Software Performance Analysis]]
[[Category:Short description with empty Wikidata description|Software Performance Analysis]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Software Performance Analysis]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category|Software Performance Analysis]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates used by AutoWikiBrowser|Cite web]]
[[Category:Templates using TemplateData|Software Performance Analysis]]
[[Category:Templates using under-protected Lua modules|Software Performance Analysis]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia fully protected templates|Div col]]
[[Category:Wikipedia metatemplates]]
[[Category:प्रोफाइलर्स|*]]
[[Category:प्रोफाइलर्स|*]]
 
[[Category:सॉफ्टवेयर अनुकूलन|Software Performance Analysis]]
 
[[Category: Machine Translated Page]]
[[Category:Created On 14/12/2022]]

Latest revision as of 16:42, 28 August 2023

सॉफ्टवेयर इंजीनियरिंग में, प्रोफाइलिंग (रूपरेखा) ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या समय की जटिलता, विशेष निर्देशों का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, निष्पादन इंजीनियरिंग में सहायता करने के लिए कार्य करती है।

प्रोफाइलिंग को यंत्र द्वारा प्रोग्राम स्रोत कोड या इसके बाइनरी साध्य (एक्जीक्यूटेबल) रूप को एक प्रोफाइलर (या कोड प्रोफाइलर) नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, यंत्रीकृत और अनुकरण के तरीके।

प्रोग्राम की घटनाओं का संग्रहण

प्रोफाइलर डेटा एकत्र करने के लिए विभिन्न प्रकार की तकनीकों का उपयोग करते हैं, जिनमें हार्डवेयर व्यवधान, कोड उपकरण, निर्देश सेट अनुकरण, ऑपरेटिंग सिस्टम हुक और निष्पादन गणक सम्मिलित हैं।

प्रोफाइलर्स का उपयोग

कोड एनालिस्ट प्रोफाइलर का ग्राफिकल आउटपुट।

प्रोग्राम के व्यवहार को समझने के लिए प्रोग्राम विश्लेषण उपकरण अत्यंत महत्वपूर्ण हैं। नए आर्किटेक्चर पर प्रोग्राम कितना अच्छा प्रदर्शन करेंगे, इसका मूल्यांकन करने के लिए आर्किटेक्चर को ऐसे उपकरणों की आवश्यकता होती है। सॉफ़्टवेयर लेखकों को अपने प्रोग्राम का विश्लेषण करने और कोड के महत्वपूर्ण अनुभागों की पहचान करने के लिए उपकरणों की आवश्यकता होती है। संकलक लेखक प्रायः ऐसे उपकरणों का उपयोग यह पता लगाने के लिए करते हैं कि उनका निर्देश निर्धारण या शाखा भविष्यवाणी एल्गोरिथ्म कितना अच्छा प्रदर्शन कर रहा है ...

—  परमाणु, पीएलडीआई, '94

एक प्रोफाइलर का आउटपुट हो सकता है-

  • देखी गई घटनाओं का एक सांख्यिकीय सारांश (एक प्रोफ़ाइल) सारांश प्रोफ़ाइल जानकारी को प्रायः स्रोत कोड विवरण के विरुद्ध व्याख्या की जाती है जहां घटनाएं होती हैं, इसलिए माप डेटा का आकार प्रोग्राम के कोड आकार के लिए रैखिक होता है।

/* ------------ स्रोत------------------------ गणना */

0001 यदि X = "A" 0055

0002 तो करें

0003 X गणना में 1 जोड़े 0032

0004 अतिरिक्त

0005 यदि X = "B" 0055

  • रिकॉर्ड की गई घटनाओं का स्रोत (एक अनुरेख)
अनुक्रमिक प्रोग्रामों के लिए, एक सारांश प्रोफ़ाइल प्रायः पर्याप्त होती है, लेकिन समानांतर प्रोग्रामों (संदेशों या समकालन मुद्दों की प्रतीक्षा) में प्रदर्शन की समस्याएं प्रायः घटनाओं के समय के संबंध पर निर्भर करती हैं, इस प्रकार जो हो रहा है उसे समझने के लिए एक पूर्ण अनुरेख की आवश्यकता होती है। एक (पूर्ण) अनुरेख का आकार प्रोग्राम के निर्देश पथ की लंबाई के लिए रैखिक होता है, जिससे यह कुछ हद तक अव्यावहारिक हो जाता है। इसलिए एक प्रोग्राम में एक बिंदु पर एक अनुरेख प्रारम्भ किया जा सकता है और आउटपुट को सीमित करने के लिए दूसरे बिंदु पर समाप्त किया जा सकता है।
  • हाइपरविजर के साथ एक सतत परस्पर क्रिया (उदाहरण के लिए ऑन-स्क्रीन डिस्प्ले के माध्यम से निरंतर या आवधिक निगरानी) यह (अभी भी निष्पादित) प्रोग्राम के बारे में चल रहे मेट्रिक्स को देखने के अलावा निष्पादन के दौरान किसी भी वांछित बिंदु पर अनुरेख को प्रारम्भ या बंद करने का अवसर प्रदान करता है। यह अन्य समानांतर प्रक्रियाओं के साथ अधिक विस्तार से परस्परिक क्रिया की जांच करने के लिए महत्वपूर्ण बिंदुओं पर अतुल्यकालिक प्रक्रियाओं को निलंबित करने का अवसर भी प्रदान करता है।

लंबे समय तक चलने वाले कोड को स्पष्ट करके निष्पादन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या प्रतिरूपक (मॉड्यूल) या प्रोग्राम के पैमाने पर लागू किया जा सकता है।[1] विभिन्न कार्यावधि स्थितियों[2] या विभिन्न भारों को संभालने के लिए इसे अनुकूलित करने के उद्देश्य से, समय के दृष्टिकोण से कोड को समझने के लिए एक प्रोफाइलर का उपयोग किया जा सकता है।[3] प्रोफाइलिंग परिणामों को एक संकलक द्वारा ग्रहण किया जा सकता है जो प्रोफाइल-निर्देशित अनुकूलन प्रदान करता है।[4] प्रोफाइलिंग परिणामों का उपयोग व्यक्तिगत एल्गोरिथम के डिजाइन और अनुकूलन को निर्देशित करने के लिए किया जा सकता है क्रॉस मैचिंग वाइल्डकार्ड एल्गोरिथम एक उदाहरण है।[5] प्रोफाइलर्स कुछ एप्लिकेशन निष्पादन प्रबंधन प्रणालियों में निर्मित होते हैं जो वितरित एप्लिकेशनों में लेन-देन कार्यभार में अंतर्दृष्टि प्रदान करने के लिए प्रोफाइलिंग डेटा को एकत्रित करते हैं।[6]

इतिहास

1970 के दशक के प्रारम्भ से IBM/360 और IBM/370 प्लेटफॉर्म पर निष्पादन-विश्लेषण उपकरण मौजूद थे, जो प्रायः टाइमरअवरोध पर आधारित होते थे, जो निष्पादन कोड में "हॉट स्पॉट" का पता लगाने के लिए लगाए गए टाइमर-अंतराल पर प्रोग्राम स्थिति शब्द (PSW) रिकॉर्ड करते थे।[citation needed] यह नमूनाकरण का एक प्रारंभिक उदाहरण था (नीचे देखें)। 1974 के प्रारम्भ में निर्देश-लगाए अनुरूपक ने पूर्ण अनुरेख और अन्य निष्पादन-निगरानी सुविधाओं की अनुमति दी।[citation needed]

यूनिक्स पर प्रोफाइलर-संचालित प्रोग्राम विश्लेषण 1973 से प्रारम्भ होता है,[7] जब यूनिक्स प्रणाली में एक बुनियादी उपकरण, प्रोफ सम्मिलित था, जो प्रत्येक फलन को सूचीबद्ध करता था और प्रोग्राम निष्पादन समय का कितना उपयोग करता था। 1982 में जीप्रोफ ने अवधारणा को एक पूर्ण कॉल ग्राफ विश्लेषण तक विस्तारित किया।[8]

1994 में, डिजिटल उपकरण निगम के अमिताभ श्रीवास्तव और एलन यूस्टेस ने एटीओएम (ATOM)[9] (ओएम (OM) के साथ विश्लेषण उपकरण) का वर्णन करते हुए एक पेपर प्रकाशित किया। एटीओएम (ATOM) प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता है संकलन समय, यह विश्लेषण किए जाने वाले प्रोग्राम में कोड सम्मिलित करता है। वह सम्मिलित कोड विश्लेषण डेटा को आउटपुट करता है। यह तकनीक स्वयं का विश्लेषण करने के लिए प्रोग्राम को संशोधित करती है - इसे "उपकरण" के रूप में जाना जाता है।

2004 में जीप्रोफ और एटीओएम(ATOM) पेपर दोनों ही 1999 में समाप्त होने वाली 20 साल की अवधि के लिए 50 सबसे प्रभावशाली पीएलडीआई (PLDI) पत्रों की सूची में सम्मिलित हुए।[10]

आउटपुट के आधार पर प्रोफाइलर प्रकार

समतल प्रोफाइलर

समतल प्रोफाइलर्स कॉल से औसत कॉल समय की गणना करते हैं, और कैली या संदर्भ के आधार पर कॉल के समय को नहीं तोड़ते हैं।

कॉल-ग्राफ प्रोफाइलर

कॉल ग्राफ प्रोफाइलर्स[8] कॉल के समय, और कार्यों की आवृत्तियों, और कैली के आधार पर सम्मिलित कॉल-चेन भी दिखाते हैं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं होता है।

इनपुट-संवेदनशील प्रोफाइलर

इनपुट-संवेदनशील प्रोफाइलर्स[11][12][13] इनपुट वर्कलोड की अभिलक्षणों जैसे इनपुट आकार या इनपुट मानों के निष्पादन उपायों से संबंधित समतल या कॉल-ग्राफ प्रोफाइलर्स में एक और आयाम जोड़ते हैं। वे चार्ट उत्पन्न करते हैं जो यह दर्शाते हैं कि किसी एप्लिकेशन का निष्पादन उसके इनपुट के कार्य के रूप में कैसे मापता है।

प्रोफाइलर प्रकारों में डेटा कणिकता

प्रोफाइलर, जो स्वयं भी प्रोग्राम होते हैं, उनके निष्पादन पर जानकारी एकत्र करके लक्षित प्रोग्रामों का विश्लेषण करते हैं। उनकी डेटा कणिकता के आधार पर, कैसे प्रोफाइलर्स जानकारी एकत्र करते हैं, उन्हें घटना आधारित या सांख्यिकीय प्रोफाइलर्स में वर्गीकृत किया जाता है। प्रोफाइलर जानकारी एकत्र करने के लिए प्रोग्राम के निष्पादन को बाधित करते हैं, जिसके परिणामस्वरूप समय मापन में एक सीमित संकल्प हो सकता है, जिसे नमक के दाने के साथ लिया जाना चाहिए। बेसिक ब्लॉक प्रोफाइलर कोड की प्रत्येक पंक्ति को निष्पादित करने के लिए समर्पित कई मशीन घड़ी चक्रों की रिपोर्ट करते हैं, या इन्हें एक साथ जोड़ने के आधार पर एक समय, प्रति बुनियादी ब्लॉक रिपोर्ट किए गए समय द्रुतिका प्राप्ति और चूकने के बीच अंतर को प्रतिबिंबित नहीं कर सकते हैं।[14][15]

घटना-आधारित प्रोफाइलर

यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित प्रोफाइलर्स हैं।

  • जावा- जेवीएमटीआई (जेवीएम टूल्स इंटरफेस) एपीआई (API), पूर्व में जेवीएमपीआई (जेवीएम प्रोफाइलिंग इंटरफेस), कॉल, क्लास-भार, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं के प्रग्रहण के लिए प्रोफाइलरों को हुक प्रदान करता है।
  • एनईटी (NET)- प्रोफाइलिंग एपीआई (API) का उपयोग कर सीएलआर (CLR) को एक सीओएम (COM) सर्वर के रूप में एक प्रोफाइलिंग एजेंट संलग्न कर सकता है। जावा की तरह, कार्यावधि तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, JIT / एंटर / लीव, ऑब्जेक्ट निर्माण, आदि विधि जैसी घटनाओं को प्रग्रहण के लिए। विशेष रूप से शक्तिशाली है कि प्रोफाइलिंग एजेंट लक्ष्य एप्लिकेशन के बाइटकोड को मनमाने तरीके से फिर से लिख सकता है।
  • पायथन: पायथन प्रोफाइलिंग में प्रोफाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और c_ {कॉल, वापसी, अपवाद}, पायथन_ {कॉल, वापसी, अपवाद} जैसी घटनाओं को अनुरेख करने के लिए 'sys.setprofile' फलन का उपयोग करना सम्मिलित है।
  • रूबी- रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफ़ेस का उपयोग करती है। profile.rb में समतल-प्रोफाइलर, मॉड्यूल और रूबी-प्रोफ एक सी (C)-एक्सटेंशन मौजूद हैं।

सांख्यिकीय प्रोफाइलर्स

कुछ प्रोफाइलर प्रतिदर्श द्वारा संचालित होते हैं। एक प्रतिदर्श प्रोफाइलर ऑपरेटिंग सिस्टम अवरोध का उपयोग करके नियमित अंतराल पर लक्ष्य प्रोग्राम कॉल ढेर की जांच करता है। प्रतिदर्श प्रोफाइल प्रायः संख्यात्मक रूप से कम सटीक और विशिष्ट होते हैं, लेकिन लक्ष्य प्रोग्राम को पूर्ण गति से चलाने की अनुमति देते हैं।

परिणामी डेटा सटीक नहीं हैं, लेकिन एक सांख्यिकीय सन्निकटन है। "त्रुटि की वास्तविक मात्रा प्रायः एक से अधिक प्रतिदर्श अवधि होती है। वास्तव में, यदि कोई मान प्रतिदर्श अवधि का n गुना है, तो इसमें अपेक्षित त्रुटि n प्रतिदर्श अवधि का वर्गमूल है।"[16]

व्यवहार में, प्रतिदर्श प्रोफाइलर प्रायः अन्य दृष्टिकोणों की तुलना में लक्ष्य प्रोग्राम के निष्पादन की अधिक सटीक चित्र प्रदान कर सकते हैं, क्योंकि वे लक्ष्य प्रोग्राम के लिए हस्तक्षेप नहीं करते हैं, और इस प्रकार उनके कई दुष्प्रभाव (जैसे मेमोरी द्रुतिका (कैश) या निर्देश पर डिकोडिंग अनुप्रक्रमण) नहीं होते हैं। चूंकि वे निष्पादन की गति को ज्यादा प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे रहेंगे। वे छोटे, जिन्हें प्रायः रूटीन या 'दृढ़' लूप कहा जाता है, की लागत के अधिक-मूल्यांकन के लिए अपेक्षाकृत प्रतिरक्षा हैं। वे उपयोगकर्ता मोड बनाम व्यवधान कारक (इंटरप्टिबल) कर्नेल मोड जैसे प्रणाली कॉल प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं।

फिर भी, व्यवधान को संभालने के लिए कर्नेल कोड में सीपीयू (CPU) चक्रों की मामूली हानि होती है, डायवर्टेड कैश उपयोग होता है, और अबाधित कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ है।

समर्पित हार्डवेयर इससे आगे जा सकता है एआरएस कॉर्टेक्स-एम3 (ARM Cortex-M3) और कुछ हाल के एमआईपीएस (MIPS) प्रोसेसर जेटीएजी (JTAG) इंटरफ़ेस में एक पीसीएससैम्पल (PCSAMPLE) पंजीकृत है, जो प्रोग्राम गणक को वास्तव में असंसूचनीय तरीके से प्रतिरूप करता है, जिससे एक समलत प्रोफाइल के हस्तक्षेप करने वाले संग्रह को अनुमति मिलती है।

जावा/प्रबंधित कोड के लिए प्रायः उपयोग किए जाने वाले कुछ[17] सांख्यिकीय प्रोफाइलर स्मार्टबियर सॉफ्टवेयर के एक्यू समय (AQtime)[18] और माइक्रोसॉफ्ट के सीएलआर(CLR) प्रोफाइलर हैं।[19] वे प्रोफाइलर प्राकृत कोड रूपरेखा का भी समर्थन करते हैं, साथ ही Apple Inc. का शार्क (OSX),[20] ओप्रोफाइल (लिनक्स),[21] इंटेल वीट्यून (Intel VTune) और समांतर प्रवर्धक (इंंटेल समांतर स्टुडियो का हिस्सा), और ओरेकल कार्पोरेशन प्रदर्शन विश्लेषक,[22] अन्य लोगों के बीच।

उपकरण (इंस्ट्रुमेंटेशन)

यह तकनीक आवश्यक जानकारी एकत्र करने के लिए लक्ष्य प्रोग्राम में प्रभावी रूप से निर्देश जोड़ती है। ध्यान दें कि किसी प्रोग्राम को यंत्रीकृत करने से प्रदर्शन में परिवर्तन हो सकता है, और कुछ मामलों में गलत परिणाम और/या हाइजेनबग हो सकते हैं। प्रभाव इस बात पर निर्भर करेगा कि कौन सी जानकारी एकत्र की जा रही है, रिपोर्ट किए गए समय विवरण के स्तर पर, और बुनियादी ब्लॉक रूपरेखा का उपयोग उपकरण के साथ किया जाता है या नहीं।[23] उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल की गणना के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, यह गणना करने से कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में सूचना एकत्र करने के लिए विशेष हार्डवेयर होते हैं इस स्थिति में प्रोग्राम पर प्रभाव न्यूनतम है।

उपकरण प्रोफाइलरों के लिए उपलब्ध नियंत्रण के स्तर और समय संकल्प की मात्रा निर्धारित करने के लिए महत्वपूर्ण है।

  • नियमावली (मैनुअल)- प्रोग्रामर द्वारा निष्पादित, उदाहरण- स्पष्ट रूप से कार्यावधि की गणना करने के लिए निर्देशों को जोड़कर, माप एपीआई (API) जैसे कि एप्लिकेशन प्रतिक्रिया मापन मानक के लिए घटनाओं या कॉलों की गणना करें।
  • स्वचालित स्रोत स्तर- उपकरण नीति के अनुसार स्वचालित उपकरण द्वारा स्रोत कोड में जोड़ा गया उपकरण।
  • मध्यवर्ती भाषा- कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) बाइनरी ऑफसेट पुनर्लेखन समस्याओं से बचने के लिए असेम्बली या विघटित बाइटकोड में जोड़ा गया उपकरण।
  • संकलक ने सहायता की
  • बाइनरी अनुवाद- उपकरण संकलित निष्पादन योग्य में उपकरण जोड़ता है।
  • कार्यावधि इंस्ट्रूमेंटेशन- निष्पादन से ठीक पहले कोड यंत्रीकृत किया जाता है। प्रोग्राम रन पूरी तरह से टूल द्वारा पर्यवेक्षण और नियंत्रित किया जाता है।
  • कार्यावधि अन्तःक्षेपण- कार्यावधि उपकरण की तुलना में अधिक हल्का होता है। सहायक कार्यों में जाने के लिए कोड को कार्यावधि पर संशोधित किया जाता है।

अनुवादक उपकरण

  • अनुवादक डिबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकते हैं क्योंकि अनुवादक प्रत्येक लक्ष्य विवरण का सामना करता है। एक बाइटकोड, नियंत्रण तालिका या जेआईटी(JIT) अनुवादक के तीन उदाहरण हैं जो प्रायः लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह अवसरों को सक्षम करते हैं।

हाइपरविजर/अनुरूपक

  • हाइपरविजर- हाइपरविजर के तहत (प्रायः) अपरिवर्तित प्रोग्राम चलाकर डेटा एकत्र किया जाता है। उदाहरण- सिमॉन
  • अनुरूपक और हाइपरविजर- निर्देश निर्धारित अनुरूपक के तहत अपरिवर्तित प्रोग्राम चलाकर डेटा को अंतःक्रियात्मक रूप से और चयनात्मक रूप से एकत्र किया जाता है।

यह भी देखें

संदर्भ

  1. "सी # डेस्कटॉप एप्लिकेशन में प्रदर्शन बाधा कैसे खोजें?". Stack Overflow. 2012.
  2. Krauss, Kirk J (2017). "फोकस के साथ परफॉर्मेंस प्रोफाइलिंग". Develop for Performance.
  3. "कोड प्रोफाइलिंग क्या है? कोड प्रोफाइलर्स के 3 प्रकार सीखें". Stackify Developer Tips, Tricks and Resources. Disqus. 2016.
  4. Lawrence, Eric (2016). "प्रोफ़ाइल निर्देशित अनुकूलन के साथ आरंभ करना". testslashplain. WordPress.
  5. Krauss, Kirk (2018). "मैचिंग वाइल्डकार्ड: बिग डेटा के लिए एक बेहतर एल्गोरिथम". Develop for Performance.
  6. ".नेट प्रोफाइलरों की सूची: 3 विभिन्न प्रकार और आपको उन सभी की आवश्यकता क्यों है". Stackify Developer Tips, Tricks and Resources. Disqus. 2016.
  7. Unix Programmer's Manual, 4th Edition
  8. 8.0 8.1 S.L. Graham, P.B. Kessler, and M.K. McKusick, gprof: a Call Graph Execution Profiler, Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No 6, pp. 120-126; doi:10.1145/800230.806987
  9. A. Srivastava and A. Eustace, ATOM: A system for building customized program analysis tools, Proceedings of the ACM SIGPLAN Conference on Programming language design and implementation (PLDI '94), pp. 196-205, 1994; ACM SIGPLAN Notices - Best of PLDI 1979-1999 Homepage archive, Vol. 39, No. 4, pp. 528-539; doi:10.1145/989393.989446
  10. 20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor
  11. E. Coppa, C. Demetrescu, and I. Finocchi, Input-Sensitive Profiling, IEEE Trans. Software Eng. 40(12): 1185-1205 (2014); doi:10.1109/TSE.2014.2339825
  12. D. Zaparanuks and M. Hauswirth, Algorithmic Profiling, Proceedings of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2012), ACM SIGPLAN Notices, Vol. 47, No. 6, pp. 67-76, 2012; doi:10.1145/2254064.2254074
  13. T. Kustner, J. Weidendorfer, and T. Weinzierl, Argument Controlled Profiling, Proceedings of Euro-Par 2009 – Parallel Processing Workshops, Lecture Notes in Computer Science, Vol. 6043, pp. 177-184, 2010; doi:10.1007/978-3-642-14122-5 22
  14. "टाइमिंग और प्रोफाइलिंग - बेसिक ब्लॉक प्रोफाइलर्स". OpenStax CNX Archive.
  15. Ball, Thomas; Larus, James R. (1994). "इष्टतम रूप से प्रोफाइलिंग और ट्रेसिंग कार्यक्रम" (PDF). ACM Transactions on Programming Languages and Systems. ACM Digital Library. 16 (4): 1319–1360. doi:10.1145/183432.183527. S2CID 6897138. Archived from the original (PDF) on 2018-05-18. Retrieved 2018-05-18.
  16. Statistical Inaccuracy of gprof Output Archived 2012-05-29 at the Wayback Machine
  17. "लोकप्रिय सी # प्रोफाइलर्स". Gingtage. 2014.
  18. "नमूना प्रोफाइलर - सिंहावलोकन". AQTime 8 Reference. SmartBear Software. 2018.
  19. Wenzal, Maira; et al. (2017). "प्रोफाइलिंग अवलोकन". Microsoft .NET Framework Unmanaged API Reference. Microsoft.
  20. "प्रदर्शन उपकरण". Apple Developer Tools. Apple, Inc. 2013.
  21. Netto, Zanella; Arnold, Ryan S. (2012). "Power पर Linux के प्रदर्शन का मूल्यांकन करें". IBM DeveloperWorks.
  22. Schmidl, Dirk; Terboven, Christian; an Mey, Dieter; Müller, Matthias S. (2013). ओपनएमपी टास्क-पैरेलल प्रोग्राम्स के लिए परफॉरमेंस टूल्स की उपयुक्तता. Proc. 7th Int'l Workshop on Parallel Tools for High Performance Computing. pp. 25–37. ISBN 9783319081441.
  23. Carleton, Gary; Kirkegaard, Knud; Sehr, David (1998). "प्रोफ़ाइल-निर्देशित अनुकूलन". Dr. Dobb's Journal.

बाहरी संबंध