2011-09-12 14 views
6

मैं GPU प्रोग्रामिंग दुनिया के लिए नया हूँ, मैं विकिपीडिया और Googling पर पढ़ने की कोशिश की है, लेकिन मैं अभी भी कई प्रश्न हैं:जीपीयू प्रोग्रामिंग?

  • मैं, कुछ GPU उदाहरण डाउनलोड किया CUDA के लिए, वहाँ कुछ .cu थे फाइलें और कुछ सीपीपी फाइलें, लेकिन सभी कोड सामान्य सी/सी ++ कोड थे, कुछ अजीब फ़ंक्शंस जैसे cudaMemcpyToSymbol और शेष शुद्ध सी कोड था। सवाल यह है कि, एनसीसीसी के साथ संकलित .cu कोड है और फिर जीसीसी से जुड़ा हुआ है? या यह प्रोग्राम कैसे किया जाता है?

  • यदि मैंने जीपीयू पर कुछ चलाने के लिए कोड किया है, तो क्या यह सभी जीपीयू पर चलता है? या सिर्फ CUDA? या क्या सीयूडीए और एटीआई के लिए लिखने का तरीका और दोनों के लिए लिखने की विधि है?

उत्तर

10

अपने दूसरे क्ष जवाब देने के लिए uestion:

ओपनसीएल एकमात्र तरीका है यदि आप मंच स्वतंत्र जीपीजीपीयू कोड लिखना चाहते हैं।

एटीआई वेबसाइट में वास्तव में ओपनसीएल के लिए बहुत सारे संसाधन हैं यदि आप थोड़ा खोजते हैं, और उनकी उदाहरण परियोजनाओं को आपको जो चाहिए, उसे संशोधित करने के लिए बहुत आसान है, या केवल कोड को समझने के लिए।

OpenCL कल्पना और संदर्भ पृष्ठों को भी ज्ञान का एक बहुत अच्छा स्रोत है: http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf

वहाँ कि कोर अवधारणाओं में से कुछ की व्याख्या, और यह भी वार्ता का एक बहुत है कि कितनी तेजी से कोड लिखने के लिए समझाने हैं कि मैं अनुशंसा करता हूं (यह भी सीयूडीए पर लागू होता है)।

लगभग अपने पहले प्रश्न का उत्तर देने के लिए: ओपनसीएल में, कोड को उस विशिष्ट GPU पर चलाया जाता है जिसे आप उपयोग कर रहे हैं (गति की गारंटी के लिए)।

+0

रनटाइम पर संकलित? क्या मेरा कोड एक बाइट कोड जैसा होगा जो रनटाइम के दौरान स्मृति में कॉपी किया गया था और वहां से निष्पादित किया गया था? – killercode

+0

आपका जीपीजीपीयू कोड एक स्रोत कोड स्ट्रिंग होगा जो GPU पर कोड ऑब्जेक्ट में एटी रनटाइम संकलित किया गया है – nulvinge

5

शायद आप सीयूडीए पर कुछ पृष्ठभूमि पढ़ना चाहते हैं - ऐसा कुछ नहीं है जिसे आप कुछ कोड नमूने देखकर उठा सकते हैं। अब अमेज़ॅन पर लगभग 3 अलग-अलग CUDA पुस्तकें हैं, और http://developer.nvidia.com पर बहुत सी संदर्भ सामग्री है।

आपके सवालों के जवाब के लिए:

  • हाँ, .cu फ़ाइलें एक मध्यवर्ती फार्म (PTX) को NVCC साथ संकलित कर रहे हैं - यह बाद में GPU-विशिष्ट कोड के लिए रन-टाइम में बदल जाती है

  • उत्पन्न कोड nVIDIA GPUs के एक उपसमूह पर चलेंगे, क्या CUDA क्षमताओं आप अपने कोड में उपयोग के आधार पर उप-समूह के आकार

+0

लिंक करने के बारे में अतिरिक्त जानकारी: हाँ, आप 'gcc' या अन्य सी (++) कंपाइलर के साथ' nvcc' द्वारा जेनरेट की गई '.o'-फ़ाइलें लिंक कर सकते हैं। हालांकि, ज्यादातर मामलों में 'nvcc' से लिंक करना आसान होता है, क्योंकि यह स्वचालित रूप से आपके प्रोग्राम को सभी आवश्यक cuda पुस्तकालयों से लिंक करता है (यदि आप' gcc' का उपयोग करते हैं, तो आपको उन्हें मैन्युअल रूप से निर्दिष्ट करना होगा)। – aland

3

@nulvinge द्वारा दिए गए उत्तर को पूरा करने के लिए, मैं कहूंगा कि ओपनजीएल जैसे ओपनजीएल को जीपीयू रेंडरिंग की तरह जीपीयू प्रोग्रामिंग करना है। लेकिन मल्टी-आर्किटेक्चर डेवलपमेंट के लिए यह एकमात्र विकल्प नहीं है, आप डायरेक्ट कॉम्प्यूट का भी उपयोग कर सकते हैं, लेकिन मैं यह नहीं कहूंगा कि यह सबसे अच्छा विकल्प है, अगर आप चाहते हैं कि आपका कोड प्रत्येक डायरेक्टएक्स 11 संगत जीपीयू पर चल रहा हो, जिसमें कुछ इंटेल ग्राफिक्स कार्ड चिप्स शामिल हैं भी सही?

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

सौभाग्य से दोनों NVIDIA और एएमडी, गाइड्स प्रोग्रामिंग आप :) मदद करने के लिए

1

पिछले जवाब के अलावा, CUDA के लिए आप एक NVIDIA कार्ड/GPU की आवश्यकता होगी, जब तक आप एक दूरस्थ एक के लिए उपयोग किया है जो मैं करूंगा Coursera से इस पाठ्यक्रम की सिफारिश: इस तरह के OpenACC, एक उच्च के रूप में

Heterogeneous Parallel Programming

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

0

यदि आप एक पोर्टेबल कोड लिखना चाहते हैं जिसे आप विभिन्न जीपीयू उपकरणों और सीपीयू पर भी निष्पादित कर सकते हैं। आपको ओपनसीएल का उपयोग करने की आवश्यकता है।

असल में, अपने कर्नेल को कॉन्फ़िगर करने के लिए आपको सी में होस्ट कोड लिखना होगा। कॉन्फ़िगरेशन फ़ाइल कम हो सकती है यदि आप इसे ओपनसीएल की तुलना में CUDA कर्नेल के लिए लिखना चाहते हैं।

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