- यह एक कस्टम ग्राफिक्स प्रोसेसिंग डिवाइस है, जिसे नवीनतम PC में वास्तविक GPU की तरह उपयोग करने के लिए हार्डवेयर से लेकर ड्राइवर तक सीधे बनाया गया है
- इसका मुख्य इम्प्लीमेंटेशन Xilinx Zynq UltraScale+ FPGA पर किया गया है, और इसे कस्टम PCB पर लगाया गया है
- यह होस्ट कंप्यूटर से PCIe के जरिए जुड़ता है, इसलिए यह सिर्फ सॉफ्टवेयर प्रयोग नहीं बल्कि वास्तविक हार्डवेयर GPU की तरह काम करता है
- समर्थित फीचर स्तर 1990 के दशक के मध्य के उन्नत ग्राफिक्स कार्ड के बराबर रखा गया है, ताकि उस दौर के गेम रेंडर किए जा सकें
- इसमें आधुनिक Windows ड्राइवर स्टैक भी है, जिससे उस युग के वास्तविक गेम वास्तविक समय से अधिक फ्रेमरेट पर रेंडर किए जा सकते हैं
हार्डवेयर संरचना
- FuryGpu एक पूरी तरह कस्टम GPU है, जिसे आधुनिक कंप्यूटर में उपयोग के लिए शुरू से बनाया गया है
- ग्राफिक्स प्रोसेसिंग लॉजिक Xilinx Zynq UltraScale+ FPGA पर इम्प्लीमेंट किया गया है
- इसे कस्टम PCB पर लगाया गया है, और होस्ट कंप्यूटर से PCIe के जरिए जोड़ा जाता है
ग्राफिक्स फीचर और ड्राइवर
- हार्डवेयर फीचर 1990 के दशक के मध्य के उन्नत ग्राफिक्स कार्ड के समकक्ष स्तर का समर्थन करते हैं
- आधुनिक Windows सॉफ्टवेयर ड्राइवर स्टैक भी दिया गया है, जिससे इसे वास्तविक वातावरण में GPU की तरह इस्तेमाल किया जा सकता है
किए जा सकने वाले कार्य
- FuryGpu उस दौर के वास्तविक गेम रेंडर कर सकता है
- रेंडरिंग प्रदर्शन वास्तविक समय से अधिक फ्रेमरेट तक पहुंच सकता है
1 टिप्पणियां
Hacker News की राय
सबसे ज़्यादा पूछे जाने वाले सवाल का जवाब दूँ तो, किसी समय पूरा stack open source करने का इरादा है। इसमें PCB schematic/layout, सारा HDL, Windows WDDM driver, API runtime driver, और उस API का इस्तेमाल करने के लिए port किया गया Quake भी शामिल है
बस नौकरी से जुड़े कानूनी मसले सुलझाने हैं, और license जैसी बारीक बातें भी तय करनी हैं। यह मेरा मुख्य काम नहीं है, लेकिन काफ़ी नज़दीकी क्षेत्र है, इसलिए सावधानी रखनी पड़ रही है
इस प्रोजेक्ट का पहला commit 22 अगस्त 2021 को था, और मैं इस पर ढाई साल से थोड़ा ज़्यादा समय से काम कर रहा हूँ। बीच में लिखित अपडेट नहीं दिए, लेकिन YouTube FuryGpu playlist(https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) में प्रगति का मोटा-मोटी अंदाज़ा देने वाले काफ़ी वीडियो हैं
अगले ब्लॉग पोस्ट PCIe interface पर होंगे, और लगता है कि PCB schematic/layout से शुरू होकर FPGA design और फिर Windows driver तक जाने वाली कई पोस्टों की series बनेगी। सिर्फ़ Texture Unit वाला लेख लिखकर ही मुझे उन लोगों के लिए और ज़्यादा सम्मान हो गया जो ऐसे technical लेख लगातार लिखते हैं
6502 की तरह plug-and-play हो, लेकिन उसमें कुछ extra registers और hardware division जैसी थोड़ी और सुविधाएँ हों—ऐसी किसी चीज़ की बहुत इच्छा है, लेकिन यह सच में आसान काम नहीं है
आख़िर में फिर “बस MCU इस्तेमाल कर लेते हैं” पर लौटना पड़ता है, और उसके बाद graphics generation की समस्या सामने आ जाती है
सिर्फ़ discrete logic gates से बहुत ज़्यादा high-speed processing करना मुश्किल है, इसलिए लगा कि FPGA से क्या किया जा सकता है, यह सीखना कहीं ज़्यादा दिलचस्प होगा
graphics के लिए शुरुआत में serial output से शुरू किया जा सकता है। जब तक आप उससे निपटने के लिए तैयार न हों, तब तक समस्या को abstract करके रखने का तरीका है। Arduino को पूरी तरह push करें तो उसे बहुत basic VGA graphics card बनाया जा सकता है [1]. ESP32 to VGA और भी आसान है और keyboard व mouse भी देता है [2]
[1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
[2] https://www.aliexpress.us/item/1005006222846299.html
video output में ज़रूरी bandwidth की वजह से यह बड़ी समस्या है। composite या VGA output के लिए शायद अभी भी आसानी से मिलने वाले chips से काम हो सकता है। हाल में Commander X16 ने इस समस्या के लिए FPGA चुना था
असल में वीडियो अंत तक देखने वाले लोग शायद 1 लाख से कम होंगे, और उनमें से कुछ अपने हाथ से कुछ बनाने की कोशिश करें, ऐसे लोग उससे भी कम होंगे। आज के समय के हिसाब से hobby electronics आश्चर्यजनक रूप से छोटा लगता है
इसे पढ़कर लगा कि सबसे पहले यह मज़े के लिए किया गया hobby project है, और आगे यह कैसे बनाया गया, इस पर बहुत-से लेख लिखने की योजना है
ख़ास तौर पर यह प्रभावशाली है कि पूरा stack काम करता है। Windows driver एक custom graphics API implement करता है, और उसके ऊपर Quake चलता है। DX/GL support न होना अफ़सोस की बात है, लेकिन custom API वाला रास्ता क्यों चुना गया, यह पूरी तरह समझ में आता है
जानना चाहता हूँ कि क्या design को open source किया जाएगा
समस्या सिर्फ़ “shader” की नहीं है; OS का window manager ही सही तरह चलाने के लिए काफ़ी ज़्यादा requirements माँगता है। इस क्षेत्र के सामान्य खिलाड़ी—AMD, Nvidia, Intel, Imagination आदि—20 साल से ज़्यादा में विकसित हुई तकनीक पर क्रमिक रूप से निर्माण करते आए हैं
पिछले 1 साल से मैं I/O constraints वाले microcontroller के लिए 2D-केंद्रित GPU पर काम कर रहा हूँ(https://github.com/KallDrexx/microgpu). मैंने इसे ऐसा बनाया कि धीमे SPI devices पर भी बड़े display में user interface render किया जा सके, और यह काम काफ़ी दिलचस्प रहा
लेकिन processor pipeline की सीमाएँ देखते हुए मुझे लगता रहा कि FPGA से इसे और तेज़ बनाया जा सकता है. हाल ही में मैंने कुछ low-cost FPGA लिए और ESP32-आधारित microgpu को FPGA-आधारित रूप में बदलने की कोशिश के लिए सीखना शुरू किया
बच्चों और free time की सीमाओं की वजह से पता नहीं मैं इस स्तर तक पहुँच पाऊँगा या नहीं, लेकिन इसका 100वाँ हिस्सा भी कर पाया तो अच्छा होगा
सिर्फ “basic” 1080p RGB 60Hz signal के लिए भी ऐसे high-frequency signal processing की ज़रूरत होती है जिसे केवल FPGA logic से संभालना बहुत मुश्किल है
उल्लेख करने लायक open hardware GPU लगभग हैं ही नहीं. license पर निर्भर करेगा, लेकिन मुझे जानकारी नहीं मिली, और यह पहला उदाहरण होने के साथ आगे के और काम की शुरुआत भी बन सकता है
https://github.com/asicguy/gplgpu
https://github.com/schlae/graphics-gremlin एक MDA/CGA-compatible adapter है
https://github.com/OmarMongy/VGA एक VGA core है
https://github.com/archlabo/Frix VGA सहित एक पूरा IBM PC-compatible SoC है
मुझे बस एक standalone M.2 GPU चाहिए. performance modest हो तो भी चलेगा, Intel UHD Graphics, AMD Radeon, Qualcomm Adreno जैसे integrated GPU के स्तर का हो तो काफ़ी है
मेरे पास एक छोटे embedded product का idea है जिसमें compute और networking बहुत चाहिए, लेकिन graphics capability बहुत कम. NXP Layerscape LX2160A [1] लगभग perfect होता, लेकिन integrated GPU न होने की वजह से उसे छोड़ना पड़ा. बस एक छोटा GPU चाहिए
[1]: https://www.nxp.com/products/processors-and-microcontrollers...
performance आधुनिक integrated GPU के आसपास भी नहीं पहुँचती. integrated GPU system memory, cache और power budget तीनों का इस्तेमाल कर सकते हैं, लेकिन साधारण M.2 device ऐसा नहीं कर पाता. low-end PCIe GPU, यानी single-slot half-length/half-height card भी, अच्छे integrated GPU से आगे निकलना मुश्किल पाता है, और उसका मतलब तभी है जब basic display functionality बिल्कुल ज़रूरी हो
साथ में देखने लायक Georgia Tech का Vortex project भी है[1]. यह GPU design के fixed-function अतीत को दोहराने के बजाय भविष्य की ओर देखने वाला approach लगता है. इसका मूल एक RISC-V-आधारित, अत्यधिक parallelized computer है, जिसमें GPU workloads को बेहतर ढंग से संभालने के लिए extensions शामिल हैं
run करने वाले boards हज़ारों डॉलर के हैं, इसलिए hobby use के लिए यह बहुत friendly नहीं है, लेकिन closed proprietary development की तुलना में यह निश्चित रूप से ज़्यादा accessible है. कुछ महीने पहले इसका 2.0 release भी आया था
[1]: https://vortex.cc.gatech.edu/
blog में Xilinx Kria SoM का ज़िक्र है, लेकिन जब मैं link खोलकर module specifications देखता हूँ, तो उसमें Xilinx FPGA नहीं बल्कि ARM SoC दिखाई देता है. मुझे FPGA ecosystem की ज़्यादा आदत नहीं है, इसलिए हो सकता है मैं कुछ मिस कर रहा हूँ
https://www.amd.com/en/products/system-on-modules/kria/k26/k...
जैसा कि इस थ्रेड में कहीं और कहा गया है, Kria SoM की संरचना ऐसी है कि इसमें FPGA fabric के साथ control संभालने वाले hard ARM cores भी होते हैं। उस समय यह उपलब्ध भी था, और Kria dev board लगभग 350 डॉलर में सचमुच काफी सस्ता था। इसके अलावा, इन डिवाइसों में ARM cores से जुड़ा hard DisplayPort IP जैसी चीजें भी शामिल हैं, इसलिए video output और audio जैसे काम firmware को सौंपे जा सकते हैं
इस प्रोजेक्ट का पिछला version Zynq 7020 पर चलता था, और तब HDMI से जुड़ा हिस्सा खुद लिखना पड़ता था। यह बहुत जटिल तो नहीं है, लेकिन काफी logic घेर लेता है, और अगर इसे configurable बनाना हो तो यह कहीं ज्यादा जटिल हो जाता है
ब्लॉग पोस्ट में कहा गया है कि सिर्फ FPGA board को design करना और उसका bring-up करना ही अपने आप में एक बड़ा hurdle है। अच्छा होगा अगर कभी schematics और source public किए जाएँ
[1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...