2012-02-17 11 views
10

मुझे कुछ स्पष्टीकरण की आवश्यकता है। मैं अपने लैपटॉप पर ओपनसीएल विकसित कर रहा हूं जो एक छोटा एनवीडिया जीपीयू (310 एम) चला रहा है। जब मैं CL_DEVICE_MAX_COMPUTE_UNITS के लिए डिवाइस से पूछता हूं, तो परिणाम 2. मैं पढ़ता हूं कि कर्नेल चलाने के लिए कार्य समूहों की संख्या गणना इकाइयों की संख्या (Heterogenous Computing with OpenCL, अध्याय 9, पृष्ठ 186) से मेल खाना चाहिए, अन्यथा यह बहुत अधिक वैश्विक बर्बाद कर देगा मेमोरी बैंडविड्थ।कार्य समूहों की संख्या से संबंधित गणना इकाइयों की संख्या

चिप भी 16 कोडा कोर (जो पीईएस के मानते हैं) के अनुरूप है। क्या इसका मतलब सैद्धांतिक रूप से, ग्लोबल मेमोरी बैंडविड्थ के संबंध में इस जीपीयू के लिए सबसे अधिक प्रदर्शन करने वाला सेटअप है, जिसमें दो कार्य समूह 16 कार्य आइटम हैं?

उत्तर

16

काम समूहों की संख्या की स्थापना कुछ हार्डवेयर पर ध्वनि सलाह हो सकता है CL_DEVICE_MAX_COMPUTE_UNITS के बराबर होना है, यह निश्चित रूप से नहीं NVIDIA GPUs पर है।

सीयूडीए आर्किटेक्चर पर, ओपनसीएल गणना इकाई एक मल्टीप्रोसेसर के समतुल्य है (जिसमें 8, 32 या 48 कोर हो सकते हैं), और इन्हें 8 कार्य समूहों तक चलने में सक्षम होने के लिए डिज़ाइन किया गया है (ब्लॉक CUDA) प्रत्येक। बड़े इनपुट डेटा आकारों पर, आप हजारों कार्य समूहों को चलाने का विकल्प चुन सकते हैं, और आपका विशेष GPU प्रति कर्नेल लॉन्च 65535 x 65535 कार्य समूहों तक संभाल सकता है।

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

एनवीआईडीआईए CUDA टूलकिट में "सीयूडीए आर्किटेक्चर के लिए ओपनसीएल प्रोग्रामिंग गाइड" नामक एक अच्छा दस्तावेज़ भेजता है। आपको इसे पढ़ने के लिए कुछ समय लेना चाहिए, क्योंकि इसमें एनवीआईडीआईए ओपनसीएल कार्यान्वयन उनके हार्डवेयर की विशेषताओं पर नक्शे के बारे में सभी विशिष्टताओं को शामिल करता है, और यह आपके द्वारा उठाए गए प्रश्नों का उत्तर देगा।

+0

मैं इसे पढ़ूंगा, धन्यवाद। – rdoubleui

2

मुझे लगता है कि इकाइयों की गणना करने के लिए आपके वर्क ग्रुप गिनती से मिलान करना भी एक सीपीयू पर एक अच्छा विचार नहीं है। कई गुना से कोर को ओवरसब्सक्राइब करना बेहतर है। यह वर्कलोड को गतिशील रूप से (वर्कग्रुप क्वांटा में) स्थानांतरित करने की अनुमति देता है क्योंकि विभिन्न प्रोसेसर लाइन पर आते हैं या अन्य काम से विचलित हो जाते हैं। कार्यसमूह count = CL_DEVICE_MAX_COMPUTE_UNITS केवल एक मशीन पर अच्छी तरह से काम करता है जो बिल्कुल कुछ नहीं कर रहा है और अप्रयुक्त कोर जागने के दौरान बहुत सारी ऊर्जा बर्बाद कर रहा है।

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