2013-06-05 12 views
7

क्यों अवरुद्ध कर रहा है, मैं एक टेस्ला टी 10 प्रोसेसर (गणना क्षमता 1.3) से एक टेस्ला एम 2075 (गणना क्षमता 2.0) में लिखे गए एल्गोरिदम को स्विच करने का प्रयास कर रहा हूं। स्विचिंग करते समय मुझे आश्चर्य हुआ कि मेरा एल्गोरिदम धीमा हो गया है। मैंने इसका विश्लेषण किया और पाया कि ऐसा लगता है क्योंकि नई मशीन पर कूडा धाराएं अवरुद्ध हो रही हैं। मेरे एल्गोरिदम में 3 मुख्य कार्य होते हैं जिन्हें विभाजित और समानांतर में चलाया जा सकता है: स्मृति पुनर्गठन (जो सीपीयू पर किया जा सकता है), मेजबान से डिवाइस पर प्रतिलिपि बनाने की स्मृति, और डिवाइस पर कर्नेल निष्पादन। जब तक पिछले गिरी किया जाता है Correct stream executionयह निर्धारित करने के लिए कि एक CUDA स्ट्रीम

नई मशीन पर धाराओं ब्लॉक सीपीयू गणना शुरू करने से पहले हालांकि: पुराने मशीन बंटवारे पर धाराओं 3 कार्य इस तरह (NVIDIA दृश्य प्रोफाइलर से सभी स्क्रीनशॉट) ओवरलैप करने की अनुमति दी , को क्रियान्वित करने के रूप में यहां देखा जा सकता: 3 stream execution

आप शीर्ष पंक्ति को देख सकते हैं, सभी नारंगी ब्लॉक cudaStreamSynchronize जो ब्लॉक जब तक पिछले गिरी निष्पादन किया जाता है, भले ही उस गिरी एक पूरी तरह से अलग धारा पर कॉल कर रहे हैं। ऐसा लगता है कि धाराओं के माध्यम से पहले भाग के लिए काम करना और सही ढंग से समानांतरता है, लेकिन उसके बाद समस्या शुरू होती है, इसलिए मैंने सोचा कि शायद यह किसी चीज़ पर अवरुद्ध हो रहा है और मैंने धाराओं की संख्या बढ़ाने की कोशिश की जिसने मुझे यह परिणाम दिया: 12 stream execution

यहां आप देख सकते हैं कि किसी कारण से केवल पहली 4 धाराएं अवरुद्ध हो रही हैं, इसके बाद यह ठीक से समानांतर शुरू हो जाती है। आखिरी प्रयास के रूप में मैंने केवल चार बार केवल पहली बार स्ट्रीम का उपयोग करके और फिर बाद की धाराओं का उपयोग करने के लिए स्विच करके इसे चारों ओर घूमने की कोशिश की, लेकिन यह अभी भी काम नहीं कर रहा है और यह अभी भी प्रत्येक 4 धाराओं को रोकता है जबकि अन्य धाराओं को समवर्ती रूप से निष्पादित करते हैं : 10 stream execution

तो मैं इस समस्या का कारण बनने और इसका निदान कैसे कर सकता हूं, इस बारे में कोई विचार ढूंढ रहा हूं। मैंने अपने कोड पर ध्यान दिया है और मुझे नहीं लगता कि यह एक बग है, हालांकि मुझे गलत लगाया जा सकता है। प्रत्येक स्ट्रीम अपनी कक्षा में encapsulated है और केवल एक cudaStream_t का संदर्भ है जो उस वर्ग का सदस्य है, इसलिए मुझे नहीं लगता कि यह एक और धारा का संदर्भ कैसे दे सकता है और उस पर अवरुद्ध कर सकता है।

क्या संस्करण 1.3 और 2.0 के बीच धाराओं के काम में कुछ बदलाव हैं जो मुझे पता नहीं है? क्या यह साझा स्मृति के साथ कुछ हो सकता है जिसे मुक्त नहीं किया जा रहा है और इसे उस पर इंतजार करना है? इस समस्या का निदान करने के लिए कोई विचार स्वागत है, धन्यवाद।

+1

मुझे आश्चर्य है कि आपकी समस्या हाल ही में एनवीआईडीआईए मंचों में निम्नलिखित धागे में चर्चा की गई थी: https: //devtalk.nvidia।कॉम/डिफ़ॉल्ट/विषय/545476/क्यूडा-प्रोग्रामिंग-और-प्रदर्शन/कूडा-स्ट्रीम-प्रदर्शन/प्रोफाइलर को 'conckerneltrace' विकल्प को जोड़ने के लिए समाधान था। – njuffa

+1

विंडोज या लिनक्स? आप प्रत्येक मामले में किस ड्राइवर संस्करण का उपयोग कर रहे हैं? आपके कर्नल के लिए लॉन्च पैरामीटर क्या हैं? क्या आप किसी प्रकार का पुनरुत्पादक पोस्ट कर सकते हैं? –

+0

एनवीआईडीआईए विजुअल प्रोफाइलर (सीयूडीए 5.0 और 5.5) में, 'समवर्ती कर्नेल प्रोफाइलिंग सक्षम करें' विकल्प भी है। मुझे लगता है कि यह सीएलआई विकल्प 'conckerneltrace' के समान परिणाम प्राप्त करता है। ध्यान दें कि इसके लिए आपको एक सीसी> = 2.0 डिवाइस चाहिए। – BenC

उत्तर

3

मैं कोड को देखे बिना पूरी तरह से सुनिश्चित नहीं हो सकता, लेकिन ऐसा लगता है कि आपको आदेश के साथ कोई समस्या हो सकती है जिसमें आप अपने आदेशों को लागू करते हैं। कंप्यूट क्षमता 1.x और 2.x डिवाइसों के माध्यम से धाराओं को संभालते हुए थोड़ा सा अंतर होता है क्योंकि 2.x डिवाइस एक साथ कई कर्नेल चला सकते हैं और एक साथ एचटीडी और डीटीएच दोनों को संभाल सकते हैं।

यदि आप अपने आदेशों को ऑर्डर में सभी एचटीओडी, सभी गणना करते हैं, तो सभी डीटीएचएस आपके पास टेस्ला कार्ड (1060 एट अल।) पर अच्छे परिणाम होंगे।

यदि आप उन्हें एचटीओडी की प्रतिलिपि बनाने, गणना करने, प्रतिलिपि बनाने की प्रतिलिपि, एचटीडी कॉपी करें ... आदि के लिए आपको फर्मि पर अच्छे नतीजे होंगे।

केप्लर दोनों मामलों में समान रूप से अच्छा करता है। यह टेस्ला और फर्मि दोनों मामलों में धाराओं के मामले में महत्वपूर्ण है, मैं अधिक जानकारी के लिए this NVIDIA post पढ़ने का सुझाव देता हूं। धाराओं में ओवरलैपिंग एक बेहद जटिल समस्या हो सकती है, मैं आपको शुभकामनाएं देता हूं। यदि आप और सहायता चाहते हैं, तो आप जिस क्रम में परिचालन को लागू करते हैं उसका एक सामान्य प्रतिनिधित्व अत्यंत सहायक होगा।

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