FuryGpu: Özel PCIe FPGA grafik işlem birimi
(furygpu.com)- 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
Hacker News yorumları
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ı
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
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
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
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
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
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
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
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
“Temel” bir 1080p RGB 60Hz sinyali bile, saf FPGA mantığıyla başa çıkması çok zor olan yüksek frekanslı sinyal işleme gerektirir
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
https://github.com/asicguy/gplgpu
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
İ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...
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
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/
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
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-...