2011-12-12 9 views
19

कहता है कि मैंने अलग-अलग ब्लॉक सिंक्रनाइज़ करने के लिए कर्नेल लॉन्च का उपयोग कर सकते हैं यानी, यदि मैं ऑपरेशन 2 पर जाने से पहले सभी ब्लॉक को ऑपरेशन 1 पूरा करना चाहता हूं, तो मुझे एक कर्नेल में ऑपरेशन 1 रखना चाहिए और एक और कर्नेल में ऑपरेशन 2। इस तरह, मैं ब्लॉक के बीच वैश्विक सिंक्रनाइज़ेशन प्राप्त कर सकते हैं। हालांकि, क्यूडा सी प्रोग्रामिंग गाइड का उल्लेख है कि कर्नेल कॉल असीमित यानी हैं। सीपीयू पहले कर्नेल कॉल को समाप्त करने की प्रतीक्षा नहीं करता है और इस प्रकार, सीपीयू पहले समाप्त होने से पहले दूसरा कर्नेल भी कॉल कर सकता है। हालांकि, यदि यह सत्य है, तो हम ब्लॉक को सिंक्रनाइज़ करने के लिए कर्नेल लॉन्च का उपयोग नहीं कर सकते हैं। कृपया मुझे बताएं कि मैं गलत कहां जा रहा हूंक्या कूडा कर्नेल सिंक्रोनस या असिंक्रोनस

उत्तर

28

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

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

यह व्यवहार गणना क्षमता 2.x वाले उपकरणों के लिए मान्य है जो समवर्ती कर्नेल निष्पादन का समर्थन करते हैं। अन्य उपकरणों पर हालांकि कर्नेल कॉल अभी भी असीमित हैं, कर्नेल निष्पादन हमेशा अनुक्रमिक है।

धारा 3.2.5 पर CUDA सी प्रोग्रामिंग मार्गदर्शिका की जांच करें जो प्रत्येक CUDA प्रोग्रामर को पढ़ना चाहिए।

0

समवर्ती कर्नेल निष्पादन 2.0 CUDA क्षमता संस्करण के बाद समर्थित है।

इसके अतिरिक्त, सीपीयू कोड पर लौटने के लिए सभी वार कर्नेल से पहले किया जा सकता है।

इस मामले में, आप स्वयं को सिंक्रनाइज़ेशन प्रदान कर सकते हैं।

2

स्वीकृत उत्तर हमेशा सही नहीं होता है।

ज्यादातर मामलों में, कर्नेल लॉन्च असीमित है। लेकिन निम्नलिखित मामले में, यह तुल्यकालिक है। और उन्हें आसानी से लोगों द्वारा अनदेखा किया जाता है।

  • वातावरण चर CUDA_LAUNCH_BLOCKING, 1.
  • एक प्रोफाइलर (nvprof) का उपयोग करने के लिए बराबर होती है समवर्ती गिरी रूपरेखा
  • memcpy कि मेजबान स्मृति जो पेज लॉक किया हुआ नहीं है को शामिल सक्षम किए बिना।

प्रोग्रामर्स कर्नेल का विश्व स्तर पर अक्षम asynchronicity सभी CUDA 1. यह सुविधा केवल डीबगिंग उद्देश्यों के लिए प्रदान की जाती है और के लिए एक रास्ता के रूप में नहीं किया जाना चाहिए करने के लिए CUDA_LAUNCH_BLOCKING वातावरण चर स्थापना करके एक सिस्टम पर चलने वाले अनुप्रयोगों के लिए की शुरूआत कर सकते हैं उत्पादन सॉफ्टवेयर विश्वसनीय रूप से चलाते हैं।

कर्नेल लॉन्च सिंक्रोनस होते हैं यदि हार्डवेयर काउंटर प्रोफाइलर (एनसाइट, विजुअल प्रोफाइलर) के माध्यम से एकत्र किए जाते हैं, जब तक कि समवर्ती कर्नेल प्रोफाइलिंग सक्षम न हो। Async स्मृति प्रतियां भी तुल्यकालिक होंगी यदि उनमें होस्ट मेमोरी शामिल है जो पृष्ठ-लॉक नहीं है।

एनवीआईडीआईए कूडा प्रोग्रामिंग गाइड (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#concurrent-execution-host-device) से।

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

  • कोई संबंधित समस्या नहीं^_^