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

From Vigyanwiki
No edit summary
No edit summary
Line 4: Line 4:
[[सॉफ्टवेयर इंजीनियरिंग]] में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या [[कम्प्यूटेशनल जटिलता सिद्धांत|समय की जटिलता]], विशेष [[निर्देश सेट सिम्युलेटर|निर्देशों]] का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, [[प्रदर्शन इंजीनियरिंग|निष्पादन इंजीनियरिंग]] में सहायता करने के लिए कार्य करती है।
[[सॉफ्टवेयर इंजीनियरिंग]] में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या [[कम्प्यूटेशनल जटिलता सिद्धांत|समय की जटिलता]], विशेष [[निर्देश सेट सिम्युलेटर|निर्देशों]] का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, [[प्रदर्शन इंजीनियरिंग|निष्पादन इंजीनियरिंग]] में सहायता करने के लिए कार्य करती है।


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


== प्रोग्राम की घटनाओं का संग्रहण ==
== प्रोग्राम की घटनाओं का संग्रहण ==
Line 11: Line 11:
== प्रोफाइलर्स का उपयोग ==
== प्रोफाइलर्स का उपयोग ==
[[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}}

Revision as of 20:58, 20 December 2022

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

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

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

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

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

CodeAnalyst प्रोफाइलर का ग्राफिकल आउटपुट।

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

—  परमाणु, पीएलडीआई, '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] जब यूनिक्स सिस्टम में एक बुनियादी उपकरण शामिल था, prof, जिसने प्रत्येक फ़ंक्शन को सूचीबद्ध किया और कितने प्रोग्राम निष्पादन समय का उपयोग किया। 1982 में gprof अवधारणा को पूर्ण कॉल ग्राफ़ विश्लेषण तक विस्तारित किया।[8] 1994 में, डिजिटल उपकरण निगम के अमिताभ श्रीवास्तव और एलन यूस्टेस ने एटीओएम का वर्णन करते हुए एक पेपर प्रकाशित किया[9] (ओएम के साथ विश्लेषण उपकरण)। एटीओएम प्लेटफॉर्म एक प्रोग्राम को अपने स्वयं के प्रोफाइलर में परिवर्तित करता है: संकलन समय पर, यह विश्लेषण किए जाने वाले कार्यक्रम में कोड सम्मिलित करता है। वह डाला गया कोड विश्लेषण डेटा आउटपुट करता है। यह तकनीक - स्वयं का विश्लेषण करने के लिए एक प्रोग्राम को संशोधित करना - इंस्ट्रुमेंटेशन (कंप्यूटर प्रोग्रामिंग) के रूप में जाना जाता है।

2004 में दोनों gprof और एटीओएम पेपर 1999 में समाप्त होने वाली 20 साल की अवधि के लिए प्रोग्रामिंग लैंग्वेज डिजाइन और कार्यान्वयन पत्रों पर 50 सबसे प्रभावशाली सम्मेलन की सूची में दिखाई दिए।[10]


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

फ्लैट प्रोफाइलर

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

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

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

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

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

प्रोफाइलर प्रकारों में डेटा ग्रैन्युलैरिटी

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


इवेंट-आधारित प्रोफाइलर

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

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

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

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

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

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

समर्पित हार्डवेयर इससे आगे जा सकता है: ARM Cortex-M3 और कुछ हाल के MIPS प्रोसेसर JTAG इंटरफ़ेस में एक PCSAMPLE रजिस्टर है, जो कार्यक्रम गणक को वास्तव में undetectable तरीके से सैंपल करता है, जिससे एक फ्लैट प्रोफाइल के गैर-दखल देने वाले संग्रह की अनुमति मिलती है।

कुछ आमतौर पर इस्तेमाल किया[17] Java/प्रबंधित कोड के लिए सांख्यिकीय प्रोफाइलर SmartBear Software का AQtime हैं[18] और माइक्रोसॉफ्ट का सीएलआर प्रोफाइलर[19] वे प्रोफाइलर Apple Inc. के Apple Developer Tools#Shark (OSX) के साथ नेटिव कोड प्रोफाइलिंग का भी समर्थन करते हैं,[20] ओप्रोफाइल (लिनक्स),[21] Intel VTune और Parallel Amplifier (Intel Parallel Studio का हिस्सा), और Oracle Corporation Performance Analyzer,[22] दूसरों के बीच में।

इंस्ट्रुमेंटेशन

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

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

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

दुभाषिया उपकरण

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

हाइपरवाइजर/सिम्युलेटर

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

यह भी देखें


संदर्भ

  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.


इस पेज में लापता आंतरिक लिंक की सूची

  • कार्यक्रम अनुकूलन
  • गतिशील कार्यक्रम विश्लेषण
  • प्रोफ़ाइल-निर्देशित अनुकूलन
  • लेनदेन प्रक्रिया
  • आवेदन प्रदर्शन प्रबंधन
  • वितरित अभिकलन
  • प्रोग्रामिंग भाषा डिजाइन और कार्यान्वयन पर सम्मेलन
  • निर्देश के अनुसार चक्र
  • पायथन (प्रोग्रामिंग भाषा)
  • सभा की भाषा
  • सिमॉन
  • सबसे खराब स्थिति निष्पादन समय
  • स्थैतिक कोड विश्लेषण
  • प्रदर्शन भविष्यवाणी

बाहरी संबंध