डिवाइस ड्राइवर निर्देश GPU कैसे प्रोग्राम करते हैं?


9

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

आइए हम इसे उस स्तर तक ले जाएं जहां हार्डवेयर कर्नेल है या नहीं इसकी परवाह नहीं है, और बस निर्देश लेता है।

मूल रूप से, जीपीयू "सब कुछ करने के लिए" ठीक से कैसे जानता है? क्या एक ड्राइवर मूल रूप से प्रत्येक माइनसक्यूल, आंतरिक, या हार्डवेयर सर्किट-स्तरीय फ़ंक्शन को नियंत्रित करता है या एक विशेष निर्देश का उपयोग करके प्रदर्शन के लिए बाइनरी डेटा की गणना करने के लिए संभव या आवश्यक है?

यदि ऐसा है, तो क्या सीपीयू इसे भेजे गए निर्देशों को समझने के लिए "विशेष" भाषा या "असेंबली" का उपयोग करता है?

मुझे अपने ज्ञान में बहुत अधिक अंतराल हैं, और GPU के पीछे यह अप्रिय "रहस्य" है और सीधे हार्डवेयर के माध्यम से उन तक पहुंचना है।

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

मैंने इस प्रकार के प्रश्न पूछे हैं और वे बिना किसी जवाब के हिंसक रूप से त्वरित रूप से डिलीट हो जाते हैं, कई साइटों पर क्यों, तो यहाँ क्या बड़ा रहस्य / रहस्य है? यह एक मदरबोर्ड पर हार्डवेयर का एक टुकड़ा है जिसे किसी अन्य की तरह एक्सेस किया जाता है।

तो वास्तव में ... यह मानते हुए कि सॉफ्टवेयर और हार्डवेयर से संबंधित एक "ठीक" प्रश्न है, कोई भी विक्रेता की विशिष्ट फ़ाइलों के बिना सीधे GPU का उपयोग कर सकता है, क्योंकि फाइलें जादुई नहीं हैं।

तो हार्डवेयर-विशिष्ट स्तर पर नंगे-धातु, प्रत्यक्ष हार्डवेयर परिप्रेक्ष्य से जीपीयू को "प्रोग्राम" कैसे किया जाता है?


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

मैं सहायता केंद्र नहीं पढ़ रहा हूं।

अगर मैं पूछूं कि क्यों नहीं?
डॉकटोरो रीचर्ड

क्योंकि बेहतर समय को विचार करने में खर्च किया जा सकता है, मेरे "ओके" प्रश्न को हल करने और उसका जवाब देने की कोशिश करना क्योंकि यह खड़ा है।

और जैसा कि मैंने कहा, इस प्रश्न का ठीक से उत्तर देने के लिए आपको शायद एक पुस्तक की आवश्यकता होगी ... लंबे उत्तर आमतौर पर अच्छे उत्तर नहीं होते हैं।
डॉकटोरो रीचर्ड

जवाबों:


8

मूल रूप से, जीपीयू "सब कुछ करने के लिए" ठीक से कैसे जानता है? क्या एक ड्राइवर मूल रूप से प्रत्येक माइनसक्यूल, आंतरिक, या हार्डवेयर सर्किट-स्तरीय फ़ंक्शन को नियंत्रित करता है या एक विशेष निर्देश का उपयोग करके प्रदर्शन के लिए बाइनरी डेटा की गणना करने के लिए संभव या आवश्यक है?

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

यदि ऐसा है, तो क्या सीपीयू इसे भेजे गए निर्देशों को समझने के लिए "विशेष" भाषा या "असेंबली" का उपयोग करता है?

हां और ना। अधिकांश उपकरणों की तरह, वीडियो-कार्ड मामलों को सरल बनाने के लिए मानकों का उपयोग करते हैं। वे नियमित रूप से फ़ंक्शंस जैसे बूट-टाइम वीडियो, या CUDA के लिए GPU- प्रोग्रामिंग फ़ंक्शंस तक पहुंचने के लिए VESA जैसे मानकों का उपयोग करते हैं । इसके अलावा, प्रोग्राम डिवाइस के प्रोग्रामिंग डॉक्यूमेंटेशन (जो एडॉप्टर की वेब साइट से उपलब्ध हैं) के संयोजन के साथ मशीन कोड (अक्सर सी को असेम्बल करने के लिए संकलित) का उपयोग करके गैर-मानक या डिवाइस-निर्भर कार्यों को सीधे एक्सेस कर सकते हैं।

मुझे अपने ज्ञान में बहुत अधिक अंतराल हैं, और GPU के पीछे यह अप्रिय "रहस्य" है और सीधे हार्डवेयर के माध्यम से उन तक पहुंचना है।

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

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

एक ड्राइवर मेमोरी-मैप किए गए पोर्ट और इस तरह से पहुंचकर नियमित सीपीयू निर्देशों के साथ डिवाइस को पढ़ और लिख सकता है। एक आसानी से समझ में आने वाले उदाहरण के रूप में, आप B8000 के पते पर "मेमोरी" लिखकर एक अक्षर को टेक्स्ट मोड में स्क्रीन पर रख सकते हैं। यह पता रैम नहीं था, बल्कि वीडियो-कार्ड की मेमोरी के अनुरूप करने के लिए मैप किया गया था, इसलिए इसे लिखने से स्क्रीन पर लिखा जाएगा। इसी तरह, आप ALरजिस्ट्री में, 0x09जिस AHरजिस्टर में लिखना चाहते हैं, उसे डालकर और फिर BIOS इंटरप्ट को कॉल करके आप टैग स्क्रीन लिख सकते हैं 0x10। अधिक उन्नत कार्य अलग नहीं हैं; आप एडॉप्टर की मेमोरी को पढ़ और लिख सकते हैं, इसके चिप पर फ़ंक्शंस को कॉल कर सकते हैं, और इस तरह जो भी इनट्रोफेस (ओं) का उपयोग कर रहे हैं कि डिवाइस एक्सपोज़ और डॉक्यूमेंट्स।

तो वास्तव में ... यह मानते हुए कि सॉफ्टवेयर और हार्डवेयर से संबंधित एक "ठीक" प्रश्न है, कोई भी विक्रेता की विशिष्ट फ़ाइलों के बिना सीधे GPU का उपयोग कर सकता है, क्योंकि फाइलें जादुई नहीं हैं।

केवल उन विशेषताओं के लिए जो मानकों का पालन करते हैं, लेकिन बाकी सब कुछ (यानी, अधिक उन्नत सामान), आपको निर्माता के प्रोग्रामिंग दस्तावेजों से परामर्श करना होगा।

तो हार्डवेयर-विशिष्ट स्तर पर नंगे-धातु, प्रत्यक्ष हार्डवेयर परिप्रेक्ष्य से जीपीयू को "प्रोग्राम" कैसे किया जाता है?

कई परतों के माध्यम से:

  1. ठोस राज्य घटक जैसे ट्रांजिस्टर और ऐसे
  2. निम्न स्तर के ए.एस.आई.सी.
  3. ऑन-बोर्ड प्रोसेसर (एस) और चिपसेट
  4. निम्न-स्तरीय प्रोग्रामिंग इंटरफेस (विधानसभा)
  5. उच्च-स्तरीय प्रोग्रामिंग इंटरफेस (DirectX, OpenGL)
  6. उच्च स्तरीय प्रोग्रामिंग भाषा (C ++, C #, पायथन, आदि)

1
'नंगे धातु' पर ध्यान दें; जिस मामले में आप सबसे अधिक गेम देव की बात सुनते हैं, वे शिकायत कर रहे हैं कि उन्हें कोड लिखने के बजाय DirectX / OpenGL जैसे उच्च स्तर के अमूर्त का उपयोग करना पड़ता है जो कार्ड की खुद की मशीन लैंग्ग का संकलन करता है। Nvidia के FERMI GPUs code.google.com/p/asfermi द्वारा उपयोग किए जाने वाले असेंबलर लैंगगैग के बारे में जानकारी के लिए यहाँ देखें कि CUDA मशीन लेवल में संकलित होने वाले उच्च स्तरीय लैंगगैग (PTX) के ऊपर बैठता है, इसलिए CUDA में आप जो प्रोग्राम बनाते हैं। संकलित आउटपुट के समान नहीं है।
फ्रैंक थॉमस

अरे, क्या आपके पास कॉलेज के छात्र के लिए एक अच्छा पुस्तक सुझाव हो सकता है जो इस पोस्ट में आपके द्वारा कही गई बातों को कवर करता हो? मुझे GPU प्रोग्रामिंग में कभी काम करने में कोई दिलचस्पी नहीं है, लेकिन मेरी समझ में यह कैसे काम करता है, इसकी निराशा है।
लान्ज़ा

2

मैं कंप्यूटर आर्किटेक्चर में बिल्कुल प्रतिभाशाली नहीं हूं, लेकिन मैं अपने ज्ञान के सबसे अच्छे रूप में आपके प्रश्न का इलाज करने की कोशिश करूंगा।


एक डिवाइस ड्राइवर मेरी स्क्रीन पर दिखाई देने वाली सभी चीज़ों के लिए ज़िम्मेदार है, जिसमें सही है कि मैं टाइप करता हूँ कि यह स्क्रीन अपडेट की गई है (यह, निश्चित रूप से, विंडोज़ की तरह, ओएस के दायरे में)।

यह सच है, मुख्य रूप से क्योंकि GPU के साथ प्रत्यक्ष बातचीत को लागू करना आसान नहीं है। इसलिए DirectX और OpenGL जैसे ग्राफिक फ्रेमवर्क का विकास।

विकिपीडिया की यह आसान परिभाषा इसे और अधिक विस्तार से बताती है:

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


मूल रूप से, जीपीयू "सब कुछ करने के लिए" ठीक से कैसे जानता है? क्या एक ड्राइवर मूल रूप से प्रत्येक माइनसक्यूल, आंतरिक, या हार्डवेयर सर्किट-स्तरीय फ़ंक्शन को नियंत्रित करता है या एक विशेष निर्देश का उपयोग करके प्रदर्शन के लिए बाइनरी डेटा की गणना करने के लिए संभव या आवश्यक है?

GPU के माइक्रोप्रोसेसर हैं। जैसे, वे प्रक्रिया करते हैं। वे डेटा को प्रोसेस करते हैं जो सीपीयू (तत्वों की स्थिति) से एक उचित डिस्प्ले में फीड किया जाता है। वे "जानते हैं" कैसे सब कुछ करना है क्योंकि वे उस तरह से निर्मित होते हैं और लोगों का एक बड़ा समूह जीपीयू से डेटा भेजने के लिए उचित तरीकों पर सहमत होता है।

प्रदर्शन चालक को बफर या प्रॉक्सी के रूप में सोचें। कल्पना कीजिए कि आप एक प्रोग्राम विंडो हैं और उपयोगकर्ता आपको ऊपर ले जाता है। आप GPU को डिस्प्ले को रिफ्रेश करने के लिए कहते हैं। लेकिन जैसे ही जीपीएल क्लिंगन बोलता है और आप वल्कन बोलते हैं , ड्राइवर आपकी आज्ञा प्राप्त करता है, इसे जीपीयू में बदल देता है जो बदले में आपको आदेश देता है।

यदि ऐसा है, तो क्या सीपीयू इसे भेजे गए निर्देशों को समझने के लिए "विशेष" भाषा या "असेंबली" का उपयोग करता है?


से विकिपीडिया :

एआरबी विधानसभा भाषा एक निम्न-स्तरीय छायांकन भाषा है, जिसे विधानसभा भाषा के रूप में प्रस्तुत किया जा सकता है। यह OpenGL Architecture Review Board (ARB) द्वारा हार्डवेयर ग्राफिक्स पाइपलाइन को नियंत्रित करने वाले GPU निर्देशों को मानकीकृत करने के लिए बनाया गया था।

यह उदाहरण है, और याद रखें कि अलग-अलग निर्माताओं (NVIDIA, ATI) के पास अपने स्वयं के अनुदेश सेट हैं।

इसके अलावा, ओपनसीएल और कई अन्य तरीके मौजूद हैं , एक तरह से सीधे जीपीयू को निर्देश देते हैं।

यह सब आपके सवाल का जवाब देना चाहिए, कुछ हद तक।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.