1 poin oleh GN⁺ 2024-03-28 | 1 komentar | Bagikan ke WhatsApp
  • Ini adalah unit pemrosesan grafis kustom yang dibuat sendiri mulai dari hardware hingga driver agar dapat digunakan seperti GPU sungguhan di PC modern
  • Implementasi intinya dilakukan di atas Xilinx Zynq UltraScale+ FPGA, dan dipasang pada PCB kustom
  • Terhubung ke komputer host melalui PCIe, sehingga berfungsi sebagai GPU hardware sungguhan, bukan eksperimen software
  • Fitur yang didukung disesuaikan dengan level kartu grafis kelas atas pertengahan 1990-an, dengan target rendering game pada era tersebut
  • Dengan dukungan hingga stack driver Windows modern, GPU ini dapat merender game sungguhan dari era tersebut pada frame rate di atas real-time

Konfigurasi hardware

  • FuryGpu adalah GPU sepenuhnya kustom yang dibuat dari awal untuk digunakan di komputer modern
  • Logika pemrosesan grafis diimplementasikan di atas Xilinx Zynq UltraScale+ FPGA
  • Dipasang pada PCB kustom dan terhubung ke komputer host melalui PCIe

Fitur grafis dan driver

  • Fitur hardwarenya mendukung kemampuan setara kartu grafis kelas atas pertengahan 1990-an
  • Disediakan bersama stack driver software Windows modern sehingga dapat digunakan sebagai GPU di lingkungan nyata

Tugas yang dapat dijalankan

  • FuryGpu dapat merender game sungguhan dari era tersebut
  • Performa renderingnya dapat mencapai frame rate di atas real-time

1 komentar

 
GN⁺ 2024-03-28
Opini Hacker News
  • Saya pembuat proyek ini. Saya berharap proyek ini menyebar setelah konten di situsnya sedikit lebih banyak, tapi jadinya begini :)
    Untuk menjawab pertanyaan yang paling sering saya terima: suatu hari nanti saya berniat merilis seluruh stack sebagai open source. Ini mencakup skematik/layout PCB, semua HDL, driver Windows WDDM, driver runtime API, bahkan Quake yang saya port agar memakai API tersebut
    Namun saya harus membereskan urusan hukum terkait pekerjaan saya, dan juga memutuskan detail seperti lisensi. Ini bukan pekerjaan utama saya, tetapi bidangnya cukup berdekatan, jadi saya harus berhati-hati
    Commit pertama proyek ini dibuat pada 22 Agustus 2021, dan saya sudah mengerjakannya sedikit lebih dari dua setengah tahun. Saya tidak menulis selama prosesnya, tetapi di playlist YouTube FuryGpu (https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) ada cukup banyak video yang kira-kira menunjukkan progresnya
    Tulisan blog berikutnya akan membahas antarmuka PCIe, dan sepertinya akan menjadi seri beberapa bagian yang dimulai dari skematik/layout PCB, lalu desain FPGA, hingga driver Windows. Setelah menulis satu artikel tentang Texture Unit saja, saya jadi makin menghormati orang-orang yang rutin menulis artikel teknis seperti ini dengan jadwal yang konsisten
    • Saya sudah melihat pembaruan semi-reguler di Discord, dan keren melihat proyek ini sudah sampai sejauh ini. Saya juga agak frustrasi karena progres proyek FPGA saya sendiri relatif kecil dalam periode yang sama, dan saya menunggu semuanya dirangkum dalam tulisan
    • Saat mencari Xilinx Zynq UltraScale+, harganya terlihat cukup mahal. Banyak orang juga menghabiskan ribuan dolar atau lebih untuk hobi, jadi kalau ada uang itu bukan masalah, tetapi saya penasaran apakah ini hardware target akhir proyek ini, atau apakah ada rencana yang lebih jauh
    • Saya penasaran seberapa besar ketergantungannya pada blok hard IP. Apakah bisa di-port ke FPGA vendor lain seperti Lattice ECP5? Saya juga ingin tahu apakah PCIe diimplementasikan langsung dalam HDL, atau memakai blok IP khusus vendor. Akan bagus juga kalau statistik penggunaan resource disediakan
    • Dari artikel Texture Unit, tabel ROM untuk offset alamat level mip tampaknya memakai ruang yang cukup besar. Saya penasaran apakah pernah mempertimbangkan memasukkan alamat dasar mip sebagai bagian dari spesifikasi tekstur
    • Jika ingin mencoba membuat sesuatu yang mirip, buku apa yang bisa direkomendasikan? Misalnya, saya butuh materi untuk belajar desain board PCB untuk hardware yang dipasang lewat PCIe
  • Pengaruh seri komputer breadboard Ben Eater terhadap elektronika hobi benar-benar luar biasa. Saya juga terdorong dengan cara yang mirip untuk mencoba merancang CPU “retro” sendiri
    Saya sangat menginginkan sesuatu yang mudah dipasang seperti 6502, tetapi dengan beberapa register tambahan dan sedikit fitur lain seperti pembagian hardware, namun itu benar-benar pekerjaan yang tidak mudah
    Pada akhirnya saya kembali ke “pakai MCU saja dan selesai”, lalu setelah itu mentok di masalah menghasilkan grafis
    • Proyek ini juga dimulai tepat dari sana. Setelah membuat komputer breadboard 8-bit Ben Eater, saya mulai mencari apa yang diperlukan untuk membuat sesuatu yang lebih menarik
      Karena sulit melakukan banyak pemrosesan berkecepatan tinggi hanya dengan gerbang logika diskret, saya pikir akan jauh lebih menarik belajar apa yang bisa dilakukan dengan FPGA
    • Register bisa diakali dengan stack atau memori, dan pembagian bisa diimplementasikan sebagai fungsi sederhana. Itu bagian dari kesenangan bekerja di level tersebut
      Untuk grafis, awalnya bisa mulai dengan output serial. Anggap saja masalahnya diabstraksikan sampai siap menanganinya. Jika Arduino dipaksa semaksimal mungkin, ia bisa dijadikan kartu grafis VGA yang sangat dasar [1]. ESP32 to VGA lebih mudah lagi, dan juga menyediakan keyboard serta mouse [2]
      [1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
      [2] https://www.aliexpress.us/item/1005006222846299.html
    • Saya tadinya ingin merekomendasikan Parallax Propeller, terutama model pertama yang tersedia dalam format DIP, tetapi sebenarnya pemrogramannya jauh lebih rumit dan performanya juga jauh lebih kuat. Pada titik itu lebih baik melihat ESP32, dan akhirnya kembali menjadi “pakai MCU saja” :)
      Output video adalah masalah besar karena bandwidth yang dibutuhkan untuk output digital. Untuk output komposit atau VGA, mungkin masih bisa dilakukan dengan chip yang mudah didapat. Commander X16 terbaru memilih FPGA untuk masalah ini
    • Saya tidak bisa memikirkan contoh lain yang sepopuler ini. Sempat jarang muncul, tetapi belakangan mulai mengunggah video lagi dengan cukup teratur, dan penontonnya berada di kisaran ratusan ribu awal
      Sepertinya orang yang benar-benar menonton video sampai selesai kurang dari 100 ribu, dan di antara mereka yang benar-benar mencoba membuat sesuatu sendiri lebih sedikit lagi. Untuk zaman sekarang, elektronika hobi terasa mengejutkan kecil
    • Saat melihat grafis di MCU, saya kecewa mengetahui bahwa NeoChrom GPU kecil di komponen STM32 terbaru tidak didokumentasikan sepenuhnya. Secara historis STM32 cenderung tidak memasukkan kotak hitam ke dalam chip, jadi kemungkinan itu adalah blok IP yang dilisensikan dari pihak ketiga
  • Keren. Blog hello membantu memahami niat pembuatnya: https://www.furygpu.com/blog/hello
    Setelah membacanya, tampaknya ini terutama proyek hobi yang dikerjakan demi kesenangan, dan ia berencana menulis banyak tentang cara pembuatannya
    Yang terutama mengesankan adalah seluruh stack-nya berfungsi. Driver Windows mengimplementasikan API grafis kustom, dan Quake berjalan di atasnya. Sayang tidak ada dukungan DX/GL, tetapi saya sangat memahami mengapa ia memilih jalur API kustom
    Saya penasaran apakah desainnya akan dirilis sebagai open source
    • Menambahkan fitur yang diperlukan untuk dukungan D3D dasar membutuhkan usaha yang cukup besar, dan saya sedang benar-benar menilai apa yang mungkin dari sisi performa. Sayangnya, prospeknya terlihat kurang baik
      Masalahnya bukan sekadar “shader”; bahkan window manager OS saja punya cukup banyak persyaratan agar bisa berjalan. Para pemain umum di bidang ini—AMD, Nvidia, Intel, Imagination, dan lainnya—membangunnya secara bertahap di atas teknologi yang sudah berkembang lebih dari 20 tahun
  • Ini proyek impian saya

Selama setahun terakhir saya mengerjakan GPU berfokus 2D untuk mikrokontroler dengan keterbatasan I/O yang besar (https://github.com/KallDrexx/microgpu). Saya membuatnya agar bisa merender antarmuka pengguna pada layar besar bahkan lewat perangkat SPI yang lambat, dan pekerjaannya sangat menarik
Namun, melihat batasan pipeline prosesor, saya terus berpikir bahwa dengan FPGA ini bisa dibuat lebih cepat. Baru-baru ini saya mendapatkan beberapa FPGA murah dan mulai belajar untuk mencoba mengubah microgpu berbasis ESP32 menjadi berbasis FPGA
Karena anak-anak dan keterbatasan waktu luang, saya tidak tahu apakah bisa mencapai level ini, tetapi saya ingin mencoba setidaknya seperseratus dari level ini

  • Mungkin Anda sudah tahu, tetapi untuk orang lain yang penasaran dengan jalur ini, untuk penggunaan seperti ini jelas layak membatasi diri pada FPGA yang memiliki transceiver berbandwidth tinggi khusus
    Bahkan sinyal RGB 1080p 60Hz yang “dasar” saja memerlukan pemrosesan sinyal frekuensi tinggi yang sangat sulit ditangani hanya dengan logika FPGA murni
  • Pipeline-nya terlihat retro, tetapi jauh lebih baik daripada tidak ada sama sekali
    Hampir tidak ada GPU perangkat keras terbuka yang layak disebut. Tergantung lisensinya, tetapi saya tidak menemukan informasinya, dan ini bisa menjadi contoh pertama sekaligus titik awal untuk lebih banyak pekerjaan
    • Ada juga GPU sejenis seperti ini
      https://github.com/asicguy/gplgpu
    • Tentu saja tergantung definisi “terbuka”. Setahu saya, tidak ada toolchain sumber terbuka untuk FPGA yang relatif baru, jadi untuk benar-benar melakukan modifikasi Anda tetap terikat pada alat proprietary, mungkin berbayar. Kalau butuh yang lebih besar dari iCE40 UP5k, hampir tidak ada pilihan
    • Ticket2Ride Number9 adalah GPU fungsi tetap dari akhir 1990-an, dan sepenuhnya dijadikan sumber terbuka di bawah GPL
    • Tergantung apa yang Anda anggap sebagai “GPU”
      https://github.com/schlae/graphics-gremlin adalah adaptor kompatibel MDA/CGA
      https://github.com/OmarMongy/VGA adalah core VGA
      https://github.com/archlabo/Frix adalah SoC lengkap yang kompatibel dengan IBM PC, termasuk VGA
    • Ada juga Nyuzi, yang lebih berfokus pada GPU serbaguna: https://github.com/jbush001/NyuziProcessor. Namun pembuatnya juga bereksperimen menjalankan grafis 3D
  • Sulit dipercaya bahwa inilah opsi yang paling mendekati GPU independen berukuran kecil yang kita punya. Tidak ada sesuatu seperti GPU dalam format M.2
    Yang saya inginkan hanyalah satu GPU M.2 mandiri. Performanya boleh modest, cukup setara GPU terintegrasi seperti Intel UHD Graphics, AMD Radeon, atau Qualcomm Adreno
    Saya punya ide produk embedded kecil yang membutuhkan banyak komputasi dan jaringan, tetapi kemampuan grafisnya hanya sangat sedikit. NXP Layerscape LX2160A [1] nyaris sempurna, tetapi harus saya tinggalkan karena tidak punya GPU terintegrasi. Saya hanya butuh GPU kecil
    [1]: https://www.nxp.com/products/processors-and-microcontrollers...
    • Setidaknya ada satu GPU M.2 berbasis kontroler Silicon Motion SM750 buatan Asrock Rack. Produk dengan form factor mPCIe juga ada yang serupa
      Performanya sama sekali tidak mendekati GPU terintegrasi modern. GPU terintegrasi bisa memanfaatkan memori sistem, cache, dan anggaran daya semuanya, sementara perangkat M.2 sederhana tidak punya semua itu. GPU PCIe kelas bawah, bahkan kartu single-slot half-length/half-height, sulit melampaui GPU terintegrasi yang bagus, dan hanya masuk akal ketika fungsi display dasar benar-benar diperlukan
    • Bagaimana dengan GPU MXM yang dulu dipakai di laptop gaming? Saya tahu standarnya sangat niche sehingga mahal. 3080M bekas di eBay sekitar 400 dolar, tetapi barangnya ada dan bisa dikonversi ke PCIe lalu juga disambungkan ke M.2
    • Dayanya mungkin terlalu rendah, tetapi ada juga yang seperti ini: https://www.matrixorbital.com/ftdi-eve
  • Proyek yang sangat keren, dan senang melihat lebih banyak pekerjaan di bidang ini
    Sebagai bahan untuk dilihat bersama, ada proyek Vortex dari Georgia Tech[1]. Tampaknya ini pendekatan yang menatap masa depan, alih-alih mengulang masa lalu GPU dengan fungsi tetap. Intinya adalah komputer sangat paralel berbasis RISC-V, dengan ekstensi untuk menangani pekerjaan GPU dengan lebih baik
    Board untuk menjalankannya berharga ribuan dolar, jadi tidak terlalu ramah untuk hobi, tetapi jelas lebih mudah diakses daripada pengembangan proprietary tertutup. Rilis 2.0 juga keluar beberapa bulan lalu
    [1]: https://vortex.cc.gatech.edu/
  • Ini terlihat seperti pencapaian yang benar-benar hebat. Saya ingin melihat foto perangkat aslinya. Saya juga agak bingung modul FPGA apa yang dipakai
    Di blog disebut Xilinx Kria SoM, tetapi saat mengikuti tautan dan melihat spesifikasi modulnya, tampaknya yang ada di dalamnya adalah ARM SoC, bukan Xilinx FPGA. Saya tidak familier dengan dunia FPGA, jadi mungkin ada sesuatu yang saya lewatkan
    https://www.amd.com/en/products/system-on-modules/kria/k26/k...

Seperti yang saya katakan di bagian lain utas ini, Kria SoM memiliki struktur yang menggabungkan fabric FPGA dengan core ARM keras yang menangani kontrol. Selain karena saat itu tersedia dan board pengembangan Kria sangat murah, sekitar 350 dolar, perangkat ini juga menyertakan hal-hal seperti hard DisplayPort IP yang terhubung ke core ARM, sehingga pekerjaan seperti output video dan audio bisa dialihkan ke firmware
Versi sebelumnya dari proyek ini berjalan di Zynq 7020, dan saat itu bagian terkait HDMI harus ditulis sendiri. Tidak terlalu rumit, tetapi memakan cukup banyak logic, dan menjadi jauh lebih rumit jika dibuat dapat dikonfigurasi

  • Ini bukan salah satu dari ARM SoC dan Xilinx FPGA, melainkan chip hibrida. Strukturnya menggabungkan FPGA dan SoC tradisional, sehingga tidak perlu memasukkan MCU soft-core yang menghabiskan sumber daya FPGA berharga hanya untuk tugas manajemen dasar
  • Xilinx tidak mengungkap nomor komponen FPGA persis yang digunakan pada Kria SoM. Namun berdasarkan spesifikasi publik, tampaknya cocok dengan perangkat ZU3EG-UBVA530-2L dan ZU5EV-SFVC784-2L[1], dan hanya yang terakhir yang memiliki dukungan PCIe
    Seperti di posting blog, merancang dan melakukan bring-up board FPGA saja sudah merupakan hambatan yang tinggi. Semoga suatu saat skematik dan source-nya dibuka
    [1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...
  • Disebutkan bahwa perangkat ini mendukung fungsi hardware yang setara dengan kartu grafis kelas atas pertengahan 1990-an, dan sepertinya belum ada yang menanyakan ini, jadi saya ingin bertanya. Sejauh mana kompatibilitas VGA-nya? Misalnya, apakah bisa dipasang ke PC apa pun yang punya slot PCIe, boot ke DOS, lalu memainkan DOOM?
  • Saya berharap pembuatnya membahas implementasi antarmuka PCIe secara detail. Saya mungkin tidak akan pernah melakukan pekerjaan hardware pada level seperti itu, tetapi menurut saya tetap ada nilai pengetahuan umum dalam melihat bagian dalam PCIe
    • Posting blog berikutnya memang akan membahas persis hal itu. Sepertinya akan menjadi seri beberapa bagian; tulisan pertama tentang skematik/layout PCB, berikutnya tentang antarmuka FPGA dan pengujian, lalu setelah itu driver Windows
    • Karena FPGA yang digunakan memiliki PCIe native, biasanya pada bagian ini kita hanya mendapatkan antarmuka ke blok IP proprietari vendor. Kondisi antarmuka terbuka di dunia FPGA sangat menyedihkan. Yang terbaik yang pernah saya lihat sepenuhnya open source kira-kira hanya gigabit MAC
    • Saya menggunakan https://github.com/alexforencich/verilog-pcie di atas Xilinx PCIe hard IP core. Core ini menyediakan semua hal di bawah transaction layer