2011-06-15 9 views
8

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

क्या कोई अच्छा संसाधन है जहां मुझे इन विवरणों के बारे में जानकारी मिल सकती है?

उत्तर

9

आपने एक बहुत व्यापक और जटिल प्रश्न पूछा है। असल में, आपने से कई व्यापक, जटिल प्रश्न पूछे हैं।

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

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

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

चालक का काम इन कॉलों को लेना है जिन्हें अग्रेषित किया गया है और उन्हें जीपीयू द्वारा किए जाने वाले सामानों में परिवर्तित कर दिया गया है।

उसी लाइन पर, ग्राफिक्स पाइपलाइन कहां परिभाषित है? जीपीयू हार्डवेयर, ड्राइवर, या सॉफ्टवेयर लाइब्रेरी में?

यह वास्तव में इन दिनों एक बहुत मुश्किल सवाल है, और हर हार्डवेयर पीढ़ी के लिए मुश्किल बन रहा है।

पुराने दिनों में, ग्राफिक्स पाइपलाइन का निर्माण कठोर रूप से GPU हार्डवेयर द्वारा नियंत्रित किया गया था। इन दिनों, यह कम सच है, हालांकि कुछ हार्डवेयर नियंत्रण है। आधुनिक हार्डवेयर (ओपनजीएल 3.0 या डायरेक्ट 3 डी 10 या बेहतर में सक्षम) पर, यह सैद्धांतिक रूप से संभव होगा, यदि आपके पास ग्राफिक्स ड्राइवर तक सीधे पहुंच है, तो एक एपीआई डिज़ाइन करने के लिए जो ग्राफिक्स पाइपलाइन के कुछ हद तक परिवर्तित संस्करण का उपयोग करता है। तो एपीआई ग्राफिक्स पाइपलाइन की तरह दिखने के बारे में बताते हैं।

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

+1

बहुत बहुत धन्यवाद। मैं अच्छी तरह से जानता हूं कि मेरा प्रश्न कितना व्यापक था ... इसके बारे में क्षमा करें, लेकिन मुझे इतना अच्छा जवाब देने के लिए समय निकालने के लिए धन्यवाद। यह कई चीजों को स्पष्ट करता है। अगर मुझे यह सही लगता है, तो एपीआई कॉल मान्य करता है, उन्हें समूह करता है और अंततः संचित कॉल भेजने वाले सिस्टम कॉल के माध्यम से ड्राइवर को कॉल करता है। क्या यह कॉल करता है कि चालक को असेंबली, उच्च स्तरीय direct3d/opengl कमांड या न तो दिखता है? – cloudraven

+0

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

+1

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

7

डी 3 डी या ओजीएल निर्देशों जैसी कोई चीज़ नहीं है। डायरेक्ट 3 डी या ओपनजीएल ग्राफिक्स ड्राइवर में कॉल करेगा और वे ऐसा करने के लिए जो कुछ भी करने की ज़रूरत है वह करेंगे। यह पूरी तरह से शेडर्स के लिए सच नहीं है, जिसमें एपीआई (डी 3 डी/ओजीएल) स्तर पर एक समान बाइटकोड है, और इस मामले में, एपीआई एक कंपाइलर प्रदान करता है, लेकिन जहां तक ​​मुझे पता है, अभी भी बदल गया है निष्पादित होने से पहले हार्डवेयर-निर्भर तरीके। बेशक, डायरेक्ट 3 डी और ओपनजीएल में प्रदर्शन को बेहतर बनाने या बेहतर इंटरफ़ेस प्रदान करने के लिए उपयोगकर्ता-मोड घटक भी शामिल हैं- उदाहरण के लिए, वे संदर्भ स्विच को कम करने के लिए कर्नेल को कॉल बैच करेंगे।

जीपीयू बनाने की वास्तविकता यह है कि माइक्रोसॉफ्ट और एनवीडिया/एटीआई एक साथ मिलते हैं और सोचते हैं कि वे क्या चाहते हैं और कार्यान्वित करने के लिए क्या संभव है, और समूह विनिर्देश के साथ आते हैं, क्योंकि वास्तविकता यह है कि इनमें से कोई भी काम नहीं करेगा प्रमुख हार्डवेयर और सॉफ्टवेयर विक्रेताओं ने सह-संचालन नहीं किया। कोई भी जीपीयू नहीं खरीदता है जो डायरेक्टएक्स का समर्थन नहीं करता है- और कोई भी विंडोज़ नहीं खरीदेंगे जहां कोई GPU DirectX लागू नहीं करता है। बेशक, "कोई भी" सापेक्ष नहीं है- लेकिन यह सभी संबंधित लोगों के लिए एक बड़ा नुकसान होगा, और निश्चित रूप से, यदि आपके पास ऐसा गेम है जो केवल डी 3 डी 10 एपीआई के लिए बनाया गया है, तो डी 3 डी 10 का समर्थन करने वाला ड्राइवर गेम चलाने के लिए जरूरी है - सॉफ्टवेयर की रेंज को बढ़ाकर उत्पाद के मूल्य को प्रभावी ढंग से बढ़ाकर, जो एक विक्रय बिंदु है। इसका मतलब यह है कि हार्डवेयर विक्रेता या सॉफ़्टवेयर विक्रेता द्वारा परिभाषित किए जाने के बीच अर्थपूर्ण अंतर कम से कम, यथार्थ रूप से- विशेष रूप से पीसी, ओपनजीएल और डायरेक्ट 3 डी पर केवल दो वास्तविक 3 डी प्रतिपादन एपीआई के रूप में, ग्राफिकल पाइपलाइन के लिए बहुत ही समान मॉडल का पालन करें, जहां तक मुझे पता है।

हालांकि, नए प्रोग्राम करने योग्य जीपीयू के साथ, आप तर्क दे सकते हैं कि ग्राफिकल पाइपलाइन वास्तव में मौजूद नहीं है- यदि आपके पास प्रोग्राम करने का धैर्य है तो किसी भी ग्राफिक्स पाइपलाइन के लिए एक DX11 डिवाइस का उपयोग किया जा सकता है।

आखिरकार, GPU को मजबूत ड्राइवर-स्तरीय अमूर्तता द्वारा संरक्षित किया जाता है। यह एक सी-शैली इंटरफेस लागू करता है, और जो भी कार्यान्वयन में आवश्यक है या आवश्यक है। उसके बाद सब कुछ पूरी तरह कार्यान्वयन-परिभाषित है।

आप एक ग्राफिक्स ड्राइवर लिखने के लिए एमएसडीएन दस्तावेज देख सकते हैं। मैंने इसे देखा है, लेकिन एक लिंक आसान नहीं है, और यह उन इंटरफेस का वर्णन करता है जिन्हें आपको पालन करना होगा और अन्य चीजें।

+0

इससे बहुत समझदारी होती है। यह देखते हुए कि ड्राइवरों को कैसे लिखना चाहिए, मेरे सभी सवालों के लिए एक बहुत सटीक उत्तर देना चाहिए। मैं इसे देखूंगा – cloudraven

3

आपको पहले से ही दो बहुत अच्छे उत्तर मिल गए हैं। लेकिन शायद सबसे अच्छी बात यह है कि एएमडी/एटीआई के जीपीयू के लिए वास्तविक प्रोग्रामिंग दस्तावेज पढ़ना: http://developer.amd.com/documentation/guides/pages/default.aspx#open_gpu

दुर्भाग्य से एनवीडिया उनके प्रकाशित नहीं करेगा।

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