1 puan yazan GN⁺ 2024-03-28 | 1 yorum | WhatsApp'ta paylaş
  • Modern PC'lerde gerçek bir GPU gibi kullanılabilmesi için donanımdan sürücüye kadar doğrudan geliştirilmiş özel bir grafik işlem birimidir
  • Temel uygulama Xilinx Zynq UltraScale+ FPGA üzerinde gerçekleştirilmiş ve özel bir PCB üzerine yerleştirilmiştir
  • Ana bilgisayara PCIe ile bağlanır; bu nedenle bir yazılım deneyi değil, gerçek donanım GPU'su olarak çalışır
  • Desteklenen özellikler 1990'ların ortasındaki üst düzey grafik kartları seviyesine göre ayarlanmıştır ve o dönemin oyunlarını render etmeyi hedefler
  • Modern Windows sürücü yığını sayesinde o dönemin gerçek oyunlarını gerçek zamanın üzerinde kare hızlarıyla render edebilir

Donanım yapısı

  • FuryGpu, modern bilgisayarlarda kullanılmak üzere sıfırdan geliştirilmiş tamamen özel bir GPU'dur
  • Grafik işleme mantığı Xilinx Zynq UltraScale+ FPGA üzerinde uygulanmıştır
  • Özel bir PCB üzerine yerleştirilir ve ana bilgisayara PCIe ile bağlanır

Grafik özellikleri ve sürücüler

  • Donanım özellikleri, 1990'ların ortasındaki üst düzey grafik kartları ile eşdeğer seviyede destek sunar
  • Modern Windows yazılım sürücü yığını ile birlikte gelir ve gerçek bir ortamda GPU olarak kullanılabilir

Yapabildikleri

  • FuryGpu, o dönemin gerçek oyunlarını render edebilir
  • Render performansı, gerçek zamanın üzerinde kare hızlarına ulaşabilir

1 yorum

 
GN⁺ 2024-03-28
Hacker News yorumları
  • Bu projenin geliştiricisiyim. Sitede biraz daha içerik biriktikten sonra yayılmasını umuyordum ama böyle oldu :)
    En sık aldığım soruyu yanıtlayayım: Bir gün tüm stack'i açık kaynak olarak yayımlamayı düşünüyorum. PCB şeması/yerleşimi, tüm HDL, Windows WDDM sürücüsü, API runtime sürücüsü ve bu API'yi kullanacak şekilde port ettiğim Quake buna dahil
    Ancak işle ilgili hukuki konuları çözmem ve lisans gibi ayrıntılara karar vermem gerekiyor. Asıl işim değil ama yeterince yakın bir alan olduğu için dikkatli olmam gerekiyor
    Bu projenin ilk commit'i 22 Ağustos 2021'deydi; iki buçuk yıldan biraz fazla süredir üzerinde çalışıyorum. Süreç boyunca yazı yazmadım ama YouTube FuryGpu oynatma listesinde (https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) ilerlemeyi kabaca görebileceğiniz epey video var
    Sıradaki blog yazıları PCIe arayüzü hakkında olacak; PCB şeması/yerleşiminden başlayıp FPGA tasarımına, oradan Windows sürücüsüne uzanan çok bölümlü bir seri gibi olacak. Sadece bir Texture Unit yazısı yazmayı denedikten sonra, bu tür teknik yazıları düzenli aralıklarla yazan insanlara saygım daha da arttı
    • Discord'da yarı düzenli olarak güncellemeleri takip ediyordum; projenin buraya kadar gelmesi harika. Aynı dönemde kendi FPGA projemin ilerlemesi görece az olduğu için biraz moral bozucuydu da; yazıya dökülmesini bekliyordum
    • Xilinx Zynq UltraScale+'ı arattım, oldukça pahalı görünüyor. İnsanlar hobilerine çoğu zaman binlerce dolar ya da daha fazlasını harcıyor, yani paranız varsa sorun değil; ama bunun projenin nihai hedef donanımı mı olduğunu, yoksa daha ötesini mi düşündüğünüzü merak ediyorum
    • Hard IP bloklarına ne kadar bağımlı olduğunuzu merak ediyorum. Lattice ECP5 gibi başka üreticilerin FPGA'larına port edilebilir mi? PCIe'yi HDL ile kendiniz mi implemente ettiniz, yoksa üreticiye özgü IP blokları mı kullandınız, bunu da bilmek isterim. Kaynak kullanım istatistiklerini de paylaşırsanız güzel olur
    • Texture Unit yazısında mip seviyesi adres offset'leri için ROM tablosu epey yer kaplıyor gibi görünüyordu. Mip base address'i doku tanımının bir parçası olarak koymayı düşündünüz mü, merak ediyorum
    • Benzer bir şey denemek isteyen biri için hangi kitapları önerirsiniz, merak ediyorum. Örneğin PCIe takılan donanım için PCB kart tasarımı öğrenmeye yönelik kaynaklara ihtiyaç var
  • Ben Eater'ın breadboard bilgisayar serisinin hobi elektroniği üzerindeki etkisi şaşırtıcı düzeyde. Ben de benzer şekilde motive olup kendi “retro” CPU'mu tasarlamayı denemiştim
    6502 gibi takıp kullanması kolay, ama birkaç ek register ve donanımsal bölme gibi biraz daha fazla özelliği olan bir şeyi çok istiyorum; fakat gerçekten hiç kolay bir iş değil
    Sonunda “MCU kullanıp geçelim” noktasına geri dönüyorsunuz; ardından da grafik üretme sorununa çarpıyorsunuz
    • Bu proje de tam olarak oradan başladı. Ben Eater'ın 8 bit breadboard bilgisayarını yaptıktan sonra, daha ilginç bir şey yapmak için neye ihtiyaç olacağını araştırmaya başladım
      Yalnızca ayrık logic gate'lerle yüksek hızlı işlemlerin çoğunu yapmak zor olduğundan, FPGA ile neler yapılabileceğini öğrenmenin çok daha ilginç olacağını düşündüm
    • Register'lar stack ya da bellekle dolanılabilir; bölme de basit bir fonksiyon olarak implemente edilebilir. O seviyede çalışmanın eğlencesinin bir parçası bu
      Grafikler için başta seri çıkışla başlanabilir. Hazır olana kadar problemi soyutlayıp kenarda tutma yöntemi. Arduino'yu sonuna kadar zorlarsanız çok temel bir VGA grafik kartına dönüştürebilirsiniz [1]. ESP32 to VGA daha kolaydır ve klavye ile fare de sağlar [2]
      [1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
      [2] https://www.aliexpress.us/item/1005006222846299.html
    • Parallax Propeller'ı, özellikle DIP formunda gelen ilk modeli önerecektim; ama aslında onu programlamak çok daha karmaşık ve performansı da çok daha güçlü. O noktada ESP32'ye bakmak daha iyi olur ve sonuç yine “MCU kullanıp geçmek”e döner :)
      Video çıkışı, dijital çıkış için gereken bant genişliği yüzünden büyük bir sorun. Kompozit ya da VGA çıkışı için hâlâ kolay bulunabilen çiplerle mümkün olabilir. Yakın zamandaki Commander X16 bu sorun için FPGA'yı seçti
    • Bu kadar popüler başka bir örnek pek aklıma gelmiyor. Bir süre seyrekleşmişti, son zamanlarda yeniden bir ölçüde düzenli video yüklemeye başladı ve izleyici sayısı düşük yüz binler seviyesinde
      Videoları gerçekten sonuna kadar izleyenlerin 100 binin altında olduğunu düşünüyorum; bunların içinde bizzat bir şeyler deneyenler daha da azdır. Günümüz için hobi elektroniği şaşırtıcı derecede küçük hissettiriyor
    • MCU'larda grafiğe bakarken, yeni STM32 parçalarına giren küçük NeoChrom GPU'nun tamamen belgelenmediğini öğrenince hayal kırıklığına uğradım. Tarihsel olarak STM32, çipin içine kara kutu koymayan bir çizgideydi; muhtemelen üçüncü bir taraftan lisanslanan bir IP bloğu gibi görünüyor
  • Harika. Geliştiricinin niyetini anlamakta hello blog yazısı yardımcı oldu: https://www.furygpu.com/blog/hello
    Okuyunca, her şeyden önce eğlence için yapılan bir hobi projesi olduğu ve nasıl yaptığını anlatan çok sayıda yazı yazmayı planladığı anlaşılıyor
    Özellikle tüm stack'in çalışıyor olması etkileyici. Windows sürücüsü özel bir grafik API'si implemente ediyor ve Quake bunun üzerinde çalışıyor. DX/GL desteği olmaması üzücü, ama neden özel API yolunu seçtiği gayet anlaşılır
    Tasarımı açık kaynak olarak yayımlayıp yayımlamayacağını merak ediyorum
    • Temel D3D desteği için gereken özellikleri eklemek ciddi bir emek istiyor; performans açısından gerçekten neyin mümkün olduğunu değerlendiriyorum. Ne yazık ki görünüm pek iyi değil
      Mesele yalnızca “shader” değil; OS'in pencere yöneticisinin çalışması için bile gereksinimler oldukça fazla. Bu alandaki olağan oyuncular, yani AMD, Nvidia, Intel, Imagination ve benzerleri, 20 yılı aşkın süredir gelişen teknolojinin üzerine kademeli olarak inşa ettiler
  • Hayalimdeki proje

Geçen bir yıl boyunca giriş/çıkış kısıtları yüksek mikrodenetleyiciler için 2D odaklı bir GPU üzerinde çalışıyordum (https://github.com/KallDrexx/microgpu). Yavaş SPI aygıtlarında bile büyük ekranlara kullanıcı arayüzü render edebilmesini sağladım ve çalışma çok ilginçti
Ancak işlemci pipeline’ının sınırlarını gördükçe, FPGA ile bunu daha hızlı yapabileceğimi düşünüyordum. Yakın zamanda birkaç düşük maliyetli FPGA edinip ESP32 tabanlı microgpu’yu FPGA tabanlı hâle çevirmeyi öğrenmeye başladım
Çocuklar ve boş zaman kısıtları yüzünden bu seviyeye ulaşıp ulaşamayacağımı bilmiyorum ama bu seviyenin yüzde biri kadarını bile yapabilmeyi isterim

  • Zaten biliyor olmanız muhtemel ama bu yolu merak eden başkaları için söylemek gerekirse, bu tür kullanımda kendinizi özel yüksek bant genişlikli transceiver’ları olan FPGA’lerle sınırlamak kesinlikle değerli
    “Temel” bir 1080p RGB 60Hz sinyali bile, saf FPGA mantığıyla başa çıkması çok zor olan yüksek frekanslı sinyal işleme gerektirir
  • Pipeline retro görünüyor ama hiç olmamasından çok daha iyi
    Sözünü etmeye değer açık donanım GPU neredeyse yok. Lisansa bağlı olarak değişir ama bilgi bulamadım; bu ilk örnek ve daha fazla çalışmanın başlangıç noktası olabilir
    • Benzer türde GPU olarak şu da var
      https://github.com/asicguy/gplgpu
    • Elbette “açık” tanımına bağlı. Bildiğim kadarıyla nispeten güncel FPGA’ler için açık kaynak araç zinciri yok; bu yüzden gerçek değişiklik çalışmaları için hâlâ tescilli, muhtemelen ücretli araçlara bağlı kalıyorsunuz. iCE40 UP5k’den daha büyük bir şeye ihtiyacınız varsa neredeyse seçenek yok
    • Ticket2Ride Number9, 1990’ların sonlarından kalma sabit işlevli bir GPU idi ve GPL ile tamamen açık kaynak yapılmıştı
    • “GPU”yu ne olarak gördüğünüze bağlı
      https://github.com/schlae/graphics-gremlin bir MDA/CGA uyumlu adaptör
      https://github.com/OmarMongy/VGA bir VGA core’u
      https://github.com/archlabo/Frix ise VGA içeren tam bir IBM PC uyumlu SoC
    • Nyuzi de var; bu daha çok genel amaçlı GPU tarafına odaklanıyor: https://github.com/jbush001/NyuziProcessor. Ancak geliştiricisi 3D grafik çalıştırmayı da denemiş
  • Sahip olduklarımız içinde küçük bağımsız GPUya en yakın seçeneğin bu olduğuna inanamıyorum. M.2 formunda GPU gibi bir şey yok
    İstediğim tek şey bağımsız bir M.2 GPU. Performansı mütevazı olabilir; Intel UHD Graphics, AMD Radeon, Qualcomm Adreno gibi entegre GPU seviyesinde olması yeter
    Çok hesaplama ve ağ yeteneği gerektiren ama grafik gücüne çok az ihtiyaç duyan küçük bir gömülü ürün fikrim var. NXP Layerscape LX2160A [1] neredeyse kusursuzdu ama entegre GPU’su olmadığı için vazgeçmem gerekti. Sadece küçük bir GPU’ya ihtiyacım var
    [1]: https://www.nxp.com/products/processors-and-microcontrollers...
    • Asrock Rack’in Silicon Motion SM750 denetleyicisi tabanlı ürettiği en az bir M.2 GPU var. mPCIe form faktörlü ürünler de benzer şekilde mevcut
      Performansı modern entegre GPU’ların yanına bile yaklaşmıyor. Entegre GPU’lar sistem belleğini, önbelleği ve güç bütçesini kullanabiliyor; basit bir M.2 aygıtta ise bunlar yok. Düşük seviye PCIe GPU’lar, yani tek slot yarım uzunluk/yarım yükseklik kartlar bile iyi bir entegre GPU’yu geçmekte zorlanır ve yalnızca temel görüntü işlevi mutlaka gerektiğinde anlamlıdır
    • Eskiden oyuncu dizüstülerinde kullanılan MXM GPUlar nasıl olur? Standardın çok niş olduğu için pahalı olduğunu biliyorum. eBay’de ikinci el 3080M yaklaşık 400 dolar ama varlar ve PCIe’ye dönüştürüp M.2’ye de bağlanabilirler
    • Gücü fazla düşük olabilir ama şöyle bir şey de var: https://www.matrixorbital.com/ftdi-eve
  • Çok havalı bir proje ve bu alanda daha fazla çalışma görmek güzel
    Birlikte bakılabilecek bir şey de Georgia Tech’in Vortex projesi[1]. GPU tasarımının sabit işlevli geçmişini tekrarlamaktansa geleceğe bakan bir yaklaşım gibi görünüyor. Çekirdeğinde RISC-V tabanlı, yüksek derecede paralelleştirilmiş bir bilgisayar var ve GPU işlerini daha iyi ele almak için uzantılar içeriyor
    Çalıştırma kartları binlerce dolar olduğu için hobi amaçlı kullanıma pek dost değil ama kapalı, tescilli geliştirmeye göre kesinlikle daha erişilebilir. Birkaç ay önce 2.0 sürümü de çıktı
    [1]: https://vortex.cc.gatech.edu/
  • Gerçekten büyük bir başarı gibi görünüyor. Gerçek cihazın fotoğraflarını görmek isterim. Hangi FPGA modülünü kullandıkları konusunda da biraz kafam karıştı
    Blogda Xilinx Kria SoM’den bahsediliyor ama bağlantıyı izleyip modül özelliklerine bakınca içinde Xilinx FPGA değil de ARM SoC varmış gibi görünüyor. FPGA dünyasına aşina olmadığım için bir şeyi kaçırıyor olabilirim
    https://www.amd.com/en/products/system-on-modules/kria/k26/k...

Bu başlığın başka bir yerinde söylediğim gibi, Kria SoM; FPGA fabric’i ile kontrolü üstlenen donanımsal ARM çekirdeğinin birlikte bulunduğu bir yapı. O dönemde temin edilebilmesinin ve Kria geliştirme kartının yaklaşık 350 dolar gibi gerçekten ucuz olmasının yanı sıra, bu cihazlar ARM çekirdeğine bağlı donanımsal DisplayPort IP gibi şeyler de içeriyor; böylece görüntü çıkışı ve ses gibi işler firmware’e devredilebiliyor.
Bu projenin önceki sürümü Zynq 7020 üzerinde çalışıyordu ve o zaman HDMI ile ilgili kısımları doğrudan yazmak gerekiyordu. Çok karmaşık değil ama epey mantık kaynağı kaplıyor; yapılandırılabilir hale getirince çok daha karmaşıklaşıyor

  • ARM SoC ile Xilinx FPGA’dan biri değil, karma bir çip. FPGA ile geleneksel bir SoC’nin birleştirilmiş hali; bu yüzden yalnızca temel yönetim işleri için değerli FPGA kaynaklarını yiyen bir soft-core MCU koymak gerekmiyor
  • Xilinx, Kria SoM’de kullanılan FPGA’nın tam parça numarasını açıklamıyor. Ancak açık teknik özelliklere göre ZU3EG-UBVA530-2L ve ZU5EV-SFVC784-2L cihazlarıyla uyuşuyor gibi görünüyor[1]; bunlardan yalnızca ikincisinde PCIe desteği var
    Blog yazısında olduğu gibi bir FPGA kartı tasarlamak ve bring-up yapmak bile zaten yüksek bir eşik. Umarım bir gün şemalar ve kaynak kodlar yayımlanır
    [1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...
  • 1990’ların ortalarındaki üst seviye ekran kartlarına denk donanım özelliklerini desteklediği söylenmiş; sanırım henüz kimse bu soruyu sormamış, ben sorayım. VGA uyumluluğu ne düzeyde? Örneğin PCIe yuvası olan herhangi bir PC’ye takıp DOS ile boot ederek DOOM oynayabilir miyiz?
  • Üreticinin PCIe arayüzü uygulamasını ayrıntılı ele almasını isterdim. Benim o seviyede donanım işi yapmam muhtemelen hiç gerekmeyecek ama genel kültür açısından PCIe’nin iç yüzüne bakmaya değer olduğunu düşünüyorum
    • Bir sonraki blog yazısı tam olarak bunu ele alacak. Birkaç bölümlük bir seri olacak gibi; ilk yazı PCB şeması/yerleşimi, sonraki FPGA arayüzü ve test, ondan sonraki de Windows sürücüsü olacak gibi görünüyor
    • Kullanılan FPGA’da native PCIe olduğu için, genellikle bu kısımda yalnızca üreticiye ait kapalı IP bloğuna yönelik bir arayüz elde ediyorsunuz. FPGA dünyasında açık arayüzlerin durumu berbat. Tamamen açık kaynak olarak gördüğüm en iyi şey gigabit MAC civarındaydı
    • Xilinx PCIe hard IP çekirdeğinin üzerinde https://github.com/alexforencich/verilog-pcie kullanıyor. Bu çekirdek, transaction katmanının altındaki her şeyi sağlıyor