2013-02-08 39 views
7

वर्चुअल और वास्तविक वास्तुकला के बीच अंतर को समझने की कोशिश कर रहा है, और विभिन्न कॉन्फ़िगरेशन प्रोग्राम के प्रदर्शन को कैसे प्रभावित करेंगे, उदाहरण के लिए वर्चुअल और वास्तविक आर्किटेक्चर के बीच अंतर।क्यूडा

-gencode arch=compute_20,code=sm_20 
-gencode arch=compute_20,code=sm_21 
-gencode arch=compute_21,code=sm_21 
... 

निम्नलिखित विवरण NVCC के मैनुअल में दिया गया था,

GPU संकलन एक मध्यवर्ती प्रतिनिधित्व, PTX ([...]) के माध्यम से किया जाता है, एक के लिए विधानसभा के रूप में माना जा सकता है जो आभासी जीपीयू वास्तुकला। वास्तविक ग्राफिक्स प्रोसेसर के विपरीत, ऐसे वर्चुअल जीपीयू को पूरी तरह से क्षमताओं, या सुविधाओं, के सेट द्वारा परिभाषित किया जाता है जो यह एप्लिकेशन को प्रदान करता है। विशेष रूप से, एक वर्चुअल जीपीयू आर्किटेक्चर (काफी हद तक) सामान्य निर्देश सेट प्रदान करता है, और बाइनरी निर्देश एन्कोडिंग एक गैर-समस्या है क्योंकि पीटीएक्स प्रोग्राम हमेशा टेक्स्ट प्रारूप में प्रदर्शित होते हैं। इसलिए, एक एनवीसीसी संकलन आदेश हमेशा दो आर्किटेक्चर का उपयोग करता है: वर्चुअल इंटरमीडिएट आर्किटेक्चर को निर्दिष्ट करने के लिए एक गणना आर्किटेक्चर, साथ ही एक वास्तविक GPU आर्किटेक्चर निष्पादित करने के लिए इच्छित प्रोसेसर निर्दिष्ट करने के लिए। ऐसे एनवीसीसी कमांड के लिए मान्य होने के लिए, वास्तविक आर्किटेक्चर वर्चुअल आर्किटेक्चर का कार्यान्वयन (someway या अन्य) होना चाहिए। यह नीचे आगे बताया गया है। चयनित वर्चुअल आर्किटेक्चर GPU क्षमताओं पर एक बयान का अधिक है जो एप्लिकेशन को आवश्यक है: एक छोटे से वर्चुअल आर्किटेक्चर का उपयोग करने से दूसरे एनवीसीसी चरण के लिए वास्तविक आर्किटेक्चर की विस्तृत श्रेणी की अनुमति मिलती है। इसके विपरीत, वर्चुअल आर्किटेक्चर निर्दिष्ट करना जो अनुप्रयोग द्वारा अप्रयुक्त सुविधाओं को प्रदान करता है, संभावित GPUs सेट को प्रतिबंधित करता है जिसे दूसरे एनवीसीसी चरण में निर्दिष्ट किया जा सकता है।

लेकिन अभी भी यह नहीं पता कि प्रदर्शन विभिन्न कॉन्फ़िगरेशन (या शायद भौतिक जीपीयू उपकरणों के चयन को प्रभावित करेगा) से कैसे प्रभावित होगा। विशेष रूप से, इस बयान मेरे लिए सबसे भ्रामक है:

विशेष रूप से, एक आभासी GPU वास्तुकला एक (मोटे तौर पर) सामान्य अनुदेश सेट प्रदान करता है, और बाइनरी अनुदेश एन्कोडिंग एक गैर मुद्दा है क्योंकि PTX कार्यक्रमों हमेशा प्रतिनिधित्व कर रहे हैं है पाठ प्रारूप में।

उत्तर

6

NVIDIA CUDA Compiler Driver NVCCGPU Compilation पर उपयोगकर्ता मार्गदर्शिका अनुभाग वर्चुअल और भौतिक वास्तुकला का एक बहुत विस्तृत विवरण प्रदान करता है और निर्माण प्रक्रिया में अवधारणाओं का उपयोग कैसे किया जाता है।

वर्चुअल आर्किटेक्चर सुविधा सेट को निर्दिष्ट करता है जिसे कोड द्वारा लक्षित किया जाता है। नीचे सूचीबद्ध तालिका वर्चुअल आर्किटेक्चर के कुछ विकास दिखाती है। संकलित करते समय आपको सबसे कम वर्चुअल आर्किटेक्चर निर्दिष्ट करना चाहिए जिसमें भौतिक आर्किटेक्चर की विस्तृत श्रृंखला पर प्रोग्राम को निष्पादित करने के लिए पर्याप्त सुविधा सेट हो।(उपयोगकर्ता गाइड से)

compute_10 Basic features 
compute_11 + atomic memory operations on global memory 
compute_12 + atomic memory operations on shared memory 
      + vote instructions 
compute_13 + double precision floating point support 
compute_20 + Fermi support 
compute_30 + Kepler support 

शारीरिक वास्तुकला

वर्चुअल वास्तुकला फ़ीचर सूची GPU के कार्यान्वयन निर्दिष्ट करता है। यह निर्देश सेट, निर्देश विलंबता, निर्देश थ्रुपुट, संसाधन आकार इत्यादि के साथ कंपाइलर प्रदान करता है ताकि संकलक वर्चुअल आर्किटेक्चर को बाइनरी कोड में बेहतर रूप से अनुवाद कर सके।

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

1

वर्चुअल आर्किटेक्चर निर्दिष्ट करता है कि जीपीयू की क्या क्षमताएं हैं और असली आर्किटेक्चर यह निर्दिष्ट करता है कि यह कैसे करता है।

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

आप पीटीएक्स कोड प्रकार की तरह असेंबली कोड के बारे में सोच सकते हैं, जो एक निश्चित आर्किटेक्चर को लक्षित करता है, जिसे किसी विशिष्ट प्रोसेसर के लिए मशीन कोड में संकलित किया जा सकता है। सही प्रकार के प्रोसेसर के लिए असेंबली कोड को लक्षित करना सामान्य रूप से बेहतर मशीन कोड उत्पन्न करेगा।

0

आमतौर पर दस्तावेज़ के रूप में क्या एनवीडिया लिखता है लोगों को (स्वयं सहित) अधिक भ्रमित होने का कारण बनता है! (बस मुझे शायद!)

आप प्रदर्शन से चिंतित हैं, मूल रूप से यह कहता है कि यह संभवतः नहीं है (संभवतः) लेकिन आपको चाहिए। मूल रूप से जीपीयू आर्किटेक्चर प्रकृति की तरह है। वे उस पर कुछ चलाते हैं और कुछ होता है। तो वे इसे समझाने की कोशिश करते हैं। और फिर वे आपको खिलाते हैं।

अंत में कुछ परीक्षण चलाएंगे और देखें कि कौन सा कॉन्फ़िगरेशन सर्वोत्तम परिणाम देता है।

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

एकमात्र समस्या यह है कि, यदि आप एक ब्लॉक के लिए 1024 से अधिक थ्रेड आवंटित करते हैं तो आपको परिणाम के रूप में 0 एस मिल जाएगा, क्योंकि डिवाइस (असली आर्किटेक्चर) इसका समर्थन नहीं करता है।

या उदाहरण के लिए आपका डिवाइस CUDA 1.2 का समर्थन करता है, तो आप अपने कोड में डबल पॉइंटिंग चर परिभाषित कर सकते हैं, लेकिन फिर आपको परिणाम के रूप में 0 एस मिल जाएगा क्योंकि डिवाइस इसे चला नहीं सकता है।

प्रदर्शन के अनुसार आपको यह जानना होगा कि प्रत्येक 32 थ्रेड (उदा। युद्ध) को स्मृति में एक ही स्थिति तक पहुंचना है या अन्यथा आपकी पहुंच को क्रमबद्ध किया जाएगा और इसी तरह।

तो मुझे उम्मीद है कि अब तक आपको अंक मिल गया है, यह एक अपेक्षाकृत नया विज्ञान है और जीपीयू हार्डवेयर वास्तुकला का वास्तव में परिष्कृत टुकड़ा है, हर कोई इसे सर्वश्रेष्ठ बनाने की कोशिश कर रहा है लेकिन यह परीक्षण का एक गेम है और CUDA के पीछे वास्तविक वास्तुकला का थोड़ा ज्ञान। मेरा सुझाव है कि GPU आर्किटेक्चर की खोज करें और देखें कि वर्चुअल थ्रेड और थ्रेड ब्लॉक वास्तव में कैसे कार्यान्वित किए जाते हैं।

3

"वर्चुअल आर्किटेक्चर" कोड डिवाइस पर लोड होने से पहले एक समय-समय पर संकलक द्वारा संकलित किया जाएगा। AFAIK, यह एक ही संकलक है क्योंकि एक "एनवीसीसी" ऑफ़लाइन "भौतिक आर्किटेक्चर" कोड ऑफ़लाइन बनाते समय आमंत्रित करता है - इसलिए मुझे नहीं पता कि परिणामी एप्लिकेशन प्रदर्शन में कोई अंतर होगा या नहीं।

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

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