1 पॉइंट द्वारा GN⁺ 2024-03-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह एक कस्टम ग्राफिक्स प्रोसेसिंग डिवाइस है, जिसे नवीनतम PC में वास्तविक GPU की तरह उपयोग करने के लिए हार्डवेयर से लेकर ड्राइवर तक सीधे बनाया गया है
  • इसका मुख्य इम्प्लीमेंटेशन Xilinx Zynq UltraScale+ FPGA पर किया गया है, और इसे कस्टम PCB पर लगाया गया है
  • यह होस्ट कंप्यूटर से PCIe के जरिए जुड़ता है, इसलिए यह सिर्फ सॉफ्टवेयर प्रयोग नहीं बल्कि वास्तविक हार्डवेयर GPU की तरह काम करता है
  • समर्थित फीचर स्तर 1990 के दशक के मध्य के उन्नत ग्राफिक्स कार्ड के बराबर रखा गया है, ताकि उस दौर के गेम रेंडर किए जा सकें
  • इसमें आधुनिक Windows ड्राइवर स्टैक भी है, जिससे उस युग के वास्तविक गेम वास्तविक समय से अधिक फ्रेमरेट पर रेंडर किए जा सकते हैं

हार्डवेयर संरचना

  • FuryGpu एक पूरी तरह कस्टम GPU है, जिसे आधुनिक कंप्यूटर में उपयोग के लिए शुरू से बनाया गया है
  • ग्राफिक्स प्रोसेसिंग लॉजिक Xilinx Zynq UltraScale+ FPGA पर इम्प्लीमेंट किया गया है
  • इसे कस्टम PCB पर लगाया गया है, और होस्ट कंप्यूटर से PCIe के जरिए जोड़ा जाता है

ग्राफिक्स फीचर और ड्राइवर

  • हार्डवेयर फीचर 1990 के दशक के मध्य के उन्नत ग्राफिक्स कार्ड के समकक्ष स्तर का समर्थन करते हैं
  • आधुनिक Windows सॉफ्टवेयर ड्राइवर स्टैक भी दिया गया है, जिससे इसे वास्तविक वातावरण में GPU की तरह इस्तेमाल किया जा सकता है

किए जा सकने वाले कार्य

  • FuryGpu उस दौर के वास्तविक गेम रेंडर कर सकता है
  • रेंडरिंग प्रदर्शन वास्तविक समय से अधिक फ्रेमरेट तक पहुंच सकता है

1 टिप्पणियां

 
GN⁺ 2024-03-28
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 लेख लगातार लिखते हैं
    • मैं Discord पर अर्ध-नियमित अपडेट देखता रहा हूँ, और प्रोजेक्ट को यहाँ तक आते देखना शानदार है। उसी अवधि में मेरे FPGA प्रोजेक्ट में तुलनात्मक रूप से कम प्रगति हुई, इसलिए थोड़ी निराशा भी हुई, और मैं इसे लिखित रूप में सहेजे जाने का इंतज़ार कर रहा था
    • मैंने Xilinx Zynq UltraScale+ खोजा, और यह काफ़ी महँगा लगा। लोग शौक पर हज़ारों डॉलर से ज़्यादा भी खर्च कर देते हैं, इसलिए पैसे हों तो यह समस्या नहीं है, लेकिन जानना चाहता हूँ कि क्या यही प्रोजेक्ट का अंतिम लक्ष्य hardware है, या इससे आगे कुछ और सोचा गया है
    • जानना चाहता हूँ कि आप hard IP block पर कितना निर्भर करते हैं। क्या इसे Lattice ECP5 जैसे किसी दूसरे vendor FPGA पर port किया जा सकता है? यह भी जानना चाहूँगा कि PCIe को आपने HDL में सीधे implement किया या vendor-specific IP block का इस्तेमाल किया। resource usage के आँकड़े भी मिलें तो अच्छा होगा
    • Texture Unit वाले लेख में mip level address offset के लिए ROM table काफ़ी जगह लेती हुई लगती है। क्या आपने mip base address को texture specification का हिस्सा बनाने का विकल्प सोचा था?
    • अगर कोई ऐसा ही कुछ करना चाहे, तो आप कौन-सी किताबें सुझाएँगे? उदाहरण के लिए, PCIe में लगने वाले hardware के लिए PCB board design सीखने का material चाहिए
  • Ben Eater की breadboard computer series का hobby electronics पर प्रभाव हैरान करने वाला है। मैं भी उससे प्रेरित होकर अपना “retro” CPU design करने की कोशिश कर रहा था
    6502 की तरह plug-and-play हो, लेकिन उसमें कुछ extra registers और hardware division जैसी थोड़ी और सुविधाएँ हों—ऐसी किसी चीज़ की बहुत इच्छा है, लेकिन यह सच में आसान काम नहीं है
    आख़िर में फिर “बस MCU इस्तेमाल कर लेते हैं” पर लौटना पड़ता है, और उसके बाद graphics generation की समस्या सामने आ जाती है
    • यह प्रोजेक्ट भी ठीक वहीं से शुरू हुआ था। Ben Eater का 8-bit breadboard computer बनाने के बाद, मैंने सोचना शुरू किया कि उससे ज़्यादा दिलचस्प कुछ बनाने के लिए क्या चाहिए होगा
      सिर्फ़ discrete logic gates से बहुत ज़्यादा high-speed processing करना मुश्किल है, इसलिए लगा कि FPGA से क्या किया जा सकता है, यह सीखना कहीं ज़्यादा दिलचस्प होगा
    • registers को stack या memory से bypass किया जा सकता है, और division को एक simple function की तरह implement किया जा सकता है। उस स्तर पर काम करने का मज़ा ही यही है
      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
    • मैं Parallax Propeller, ख़ासकर DIP form factor वाले पहले मॉडल की सिफ़ारिश करने वाला था, लेकिन सच कहूँ तो वह programming के लिहाज़ से कहीं ज़्यादा जटिल है और performance भी बहुत ज़्यादा ताक़तवर है। उस बिंदु पर ESP32 को देखना बेहतर है, और फिर बात वापस “बस MCU इस्तेमाल करो” पर आ जाती है :)
      video output में ज़रूरी bandwidth की वजह से यह बड़ी समस्या है। composite या VGA output के लिए शायद अभी भी आसानी से मिलने वाले chips से काम हो सकता है। हाल में Commander X16 ने इस समस्या के लिए FPGA चुना था
    • मुझे ऐसा कोई और उदाहरण याद नहीं आता जो इस हद तक लोकप्रिय हुआ हो। कुछ समय तक यह शांत रहा, फिर हाल में उसने फिर से कुछ नियमितता के साथ वीडियो डालना शुरू किया, और दर्शक संख्या शुरुआती कुछ लाख के आसपास है
      असल में वीडियो अंत तक देखने वाले लोग शायद 1 लाख से कम होंगे, और उनमें से कुछ अपने हाथ से कुछ बनाने की कोशिश करें, ऐसे लोग उससे भी कम होंगे। आज के समय के हिसाब से hobby electronics आश्चर्यजनक रूप से छोटा लगता है
    • MCU पर graphics देखते हुए यह जानकर निराशा हुई कि नए STM32 parts में आने वाला छोटा NeoChrom GPU पूरी तरह documented नहीं है। ऐतिहासिक रूप से STM32 आम तौर पर chip के अंदर black box नहीं रखता था, इसलिए लगता है कि यह शायद किसी third party से licensed IP block है
  • शानदार। निर्माता की मंशा समझने में hello ब्लॉग मददगार रहा: https://www.furygpu.com/blog/hello
    इसे पढ़कर लगा कि सबसे पहले यह मज़े के लिए किया गया hobby project है, और आगे यह कैसे बनाया गया, इस पर बहुत-से लेख लिखने की योजना है
    ख़ास तौर पर यह प्रभावशाली है कि पूरा stack काम करता है। Windows driver एक custom graphics API implement करता है, और उसके ऊपर Quake चलता है। DX/GL support न होना अफ़सोस की बात है, लेकिन custom API वाला रास्ता क्यों चुना गया, यह पूरी तरह समझ में आता है
    जानना चाहता हूँ कि क्या design को open source किया जाएगा
    • बुनियादी D3D support के लिए ज़रूरी features जोड़ने में काफ़ी मेहनत लगती है, और performance के लिहाज़ से वास्तव में क्या संभव है, यह मैं अभी परख रहा हूँ। दुर्भाग्य से तस्वीर अच्छी नहीं लग रही
      समस्या सिर्फ़ “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वाँ हिस्सा भी कर पाया तो अच्छा होगा

  • शायद आपको यह पहले से पता हो, लेकिन इस रास्ते को लेकर जिज्ञासु दूसरे लोगों के लिए कहूँ तो, ऐसे use case में dedicated high-bandwidth transceivers वाले FPGA तक खुद को सीमित रखना निश्चित रूप से फ़ायदेमंद है
    सिर्फ “basic” 1080p RGB 60Hz signal के लिए भी ऐसे high-frequency signal processing की ज़रूरत होती है जिसे केवल FPGA logic से संभालना बहुत मुश्किल है
  • pipeline retro लगती है, लेकिन न होने से तो कहीं बेहतर है
    उल्लेख करने लायक open hardware GPU लगभग हैं ही नहीं. license पर निर्भर करेगा, लेकिन मुझे जानकारी नहीं मिली, और यह पहला उदाहरण होने के साथ आगे के और काम की शुरुआत भी बन सकता है
    • इसी तरह के GPU में यह भी है
      https://github.com/asicguy/gplgpu
    • बेशक, यह “open” की परिभाषा पर निर्भर करता है. जहाँ तक मुझे पता है, कुछ हद तक modern FPGA के लिए open source toolchain नहीं है, इसलिए वास्तविक modification का काम अब भी proprietary, और शायद paid, tools पर निर्भर रहता है. अगर iCE40 UP5k से बड़ा कुछ चाहिए, तो लगभग कोई रास्ता नहीं है
    • Ticket2Ride Number9 1990 के दशक के आख़िरी हिस्से का fixed-function GPU था, और इसे GPL के तहत पूरी तरह open source किया गया था
    • “GPU” को आप क्या मानते हैं, इस पर भी निर्भर करता है
      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 है
    • Nyuzi भी है, और यह general-purpose GPU पर ज़्यादा focused है: https://github.com/jbush001/NyuziProcessor. हालाँकि इसके निर्माता ने 3D graphics चलाने के experiment भी किए थे
  • यक़ीन नहीं होता कि हमारे पास मौजूद विकल्पों में यह छोटे standalone GPU के सबसे क़रीब है. M.2 form factor GPU जैसी कोई चीज़ नहीं है
    मुझे बस एक 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...
    • Asrock Rack द्वारा बनाया गया Silicon Motion SM750 controller-आधारित कम से कम एक M.2 GPU है. mPCIe form factor वाला product भी इसी तरह मौजूद है
      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 बिल्कुल ज़रूरी हो
    • पुराने gaming laptops में आने वाले MXM GPU का क्या? मुझे पता है कि यह standard बहुत niche है इसलिए महँगा है. eBay पर used 3080M लगभग 400 डॉलर का है, लेकिन वह मौजूद है और PCIe में convert करने के बाद M.2 से भी जोड़ा जा सकता है
    • power बहुत कम हो सकती है, लेकिन यह भी है: https://www.matrixorbital.com/ftdi-eve
  • यह बहुत शानदार project है, और इस क्षेत्र में और काम देखना अच्छा लगता है
    साथ में देखने लायक 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/
  • यह सचमुच बड़ी उपलब्धि लगती है. मैं actual device की तस्वीरें देखना चाहूँगा. यह भी थोड़ा unclear है कि कौन-सा FPGA module इस्तेमाल किया गया है
    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 बनाना हो तो यह कहीं ज्यादा जटिल हो जाता है

  • यह ARM SoC और Xilinx FPGA में से कोई एक नहीं, बल्कि एक hybrid chip है। इसमें FPGA और पारंपरिक SoC को जोड़ा गया है, इसलिए सिर्फ basic management tasks के लिए कीमती FPGA resources खा जाने वाला कोई softcore MCU डालने की जरूरत नहीं पड़ती
  • Xilinx, Kria SoM में इस्तेमाल हुए सटीक FPGA part number को सार्वजनिक नहीं करता। लेकिन public specs के आधार पर यह ZU3EG-UBVA530-2L और ZU5EV-SFVC784-2L डिवाइसों से मेल खाता दिखता है[1], और इनमें से केवल बाद वाले में PCIe support है
    ब्लॉग पोस्ट में कहा गया है कि सिर्फ FPGA board को design करना और उसका bring-up करना ही अपने आप में एक बड़ा hurdle है। अच्छा होगा अगर कभी schematics और source public किए जाएँ
    [1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...
  • कहा गया था कि यह 1990 के दशक के मध्य के high-end graphics cards के बराबर hardware features को support करता है, लेकिन लगता है अभी तक किसी ने यह सवाल नहीं पूछा, इसलिए मैं पूछना चाहता हूँ। VGA compatibility कितनी है? उदाहरण के लिए, क्या इसे PCIe slot वाले किसी भी PC में लगाकर DOS में boot करके DOOM खेला जा सकता है?
  • अच्छा होगा अगर निर्माता PCIe interface के implementation को विस्तार से कवर करे। शायद मुझे उस स्तर का hardware काम कभी न करना पड़े, लेकिन सामान्य जानकारी के तौर पर PCIe के अंदरूनी हिस्से को समझना उपयोगी है
    • अगली ब्लॉग पोस्ट ठीक इसी विषय को कवर करने वाली है। लगता है यह कई हिस्सों की series होगी: पहली पोस्ट PCB schematics/layout पर, अगली FPGA interface और testing पर, और उसके बाद Windows driver पर होगी
    • इस्तेमाल किए जा रहे FPGA में native PCIe है, इसलिए आमतौर पर इस हिस्से में आपको सिर्फ vendor-proprietary IP block के interface तक ही पहुँच मिलती है। FPGA दुनिया में open interface की स्थिति बहुत खराब है। पूरी तरह open source में मैंने अब तक जो सबसे अच्छा देखा है, वह शायद gigabit MAC है
    • Xilinx PCIe hard IP core के ऊपर https://github.com/alexforencich/verilog-pcie का उपयोग किया गया है। यह core transaction layer के नीचे की हर चीज उपलब्ध कराता है