2012-02-15 8 views
10

एनवीआईडीआईए मेमोरी ट्रांसफर ओवरहेड्स को कम करने के लिए GPUDirect प्रदान करता है। मैं सोच रहा हूं कि एएमडी/एटीआई के लिए एक समान अवधारणा है या नहीं? विशेष रूप से:क्या एएमडी का ओपनसीएल सीयूडीए के जीपीयूड्रैक्ट के समान कुछ ऑफर करता है?

1) एएमडी GPUs जब नेटवर्क कार्ड, as described here साथ इंटरफ़ेस दूसरा स्मृति हस्तांतरण से बचने के है। यदि किसी बिंदु पर ग्राफ़िक खो जाता है, तो एक नेटवर्क पर एक जीपीयू से डेटा प्राप्त करने पर GPUDirect के प्रभाव का वर्णन यहां एक नेटवर्क इंटरफ़ेस में स्थानांतरित किया जा सकता है: GPUDirect के साथ, GPU मेमोरी मेमोरी होस्ट करने के लिए सीधे नेटवर्क पर जाती है इंटरफ़ेस कार्ड GPUDirect के बिना, जीपीयू मेमोरी एक एड्रेस स्पेस में मेमोरी होस्ट करने के लिए जाती है, तो सीपीयू को मेमोरी को किसी अन्य होस्ट मेमोरी एड्रेस स्पेस में लाने के लिए एक प्रतिलिपि करना पड़ता है, फिर यह नेटवर्क कार्ड पर जा सकता है।

2) जब दो GPUs ही PCIe बस, as described here पर साझा कर रहे हैं AMD GPUs पी 2 पी स्मृति स्थानान्तरण की अनुमति देते हैं। यदि किसी बिंदु पर ग्राफ़िक खो जाता है, तो यहां एक ही पीसीआईई बस पर जीपीयू के बीच डेटा स्थानांतरित करने पर GPUDirect के प्रभाव का विवरण दिया गया है: GPUDirect के साथ, डेटा मेजबान स्मृति को छूए बिना, उसी पीसीआई बस पर GPUs के बीच सीधे स्थानांतरित हो सकता है। GPUDirect के बिना, जीपीयू कहां स्थित है, इस पर ध्यान दिए बिना, डेटा को हमेशा किसी अन्य जीपीयू में आने से पहले होस्ट पर वापस जाना होगा।

संपादित करें: BTW, मैं नहीं पूरी तरह से यकीन है कि कैसे GPUDirect के बहुत vaporware है हूँ और इसके बारे में कितना वास्तव में उपयोगी है। मैंने वास्तव में कुछ वास्तविक के लिए इसका उपयोग कर एक जीपीयू प्रोग्रामर के बारे में कभी नहीं सुना है। इस पर विचार भी स्वागत है।

+0

आप लिंक किए गए ग्राफिक्स कुछ बाद की तारीख में नीचे रखा जाता है के मामले में दो प्रौद्योगिकियों के एक पाठ विवरण प्रदान कर सकता है? साथ ही, मुझे दूसरी ग्राफिक को अस्पष्ट होने के लिए अस्पष्ट लगता है। – James

+0

जेम्स, यह किया जाता है। – arrayfire

+0

@gpu: mvapich2 के पास हालिया रिलीज में जीपीयू सीधा समर्थन है, मैंने इसका इस्तेमाल किया है और यह वास्तव में तेज़ है - आप 'एमपीआई_Send' और' एमपीआई_रेसीवी 'को कॉल कर सकते हैं और जीपीयू मेमोरी पॉइंटर्स को तर्क के रूप में पास कर सकते हैं और सबकुछ "बस काम करता है"। – talonmies

उत्तर

2

मैं तुम्हें clCreateBuffer में CL_MEM_ALLOC_HOST_PTR झंडा द्वारा खोजे जा रहे है। जबकि ओपनसीएल विनिर्देश बताता है कि यह ध्वज "यह ध्वज निर्दिष्ट करता है कि एप्लिकेशन ओपनसीएल कार्यान्वयन को मेजबान सुलभ स्मृति से स्मृति आवंटित करना चाहता है", यह अनिश्चित है कि एएमडी के कार्यान्वयन (या अन्य कार्यान्वयन) इसके साथ क्या कर सकते हैं।

यहाँ विषय http://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440

आशा इस मदद करता है पर एक जानकारीपूर्ण धागा है।

संपादित करें: मुझे पता है कि एनवीडिया का ओपनसीएल एसडीके इसे पिन/पेज-लॉक मेमोरी में आवंटन के रूप में लागू करता है। मैं काफी हद तक निश्चित हूं कि जीएमयू पर चलने पर एएमडी का ओपनसीएल एसडीके क्या करता है।

+4

सीयूडीए के पास CL_MEM_ALLOC_HOST_PTR के समकक्ष हैं, लेकिन वे GPUDirect के समान नहीं हैं। सीयूडीए जीपीयू कर्नेल के भीतर से मेजबान स्मृति आवंटन तक पहुंच सकता है। यह जीपीयू को डीएमए को अधिक कुशल बनाने के लिए पेज-लॉक होस्ट पॉइंटर्स आवंटित भी कर सकता है। लेकिन GPUirect इन दोनों से परे चला जाता है, जैसा कि @ gpu के प्रश्न में वर्णित है। – harrism

+0

समझा। फिर, इस समय मुझे विश्वास नहीं है कि ओपनसीएल के बराबर है। – Ani

2

जैसा कि @ananthonline और @harrism द्वारा इंगित किया गया है, GPUDirect की कई विशेषताओं में ओपनसीएल में कोई प्रत्यक्ष समकक्ष नहीं है। हालांकि, अगर आप अपने प्रश्न की पहली वाक्य में उल्लिखित मेमोरी ट्रांसफर ओवरहेड को कम करने की कोशिश कर रहे हैं, तो शून्य कॉपी मेमोरी मदद कर सकती है। आम तौर पर, जब कोई एप्लिकेशन GPU पर बफर बनाता है, तो बफर की सामग्री को CPU मेमोरी से GPU मेमोरी एन मास में कॉपी किया जाता है। शून्य कॉपी मेमोरी के साथ, कोई अग्रिम प्रति नहीं है; इसके बजाए, डेटा की प्रतिलिपि बनाई गई है क्योंकि इसे GPU कर्नेल द्वारा एक्सेस किया गया है।

शून्य प्रतिलिपि सभी अनुप्रयोगों के लिए समझ में नहीं आता है।

शून्य प्रतिलिपि मेजबान निवासी स्मृति वस्तुओं प्रदर्शन जब मेजबान स्मृति एक विरल ढंग से या जब एक बड़ी मेजबान डिवाइस के द्वारा पहुँचा जा सकता है बढ़ा सकते हैं: यहाँ जब इसका इस्तेमाल करने पर एएमडी एपीपी OpenCL प्रोग्रामिंग गाइड से सलाह है मेमोरी बफर एकाधिक उपकरणों और प्रतियों के बीच साझा किया जाता है बहुत महंगा है। इसे चुनते समय, स्थानांतरण की लागत धीमी पहुंच की अतिरिक्त लागत से अधिक होनी चाहिए।

तालिका 4।प्रोग्रामिंग गाइड में से 3 वर्णन करता है कि कौन सी झंडे को क्लिप कॉपी करने के लिए clCreateBuffer को पास करना है (या तो CL_MEM_ALLOC_HOST_PTR या CL_MEM_USE_PERSISTENT_MEM_AMD, इस पर निर्भर करता है कि आप डिवाइस-पहुंच योग्य होस्ट मेमोरी या होस्ट-सुलभ डिवाइस मेमोरी चाहते हैं या नहीं)। ध्यान दें कि शून्य प्रतिलिपि समर्थन ओएस और हार्डवेयर दोनों पर निर्भर है; ऐसा लगता है कि विंडोज के लिनक्स या पुराने संस्करणों के तहत समर्थित नहीं है।

एएमडी एपीपी OpenCL प्रोग्रामिंग गाइड: http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

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

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