GPU प्रोग्रामिंग में कार्य-कुशलता क्यों वांछित है?


13

मैं CUDA में समानांतर स्कैन करने के बारे में निम्नलिखित लेख पढ़ रहा हूं:

https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch39.html

लेख में, स्कैन को "कार्य कुशल" बनाने पर जोर दिया गया है। दूसरे शब्दों में, GPU एल्गोरिथ्म में CPU एल्गोरिथ्म, O (n) के अलावा और कोई अतिरिक्त कार्य नहीं करना चाहिए। लेखक दो एल्गोरिदम प्रस्तुत करते हैं, एक "भोला" जो कि ओ (नॉग्लन) परिवर्धन करता है, और एक जिसे वे "कार्य कुशल" मानते हैं। हालांकि, कार्य कुशल एल्गोरिथ्म दो बार कई लूप पुनरावृत्तियों के रूप में करता है।

मेरी समझ से, GPU केवल विशाल SIMD प्रोसेसर हैं और लॉक-स्टेप में काम करना चाहिए। "कार्य कुशल" एल्गोरिथ्म में दो छोरों के रूप में दो बार करने का मतलब यह है कि कई धागे निष्क्रिय होंगे और लंबे समय में प्रदर्शन में कमी आएंगे। मुझे किसकी याद आ रही है?

जवाबों:


21

सबसे पहले, फिर से: "जीपीयू केवल विशाल सिमड प्रोसेसर हैं और लॉक-स्टेप में काम करना चाहिए", यह उससे थोड़ा अधिक जटिल है। पूरे GPU lockstep में नहीं चलता है। शेडर थ्रेड्स को 32 के समूहों में आयोजित किया जाता है जिन्हें "वॉरप्स" कहा जाता है (एनवीआईडीआईए पर; एएमडी पर वे 64 के समूह हैं जिन्हें "वेवफ्रोंट्स" कहा जाता है, लेकिन एक ही अवधारणा)। एक ताना के भीतर, सभी धागे एक सिमड सरणी के रूप में लॉकस्टेप में चलते हैं। हालांकि, अलग-अलग ताना-बाना एक-दूसरे के साथ नहीं है। इसके अलावा, कुछ वॉर सक्रिय रूप से चल सकते हैं जबकि अन्य को निलंबित किया जा सकता है, बहुत कुछ सीपीयू थ्रेड्स की तरह। वार्प्स को या तो निलंबित किया जा सकता है क्योंकि वे किसी चीज़ की प्रतीक्षा कर रहे हैं (जैसे कि मेमोरी लेनदेन वापस करने के लिए या बाधाओं को स्पष्ट करने के लिए), या क्योंकि कोई'n 'है

अब, वापस अपने प्रश्न पर। मैं दो तरीकों से देख सकता हूं कि उस कागज से "कार्य-कुशल" एल्गोरिथ्म ऐसा लगता है कि यह "भोले" एल्गोरिथ्म की तुलना में अधिक कुशल होगा।

  1. कार्य-कुशल संस्करण को शुरू करने के लिए आधे धागे की आवश्यकता होती है। भोले एल्गोरिथ्म में, उनके पास एक धागा प्रति सरणी तत्व है; लेकिन कार्य-कुशल संस्करण में, प्रत्येक थ्रेड सरणी के दो आसन्न तत्वों पर काम करता है और इसलिए उन्हें सरणी तत्वों के रूप में केवल आधे धागे की आवश्यकता होती है। कम थ्रेड्स का मतलब है कम वॉर, और इसलिए वॉर्प्स का एक बड़ा हिस्सा सक्रिय रूप से चल सकता है।

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

    अनुभवहीन एल्गोरिथ्म में सक्रिय थ्रेड्स की संख्या पर विचार करें। लेख में चित्र 2 को देखते हुए, आप यह है कि सभी धागे सक्रिय हैं देख सकते हैं को छोड़कर पहले 2 के लिए कश्मीर पर कश्मीर वें यात्रा। तो एन थ्रेड्स के साथ , सक्रिय थ्रेड्स की संख्या N - 2 k की तरह हो जाती है । उदाहरण के लिए, N = 1024 के साथ, प्रति थ्रेड सक्रिय सक्रियणों की संख्या है:

    1023, 1022, 1020, 1016, 1008, 992, 960, 896, 768, 512
    

    यदि मैं इसे सक्रिय वारों की संख्या में परिवर्तित कर देता हूँ (32 से भाग देकर और ऊपर करके), मुझे मिलता है:

    32, 32, 32, 32, 32, 31, 30, 28, 24, 16
    

    289 की राशि के लिए। दूसरी ओर, कार्य-कुशल एल्गोरिथ्म आधे धागे के साथ शुरू होता है, फिर यह प्रत्येक पुनरावृत्ति पर सक्रिय लोगों की संख्या को आधा कर देता है जब तक कि यह 1 से नीचे नहीं हो जाता है, तब तक दोहरीकरण शुरू हो जाता है जब तक कि यह वापस नहीं उठता है आधा सरणी आकार फिर से:

     512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512
    

    इसे सक्रिय युद्ध में परिवर्तित करना:

    16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16
    

    योग 71 है, जो कि केवल एक चौथाई है। तो आप देख सकते हैं कि पूरे ऑपरेशन के दौरान, कार्य-कुशल एल्गोरिदम के साथ सक्रिय वॉर की संख्या बहुत कम है। (वास्तव में, बीच में एक लंबे समय तक चलने के लिए केवल एक मुट्ठी भर सक्रिय युद्ध हैं, जिसका अर्थ है कि अधिकांश चिप पर कब्जा नहीं किया गया है। यदि अतिरिक्त कम्प्यूट कार्य चल रहे हैं, जैसे कि अन्य सीयूडीए धाराओं से, वे भरने के लिए विस्तार कर सकते हैं। खाली जगह।)

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.