प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग): Difference between revisions
No edit summary |
No edit summary |
||
Line 32: | Line 32: | ||
लंबे समय तक चलने वाले कोड को स्पष्ट करके निष्पादन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या प्रतिरूपक (मॉड्यूल) या प्रोग्राम के पैमाने पर लागू किया जा सकता है।<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> | लंबे समय तक चलने वाले कोड को स्पष्ट करके निष्पादन बाधाओं की पहचान करने के लिए एक प्रोफाइलर को एक व्यक्तिगत विधि या प्रतिरूपक (मॉड्यूल) या प्रोग्राम के पैमाने पर लागू किया जा सकता है।<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 के दशक | 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>प्रोफ</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 में, [[डिजिटल उपकरण निगम]] के अमिताभ श्रीवास्तव और [[एलन यूस्टेस]] ने एटीओएम | |||
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 में | 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" /> कॉल के समय, और कार्यों की आवृत्तियों, और कैली के आधार पर सम्मिलित कॉल-चेन भी दिखाते हैं। कुछ उपकरणों में पूर्ण संदर्भ संरक्षित नहीं होता है। | ||
=== इनपुट-संवेदनशील प्रोफाइलर === | === इनपुट-संवेदनशील प्रोफाइलर === | ||
इनपुट-संवेदनशील | इनपुट-संवेदनशील प्रोफाइलर्स<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> | ||
===घटना-आधारित प्रोफाइलर === | |||
यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित प्रोफाइलर्स हैं। | |||
=== | * [[जावा (प्रोग्रामिंग भाषा)|जावा]]- जेवीएमटीआई ([[जावा वर्चुअल मशीन टूल्स इंटरफ़ेस|जेवीएम टूल्स इंटरफेस]]) एपीआई (API), पूर्व में जेवीएमपीआई (जेवीएम प्रोफाइलिंग इंटरफेस), कॉल, क्लास-भार, अनलोड, थ्रेड एंटर लीव जैसी घटनाओं के प्रग्रहण के लिए प्रोफाइलरों को हुक प्रदान करता है। | ||
यहां सूचीबद्ध प्रोग्रामिंग भाषाओं में इवेंट-आधारित | * एनईटी (NET)- प्रोफाइलिंग एपीआई (''API'') का उपयोग कर सीएलआर (''CLR)'' को एक सीओएम (COM) सर्वर के रूप में एक प्रोफाइलिंग एजेंट संलग्न कर सकता है। जावा की तरह, कार्यावधि तब एजेंट को विभिन्न कॉलबैक प्रदान करता है, JIT / एंटर / लीव, ऑब्जेक्ट निर्माण, आदि विधि जैसी घटनाओं को प्रग्रहण के लिए। विशेष रूप से शक्तिशाली है कि प्रोफाइलिंग एजेंट लक्ष्य एप्लिकेशन के बाइटकोड को मनमाने तरीके से फिर से लिख सकता है। | ||
* [[जावा (प्रोग्रामिंग भाषा)]] | * पायथन: पायथन प्रोफाइलिंग में प्रोफाइल मॉड्यूल, हॉटशॉट (जो कॉल-ग्राफ आधारित है), और c_ {कॉल, वापसी, अपवाद}, पायथन_ {कॉल, वापसी, अपवाद} जैसी घटनाओं को अनुरेख करने के लिए 'sys.setprofile' फलन का उपयोग करना सम्मिलित है। | ||
* | *[[रूबी (प्रोग्रामिंग भाषा)|रूबी]]- रूबी भी प्रोफाइलिंग के लिए पायथन के समान इंटरफ़ेस का उपयोग करती है। profile.rb में समतल-प्रोफाइलर, मॉड्यूल और रूबी-प्रोफ एक सी (C)-एक्सटेंशन मौजूद हैं। | ||
* पायथन | |||
* [[रूबी (प्रोग्रामिंग भाषा)]] | |||
=== सांख्यिकीय प्रोफाइलर === | === सांख्यिकीय प्रोफाइलर === | ||
Line 97: | Line 95: | ||
== यह भी देखें == | == यह भी देखें == | ||
{{div col|small=yes|colwidth=20em}} | {{div col|small=yes|colwidth=20em}} | ||
* [[एल्गोरिथम दक्षता]] | * [[एल्गोरिथम दक्षता]] | ||
Line 114: | Line 110: | ||
* वर्स्ट-केस निष्पादन समय (WCET) | * वर्स्ट-केस निष्पादन समय (WCET) | ||
{{div col end}} | {{div col end}} | ||
== संदर्भ== | == संदर्भ== | ||
{{reflist|30em}} | {{reflist|30em}} | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* Article "[http://www.ibm.com/developerworks/rational/library/05/1004_gupta/ Need for speed — 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 — Eliminating performance bottlenecks]" on doing execution time analysis of Java applications using [[IBM Rational Application Developer]]. |
Revision as of 23:37, 20 December 2022
This article needs additional citations for verification. (January 2009) (Learn how and when to remove this template message) |
Part of a series on |
Software development |
---|
सॉफ्टवेयर इंजीनियरिंग में, प्रोफाइलिंग ("प्रोग्राम प्रोफाइलिंग", "सॉफ्टवेयर प्रोफाइलिंग") गतिशील प्रोग्राम विश्लेषण का एक रूप है जो मापता है, उदाहरण के लिए, किसी प्रोग्राम का स्थान (मेमोरी) या समय की जटिलता, विशेष निर्देशों का उपयोग, या आवृत्ति और फलन कॉल की अवधि। प्रायः, प्रोफाइलिंग जानकारी प्रोग्राम अनुकूलीकरण और अधिक विशेष रूप से, निष्पादन इंजीनियरिंग में सहायता करने के लिए कार्य करती है।
प्रोफाइलिंग को यंत्र द्वारा प्रोग्राम स्रोत कोड या इसके बाइनरी साध्य (एक्जीक्यूटेबल) रूप को एक प्रोफाइलर (या कोड प्रोफाइलर) नामक उपकरण का उपयोग करके प्राप्त किया जाता है। प्रोफाइलर कई अलग-अलग तकनीकों का उपयोग कर सकते हैं, जैसे कि घटना-आधारित, सांख्यिकीय, यंत्रीकृत और अनुकरण के तरीके।
प्रोग्राम की घटनाओं का संग्रहण
प्रोफाइलर डेटा एकत्र करने के लिए विभिन्न प्रकार की तकनीकों का उपयोग करते हैं, जिनमें हार्डवेयर व्यवधान, कोड उपकरण, निर्देश सेट अनुकरण, ऑपरेटिंग सिस्टम हुक और निष्पादन गणक सम्मिलित हैं।
प्रोफाइलर्स का उपयोग
प्रोग्राम के व्यवहार को समझने के लिए प्रोग्राम विश्लेषण उपकरण अत्यंत महत्वपूर्ण हैं। नए आर्किटेक्चर पर प्रोग्राम कितना अच्छा प्रदर्शन करेंगे, इसका मूल्यांकन करने के लिए आर्किटेक्चर को ऐसे उपकरणों की आवश्यकता होती है। सॉफ़्टवेयर लेखकों को अपने प्रोग्राम का विश्लेषण करने और कोड के महत्वपूर्ण अनुभागों की पहचान करने के लिए उपकरणों की आवश्यकता होती है। संकलक लेखक प्रायः ऐसे उपकरणों का उपयोग यह पता लगाने के लिए करते हैं कि उनका निर्देश निर्धारण या शाखा भविष्यवाणी एल्गोरिथ्म कितना अच्छा प्रदर्शन कर रहा है ...
— परमाणु, पीएलडीआई, '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] व्यवहार में, सैंपलिंग प्रोफाइलर अक्सर अन्य दृष्टिकोणों की तुलना में लक्ष्य कार्यक्रम के निष्पादन की अधिक सटीक तस्वीर प्रदान कर सकते हैं, क्योंकि वे लक्ष्य कार्यक्रम के लिए घुसपैठ नहीं करते हैं, और इस प्रकार उनके कई दुष्प्रभाव नहीं होते हैं (जैसे मेमोरी कैश या निर्देश पर डिकोडिंग पाइपलाइन)। चूंकि वे निष्पादन की गति को ज्यादा प्रभावित नहीं करते हैं, वे उन मुद्दों का पता लगा सकते हैं जो अन्यथा छिपे रहेंगे। वे छोटे, जिन्हें अक्सर रूटीन या 'तंग' लूप कहा जाता है, की लागत के अधिक-मूल्यांकन के प्रति अपेक्षाकृत प्रतिरोधी होते हैं। वे उपयोगकर्ता मोड बनाम इंटरप्टिबल कर्नेल मोड जैसे सिस्टम कॉल प्रोसेसिंग में बिताए गए समय की सापेक्ष मात्रा दिखा सकते हैं।
फिर भी, व्यवधान को संभालने के लिए कर्नेल कोड में सीपीयू चक्रों की मामूली हानि होती है, डायवर्टेड कैश उपयोग होता है, और अबाधित कर्नेल कोड (माइक्रोसेकंड-रेंज गतिविधि) में होने वाले विभिन्न कार्यों को अलग करने में असमर्थ है।
समर्पित हार्डवेयर इससे आगे जा सकता है: 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] उदाहरण के लिए, प्रत्येक प्रक्रिया/नियमित कॉल को गिनने के लिए कोड जोड़ने से संभवतः प्रत्येक कथन का कितनी बार पालन किया जाता है, यह गिनने से कम प्रभाव पड़ेगा। कुछ कंप्यूटरों में सूचना एकत्र करने के लिए विशेष हार्डवेयर होते हैं; इस मामले में कार्यक्रम पर प्रभाव न्यूनतम है।
इंस्ट्रुमेंटेशन नियंत्रण के स्तर और प्रोफाइलरों के लिए उपलब्ध समय संकल्प की मात्रा निर्धारित करने के लिए महत्वपूर्ण है।
- मैनुअल: प्रोग्रामर द्वारा निष्पादित, उदा। स्पष्ट रूप से रनटाइम की गणना करने के लिए निर्देशों को जोड़कर, माप एपीआई जैसे कि आवेदन प्रतिक्रिया माप मानक के लिए घटनाओं या कॉलों की गणना करें।
- स्वचालित स्रोत स्तर: उपकरण नीति के अनुसार स्वचालित उपकरण द्वारा स्रोत कोड में जोड़ा गया उपकरण।
- इंटरमीडिएट भाषा: कई उच्च-स्तरीय स्रोत भाषाओं के लिए समर्थन देने और (गैर-प्रतीकात्मक) बाइनरी ऑफ़सेट री-राइटिंग मुद्दों से बचने के लिए असेंबली भाषा या विघटित बाईटकोड में जोड़ा गया इंस्ट्रूमेंटेशन।
- कंपाइलर ने सहायता की
- बाइनरी अनुवाद: उपकरण एक संकलित निष्पादन योग्य में इंस्ट्रूमेंटेशन जोड़ता है।
- रनटाइम इंस्ट्रूमेंटेशन: सीधे निष्पादन से पहले कोड को इंस्ट्रूमेंट किया जाता है। प्रोग्राम रन पूरी तरह से टूल द्वारा पर्यवेक्षण और नियंत्रित किया जाता है।
- रनटाइम इंजेक्शन: रनटाइम इंस्ट्रूमेंटेशन की तुलना में अधिक हल्का। सहायक कार्यों के लिए छलांग लगाने के लिए कोड को रनटाइम पर संशोधित किया जाता है।
दुभाषिया उपकरण
- दुभाषिया डिबग विकल्प प्रदर्शन मेट्रिक्स के संग्रह को सक्षम कर सकता है क्योंकि दुभाषिया प्रत्येक लक्ष्य कथन का सामना करता है। एक बायटेकोड, नियंत्रण तालिका या समय-समय पर संकलन दुभाषिया तीन उदाहरण हैं जो आमतौर पर लक्ष्य कोड के निष्पादन पर पूर्ण नियंत्रण रखते हैं, इस प्रकार अत्यंत व्यापक डेटा संग्रह अवसरों को सक्षम करते हैं।
हाइपरवाइजर/सिम्युलेटर
- हाइपरवाइजर: हाइपरवाइजर के तहत (आमतौर पर) अनमॉडिफाइड प्रोग्राम चलाकर डेटा एकत्र किया जाता है। उदाहरण: सिमोन
- सिम्युलेटर और हाइपरविजर: निर्देश सेट सिम्युलेटर के तहत असंशोधित कार्यक्रम चलाकर डेटा को इंटरैक्टिव और चुनिंदा रूप से एकत्र किया गया।
यह भी देखें
- एल्गोरिथम दक्षता
- बेंचमार्क (कंप्यूटिंग)
- जावा प्रदर्शन
- प्रदर्शन विश्लेषण उपकरणों की सूची
- प्रदर्शन अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस आधुनिक माइक्रोप्रोसेसरों पर हार्डवेयर प्रदर्शन काउंटरों के लिए एक पोर्टेबल इंटरफ़ेस (लाइब्रेरी के रूप में) है।
- प्रदर्शन इंजीनियरिंग
- प्रदर्शन की भविष्यवाणी
- प्रदर्शन सुधारना
- रनटाइम सत्यापन
- प्रोफ़ाइल-निर्देशित अनुकूलन
- स्टेटिक कोड विश्लेषण
- सॉफ्टवेयर पुरातत्व
- वर्स्ट-केस निष्पादन समय (WCET)
संदर्भ
- ↑ "सी # डेस्कटॉप एप्लिकेशन में प्रदर्शन बाधा कैसे खोजें?". Stack Overflow. 2012.
- ↑ Krauss, Kirk J (2017). "फोकस के साथ परफॉर्मेंस प्रोफाइलिंग". Develop for Performance.
- ↑ "कोड प्रोफाइलिंग क्या है? कोड प्रोफाइलर्स के 3 प्रकार सीखें". Stackify Developer Tips, Tricks and Resources. Disqus. 2016.
- ↑ Lawrence, Eric (2016). "प्रोफ़ाइल निर्देशित अनुकूलन के साथ आरंभ करना". testslashplain. WordPress.
- ↑ Krauss, Kirk (2018). "मैचिंग वाइल्डकार्ड: बिग डेटा के लिए एक बेहतर एल्गोरिथम". Develop for Performance.
- ↑ ".नेट प्रोफाइलरों की सूची: 3 विभिन्न प्रकार और आपको उन सभी की आवश्यकता क्यों है". Stackify Developer Tips, Tricks and Resources. Disqus. 2016.
- ↑ Unix Programmer's Manual, 4th Edition
- ↑ 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
- ↑ 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
- ↑ 20 Years of PLDI (1979–1999): A Selection, Kathryn S. McKinley, Editor
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ "टाइमिंग और प्रोफाइलिंग - बेसिक ब्लॉक प्रोफाइलर्स". OpenStax CNX Archive.
- ↑ 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.
- ↑ Statistical Inaccuracy of
gprof
Output Archived 2012-05-29 at the Wayback Machine - ↑ "लोकप्रिय सी # प्रोफाइलर्स". Gingtage. 2014.
- ↑ "नमूना प्रोफाइलर - सिंहावलोकन". AQTime 8 Reference. SmartBear Software. 2018.
- ↑ Wenzal, Maira; et al. (2017). "प्रोफाइलिंग अवलोकन". Microsoft .NET Framework Unmanaged API Reference. Microsoft.
- ↑ "प्रदर्शन उपकरण". Apple Developer Tools. Apple, Inc. 2013.
- ↑ Netto, Zanella; Arnold, Ryan S. (2012). "Power पर Linux के प्रदर्शन का मूल्यांकन करें". IBM DeveloperWorks.
- ↑ 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.
- ↑ Carleton, Gary; Kirkegaard, Knud; Sehr, David (1998). "प्रोफ़ाइल-निर्देशित अनुकूलन". Dr. Dobb's Journal.
बाहरी संबंध
- Article "Need for speed — Eliminating performance bottlenecks" on doing execution time analysis of Java applications using IBM Rational Application Developer.
- Profiling Runtime Generated and Interpreted Code using the VTune Performance Analyzer