यह एक पुरानी पोस्ट प्रतीत होता है, लेकिन मुझे इस पोस्ट को कुछ नई जानकारी के साथ अपडेट करने दें। उम्मीद है कि यह किसी और की मदद कर सकता है।
क्या ग्लोबल वर्क साइज (आयाम) को वर्क ग्रुप ओपनसीएल में आकार (आयाम) होना चाहिए?
उत्तर: ओपनसीएल 2.0 तक सही है। CL2.0 से पहले, आपका वैश्विक कार्य आकार स्थानीय कार्य आकार का एक बहु होना चाहिए, अन्यथा जब आप clEnqueueNDRangeKernel निष्पादित करते हैं तो आपको एक त्रुटि संदेश प्राप्त होगा।
लेकिन सीएल 2.0 से, अब इसकी आवश्यकता नहीं है। आप जो भी वैश्विक कार्य आकार का उपयोग कर सकते हैं जो आपके अनुप्रयोग आयामों को फिट करता है। हालांकि, कृपया याद रखें कि हार्डवेयर कार्यान्वयन अभी भी "पुराने" तरीके का उपयोग कर सकता है, जिसका अर्थ है वैश्विक कार्य समूह आकार को पैड करना। इसलिए, यह प्रदर्शन हार्डवेयर वास्तुकला पर अत्यधिक निर्भर करता है। आप विभिन्न हार्डवेयर/प्लेटफार्मों पर काफी अलग प्रदर्शन देख सकते हैं। इसके अलावा, आप अपने एप्लिकेशन को पुराने प्लेटफॉर्म का समर्थन करने के लिए संगत बनाना चाहते हैं जो केवल संस्करण 1.2 तक सीएल का समर्थन करता है। तो, मुझे लगता है कि इस नई सुविधा CL2.0 में जोड़ा सिर्फ आसान प्रोग्रामिंग के लिए है, बेहतर चलाया प्रदर्शन और पश्चगामी संगतता प्राप्त करने के लिए, मैं सुझाव है कि आप अभी भी निम्न विधि आप ने उल्लेख का उपयोग करें:
के आयामों बढ़ाएँ वैश्विक समूह कार्य समूह आयामों के निकटतम एकाधिक होने के लिए, सभी इनपुट और आउटपुट बफर को रखते हुए, लेकिन सेगफॉल्टिंग से बचने के लिए कर्नेल में सीमाओं की जांच करना, यानी वांछित आउटपुट से बाहर कार्य आइटमों पर कुछ भी नहीं है। (यह बेहतर तरीका की तरह दिखता है।)
उत्तर: आप बिल्कुल सही हैं। इस तरह के मामले को संभालने का यह सही तरीका है। स्थानीय कार्य समूह के आकार को सावधानी से डिजाइन करें (रजिस्टर उपयोग, कैश हिट/मिस, मेमोरी एक्सेस पैटर्न आदि जैसे कारकों पर विचार करें)। और फिर अपने वैश्विक कार्य आकार को स्थानीय कार्य आकार के एक से अधिक तक पैड करें। फिर, आप जाने के लिए अच्छे हैं।
विचार करने की एक और बात यह है कि यदि आप अपने कर्नेल में बहुत अधिक सीमा जांच कार्य कर रहे हैं तो आप छवि ऑब्जेक्ट को बफर के बजाय डेटा स्टोर करने के लिए उपयोग कर सकते हैं। छवि के लिए, सीमा जांच स्वचालित रूप से हार्डवेयर द्वारा की जाती है, अधिकांश कार्यान्वयन में लगभग कोई ओवरहेड नहीं होता है। इसलिए, अपने वैश्विक कार्य आकार को पैडिंग करें, छवि डेटा में अपना डेटा संग्रहीत करें, फिर, आपको सीमा जांच के बारे में चिंता किए बिना सामान्य रूप से अपना कोड लिखना होगा।
दिलचस्प है कि आप इस सवाल से पूछ रहे हैं, क्योंकि मैं इसे खुद से पूछ रहा था। मेरा पहला अनुमान यह है कि आप एक निश्चित कार्य समूह का आकार रखते हैं और यदि शाखा द्वारा बाध्य हैं। – Stringer