2011-10-13 24 views
5

मैं जानना चाहूंगा अगर वहाँ उपकरण हैं जो कर सकते हैंमल्टीथ्रेड किए गए सी ++ एप्लिकेशन कॉल ग्राफ़ को देखने के लिए टूल्स, मल्टीथ्रेड कोड कवरेज?

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

    अगर मैं अपने प्रश्न को स्पष्ट रूप से समझा नहीं गया हूं तो मैं क्षमा चाहता हूं और मुझे कोई विवरण प्रदान करना अच्छा लगेगा।

+0

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

+0

@ जस्टिन आह मैं यह उल्लेख करना भूल गया कि जिस एप्लिकेशन पर मैं काम कर रहा हूं वह सी ++ में है। – fantasticsid

+0

@ फ़ैंटैस्टिक: मैंने आपकी रुचि को दर्शाने के लिए अपना शीर्षक संपादित किया। –

उत्तर

1

VTune Profiler इंटेल से आप क्या पूछना के कुछ कर सकते हैं।

ताले और वेट्स: vtune साइट से जल्दी से समानांतर कार्यक्रमों में धीमी गति से प्रदर्शन का एक आम कारण खोजने के लिए इंटेल प्रदर्शन उपकरण की रूपरेखा का उपयोग करें: एक ताला पर अधिक प्रतीक्षा न करते हुए कोर इंतजार दौरान underutilized कर रहे हैं।

टाइमलाइन थ्रेड व्यवहार को विज़ुअलाइज़ करता है: देखें कि थ्रेड चल रहे हैं और प्रतीक्षा करते हैं, और जब संक्रमण होते हैं।

यदि आप ओपन सोर्स/फ्री के लिए कुछ ढूंढ रहे थे, तो Valgrind में हेल्ग्रिंड नामक एक प्रयोगात्मक टूल है जो माना जाता है कि बहु-थ्रेडेड प्रोग्राम्स में दौड़ मिलती है। मैं इस पर टिप्पणी नहीं कर सकता, मैंने इसका इस्तेमाल नहीं किया है।

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

लॉक विवाद की पहचान करने के लिए मेरी पसंदीदा तकनीक एक विस्तारित म्यूटेक्स कक्षा का उपयोग करना है जो प्रत्येक उदाहरण पर किए गए सभी कार्यों को रिकॉर्ड करती है। मैं इसे बहुत हल्के तरीके से करता हूं, ताकि एप्लिकेशन प्रदर्शन बड़े पैमाने पर परिवर्तित न हो।

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

1

जबकि मैं आपकी अधिकांश समस्याओं पर मदद नहीं कर सकता (अभी तक!), मुझे लगता है कि हमारे C++ Test Coverage टूल आपको बहु-परीक्षण परीक्षण कवरेज डेटा को आसानी से प्रदान कर सकता है।

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

मल्टीह्रेड परीक्षण कवरेज प्राप्त करने की चाल यह जानना है कि हम आपको नियंत्रण प्रदान करते हैं ताकि यह परिभाषित किया जा सके कि उपकरण जांच कैसे काम करती है; वे मैक्रोज़ हैं। तो बजाय एक बूलियन सरणी पर अनिवार्य रूप से

probe[n]=true; 

के डिफ़ॉल्ट मैक्रो का उपयोग, आप के बजाय एक पूर्णांक सरणी (या चतुराई से यह मान precomputing द्वारा सस्ता कुछ) पर

probe[n]|=1<<threadid; 

लागू कर सकते हैं। यह लागू करने के लिए कोड की केवल कुछ पंक्तियां लेता है।

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

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

0

कंसुरेंसी विजुअलाइज़र (दृश्य स्टूडियो पर एक मुफ्त ऐड) समानांतर धागे का वास्तव में अच्छा विज़ुअलाइज़र है। म्यूटेक्स ताले, प्रीम्प्शन और कॉलस्टैक को विज़ुअलाइज़ करना शामिल है। https://msdn.microsoft.com/en-us/library/dd537632.aspx