2012-02-19 10 views
9

लागू मैं सोच रहा हूँ क्या एक CUDA कर्नेल कॉल प्रदर्शन की भूमि के ऊपर ++ जैसे निम्नलिखित सी/सी में है:प्रदर्शन दंड जब एक CUDA कर्नेल

somekernel1<<<blocks,threads>>>(args); 
somekernel2<<<blocks,threads>>>(args); 
somekernel3<<<blocks,threads>>>(args); 

कारण है कि मैं इस पूछ रहा हूँ क्योंकि है मैं जिस एप्लिकेशन का निर्माण कर रहा हूं, वह वर्तमान में कई कर्नेल में बार-बार कॉल करता है (कॉल के बीच डिवाइस को फिर से पढ़ा/लिखा जाता है) और मैं सोच रहा हूं कि इन कर्नेल को एक कर्नेल कॉल में कॉल करना है (कुछ कर्नेल 1-3 डिवाइस फ़ंक्शंस बनने के साथ) प्रदर्शन में कोई सार्थक अंतर होगा।

उत्तर

13

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

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

आप जिस तरीके से जाना चुनते हैं उसे वास्तव में कोड/एल्गोरिदम की प्रकृति द्वारा निर्देशित किया जाना चाहिए। मुझे विश्वास नहीं है कि इस प्रश्न का एक "सही" जवाब है जिसे सभी परिस्थितियों में लागू किया जा सकता है।

+0

स्विस सेना चाकू दृष्टिकोण कुछ ऐसा है जो मैं इन कर्नेल के परियोजनाओं के बीच साझा करने के लिए प्रयास करने से बचने की कोशिश कर रहा हूं। प्रतिक्रिया के लिए धन्यवाद, मैं बस यह सुनिश्चित करना चाहता था कि कुछ पागल प्रदर्शन समस्या नहीं थी कि मुझे एकाधिक कूडा कॉल करने के बारे में पता नहीं था। – NothingMore

+1

नोट: डब्लूडीडीएम पर, यदि आप टेस्ला जीपीयू का उपयोग कर रहे हैं, तो आप एक्सपी या लिनक्स जैसे गैर-डब्लूडीडीएम प्लेटफ़ॉर्म के साथ प्रदर्शन को लाने के लिए टेस्ला कंप्यूट क्लस्टर (टीसीसी) ड्राइवर का उपयोग कर सकते हैं। मूल प्रश्न के लिए, मैं जोर देउंगा: अगर कर्नेल संयोजन से पीसीआई-एक्सप्रेस ट्रांसफर को कम करने में मदद मिलती है, तो यह इसके लायक हो सकता है। यदि नहीं, तो कम से कम सुनिश्चित करें कि कर्नेल 1 के आंकड़ों के GPU में स्थानान्तरण के साथ कर्नेल 1 की गणना को ओवरलैप करें। – harrism

+0

talonmies क्या गैर-डब्लूडीडीएम विंडोज प्लेटफॉर्म आप बात कर रहे हैं? winXP? डब्ल्यूडीडीएम जुर्माना बहुत बड़ा है क्योंकि मैं बहुत दिलचस्पी रखता हूं और मैं लिनक्स में नहीं जा सकता। Win7 x64 का उपयोग करके और एक x64 प्लेटफार्म (रैम मुद्दों) की आवश्यकता होगी – Dredok

1

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

+0

मैं विंडोज़ पर नहीं चल रहा हूं (आरएचईएल 6.0, टेस्ला सी 2075)। – NothingMore

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