2012-10-07 19 views
5

में शून्य-प्रतिलिपि में एक्सेस पथ मैं शून्य-प्रतिलिपि के काम के बारे में थोड़ा उलझन में हूं।ओपनसीएल

1- यह पुष्टि करना चाहते हैं कि निम्नलिखित ओपनक्ल में शून्य-प्रतिलिपि से मेल खाता है।

....................... 
.   .   . 
.   .   . 
.   . CPU  . 
. SYSTEM .   . 
. RAM . c3 X . 
.   <=====>  . 
...|................... 
    PCI-E // 
    |  // 
c2 |X  /PCI-E, CPU directly accessing GPU memory 
    | //       copy c3, c2 is avoided, indicated by X. 
...|...././................ 
. MEMORY<====>   . 
. OBJECT .c1   . 
.   .  GPU  . 
. GPU RAM .    . 
.   .    . 
........................... 




....................... 
.   .   . 
.   .   . 
.   . CPU . 
.SYSTEM RAM .   . 
.   .   . 
.   . c3  . 
. MEMORY<====>  .   
...| OBJECT............ 
    |  \ \ 
    PCI-E \ \PCI-E, GPU directly accessing System memory. copy c2, c1 is avoided 
    |  \ \ 
C2 |X  \ \ 
...|.........\..\........... 
. |  .    . 
.  <=======>   . 
. GPU c1 X GPU  . 
. RAM  .    . 
.   .    . 
............................ 

GPU/CPU सीधे प्रतिलिपि के बिना सिस्टम/जीपीयू-रैम तक पहुंच रहा है।

2-यह होने का क्या फायदा है? पीसीआई-ई अभी भी सभी बैंडविड्थ से अधिक सीमित है। या एकमात्र फायदा यह है कि हम उपरोक्त स्थितियों में प्रतियां सी 2 & सी 1/सी 3 से बच सकते हैं?

उत्तर

13

आप शून्य-प्रतिलिपि कैसे काम करते हैं इसकी समझ में सही हैं। मूल आधार यह है कि आप डिवाइस से मेजबान मेमोरी या मेजबान से डिवाइस मेमोरी तक पहुंच सकते हैं, बिना मध्यवर्ती बफरिंग चरण की आवश्यकता के।

आप निम्न झंडे के साथ बफ़र्स बनाने के द्वारा शून्य-प्रतिलिपि प्रदर्शन कर सकते हैं:

CL_MEM_AMD_PERSISTENT_MEM //Device-Resident Memory 
CL_MEM_ALLOC_HOST_PTR // Host-Resident Memory 

फिर, बफ़र्स पहुँचा जा सकता है का उपयोग कर स्मृति मानचित्रण अर्थ विज्ञान:

void* p = clEnqueueMapBuffer(queue, buffer, CL_TRUE, CL_MAP_WRITE, 0, size, 0, NULL, NULL, &err); 
//Perform writes to the buffer p 
err = clEnqueueUnmapMemObject(queue, buffer, p, 0, NULL, NULL); 

का उपयोग करते हुए शून्य कॉपी आप कर सकते थे निम्नलिखित कार्यान्वयन पर प्रदर्शन प्राप्त करने में सक्षम हो:

  1. किसी फ़ाइल को होस्ट बफ में कॉपी करें एर
  2. कॉपी डिवाइस

इसके बजाय आप यह सब एक कदम

  1. मेमोरी मानचित्र डिवाइस पक्ष बफर में कर सकता है के लिए बफर
  2. डिवाइस
  3. unmap स्मृति
  4. के लिए मेजबान से
  5. फाइल कॉपी

कुछ कार्यान्वयन पर, मानचित्रण और अनैपिंग की कॉल वें छुपा सकती है डेटा हस्तांतरण की लागत। हमारे उदाहरण की तरह,

  1. मेमोरी मानचित्र डिवाइस पक्ष बफर
  2. डिवाइस [असल में मेजबान साइड बफर करने के लिए लिखते हैं]
  3. के लिए मेजबान से फाइल कॉपी [असल में एक ही आकार के एक मेजबान साइड बफर बनाता है]
  4. unmap स्मृति [असल में प्रतियां clEnqueueWriteBuffer के माध्यम से करने के लिए डिवाइस-बफर मेजबान बफर से डेटा]

कार्यान्वयन इस तरह से प्रदर्शन कर रहा है, तो मानचित्रण दृष्टिकोण का उपयोग करने के लिए कोई लाभ नहीं होगा। हालांकि, ओपनसीएल के लिए नए ड्राइवर एएमडी डेटा को सीधे लिखने की इजाजत देते हैं, मैपिंग की लागत और लगभग 0 को अनैपिंग करने के लिए। अलग ग्राफिक्स कार्ड के लिए, पीसीआई बस पर अनुरोध अभी भी होते हैं, इसलिए डाटा ट्रांसफर धीमा हो सकता है।

एपीयू आर्किटेक्चर के मामले में, शून्य प्रतिलिपि अर्थशास्त्र का उपयोग करके डेटा स्थानान्तरण की लागत एपीयू अद्वितीय वास्तुकला (नीचे चित्रित) के कारण स्थानांतरण की गति में काफी वृद्धि कर सकती है। इस वास्तुकला में, पीसीआई बस को यूनिफाइड नॉर्थ ब्रिज (यूएनबी) के साथ बदल दिया गया है जो तेजी से स्थानान्तरण की अनुमति देता है।जब स्मृति-मानचित्रण के साथ शून्य-प्रतिलिपि अर्थ विज्ञान का उपयोग कर, कि आप पूरी तरह खराब बैंडविड्थ जब मेजबान से एक डिवाइस साइड बफर पढ़ने देखेंगे

बारे में पता कि बीई। ये बैंडविड्थ 0.01 जीबी/एस के क्रम में हैं और आसानी से आपके कोड के लिए एक नई बाधा बन सकती हैं।

क्षमा करें अगर यह बहुत अधिक जानकारी है। यह मेरा थीसिस विषय था।

APU Architecture

+0

+5 विस्तृत स्पष्टीकरण के लिए! – gpuguy

+0

क्या हम आपकी थीसिस देख सकते हैं? सुनने में अच्छा है! मैंने अपने थीसिस के लिए apus के साथ बहुत कुछ खेला –

+0

@ घर का बना-जाम निश्चित। यहां आप यहां जाएं: http://scholar.lib.vt.edu/theses/available/etd-07272012-152625/unrestricted/Lee_KS_T_2012.pdf – KLee1

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