2010-05-19 14 views
6

पहले से क्या काम लाभ की तरह:OpenCL सभी की

  • मुझे अच्छी तरह पता है कि OpenCL जादुई सब कुछ तेजी से नहीं है हूँ
  • मुझे अच्छी तरह पता OpenCL सीमाओं

तो है कि कर रहा हूँ अब मेरे प्रश्न के लिए, मैं प्रोग्रामिंग का उपयोग कर विभिन्न वैज्ञानिक गणना करने के लिए प्रयोग किया जाता है। जटिलताओं और गणनाओं की संख्या के संबंध में जिन चीजों के साथ मैं काम करता हूं, उनमें से कुछ बहुत गहन है। तो मैं सोच रहा था, शायद मैं ओपनसीएल का उपयोग कर चीजों को तेज कर सकता हूं।

तो, क्या मैं आप सभी से सुनने के लिए प्यार होता है के निम्नलिखित [लिंक के लिए बोनस] कुछ के जवाब है:

* गणना/एल्गोरिदम/सामान्य समस्याओं किस तरह OpenCL

के लिए उपयुक्त है * यह निर्धारित करने के लिए सामान्य दिशानिर्देश क्या हैं कि ओपनसीएल में माइग्रेशन द्वारा कुछ विशेष कोड लाभान्वित होंगे?

सादर

उत्तर

9

मुझे लगता है कि यह एक अच्छा सवाल है, और यह कुछ है जो मैं अपने स्वयं के शोध के लिए भी काम करने की कोशिश कर रहा हूं।

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

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

मेरा विचार यह है कि जैसे ही समय चल रहा है, अधिक से अधिक समस्याएं शूहोर्न हो जाएंगी ताकि उन्हें इस प्रतिमान का उपयोग करके हल किया जा सके क्योंकि ऐसा इतना बड़ा प्रदर्शन किया जा सकता है, लेकिन कम लटकते फल स्पष्ट रूप से हैं डेटा समांतर समस्याएं। बड़े पैमाने पर मल्टीकोर प्रोग्रामिंग, मेरे विचार में, अगले दशक में वैज्ञानिक मंडलियों में तेजी से महत्वपूर्ण और प्रचलित होने जा रहा है।

मैंने इस के साथ थोड़ा सा खेला है, और जीपीयू (सीयूडीए का उपयोग करके) पर निष्पादित करने के लिए एक उपयुक्त प्रारूप में बैकट्रैकिंग समस्या को शूहोर्न करने में कामयाब रहा। एफवाईआई, मैं इस बात का वर्णन करता हूं: http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

3

यह अच्छी तरह से कार्य है कि कुछ हद तक एक छोटा सा सरल डेटा संरचनाओं की बड़े हिस्से से अधिक समानांतर में काम कर कार्यक्रम के रूप में व्यक्त किया जा सकता के लिए अनुकूल है।

यदि दो छवियों के बीच अंतर की गणना करना चाहते हैं, तो OpenCL आपके लिए है। यदि आप एक दृश्य को रेस-ट्रेस करना चाहते हैं, तो यह कुछ मुश्किल है लेकिन अभी भी व्यवहार्य है। यदि आपने बड़ी मात्रा में वेब-सेवा अनुरोधों का उत्तर दिया है, तो ओपनसीएल समाधान नहीं है।

2

जहां तक ​​एल्गोरिदम का संबंध है, उन्हें डेटा समानांतर होना चाहिए। यह एक सेट डेटा पिछले सेट पर निर्भरता नहीं होना चाहिए। एक समानता को आकर्षित करने के लिए, सम्मिलन सॉर्टिंग पर विचार करें जहां एक तत्व को अन्य तत्वों के साथ इसकी सही जगह खोजने के लिए तुलना की जाती है।यह डेटा समानांतर नहीं है क्योंकि प्रत्येक चरण को एन -1 तत्वों तक पहुंचने की आवश्यकता होती है। अब यदि आपको ओपनसीएल का उपयोग करके सॉर्ट करने की आवश्यकता है तो आपको बिटकोनिक सॉर्टिंग को कार्यान्वित करना होगा जो सॉर्टिंग नेटवर्क का एक प्रकार है।

भले ही वे डेटा समांतर हैं, फिर भी FLOPS और स्मृति विलंबता के बीच ट्रेडऑफ़ का सवाल है। यदि प्रत्येक डेटा को वैश्विक मेमोरी से लाया जाना है, तो प्रदर्शन सुधार महत्वपूर्ण नहीं हो सकता है। जीपीयू की स्मृति विलंबता CPU की तुलना में काफी अधिक है। इसका मुकाबला करने के लिए, जीपीयू में स्थानीय यादें हैं जिनका उपयोग किया जा सकता है।

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