1 điểm bởi GN⁺ 2024-03-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là một bộ xử lý đồ họa tùy chỉnh, được tự xây dựng từ phần cứng đến driver để sử dụng như một GPU thực thụ trên PC hiện đại
  • Phần triển khai cốt lõi được thực hiện trên Xilinx Zynq UltraScale+ FPGA và gắn trên một PCB tùy chỉnh
  • Kết nối với máy chủ qua PCIe, nên hoạt động như một GPU phần cứng thực sự chứ không phải thử nghiệm phần mềm
  • Các tính năng được đặt ở mức tương đương card đồ họa cao cấp giữa thập niên 1990, nhắm đến việc render game thời đó
  • Có cả ngăn xếp driver Windows hiện đại, cho phép render các game thực tế của thời kỳ đó với tốc độ khung hình vượt thời gian thực

Cấu hình phần cứng

  • FuryGpu là một GPU hoàn toàn tùy chỉnh được chế tạo từ đầu để dùng trên máy tính hiện đại
  • Logic xử lý đồ họa được triển khai trên Xilinx Zynq UltraScale+ FPGA
  • Được gắn trên PCB tùy chỉnh và kết nối với máy chủ qua PCIe

Tính năng đồ họa và driver

  • Chức năng phần cứng hỗ trợ mức tương đương card đồ họa cao cấp giữa thập niên 1990
  • Cung cấp kèm ngăn xếp driver phần mềm Windows hiện đại, cho phép dùng như GPU trong môi trường thực tế

Các tác vụ có thể chạy

  • FuryGpu có thể render các game thực tế của thời kỳ đó
  • Hiệu năng render có thể đạt tốc độ khung hình vượt thời gian thực

1 bình luận

 
GN⁺ 2024-03-28
Các ý kiến trên Hacker News
  • Tôi là người tạo ra dự án này. Tôi đã hy vọng nó được lan truyền sau khi trang có thêm chút nội dung, nhưng mọi chuyện thành ra thế này :)
    Để trả lời câu hỏi tôi nhận được thường xuyên nhất: một lúc nào đó tôi dự định công bố toàn bộ stack dưới dạng mã nguồn mở. Bao gồm sơ đồ mạch/bố cục PCB, toàn bộ HDL, driver Windows WDDM, driver runtime API, và cả Quake đã được port để dùng API đó
    Tuy nhiên tôi cần xử lý các vấn đề pháp lý liên quan đến công việc, và cũng phải quyết định các chi tiết như giấy phép. Đây không phải công việc chính của tôi, nhưng lĩnh vực đủ gần nên tôi phải cẩn trọng
    Commit đầu tiên của dự án này là ngày 22/8/2021, và tôi đã làm nó được hơn hai năm rưỡi một chút. Trong quá trình đó tôi không viết bài, nhưng playlist YouTube FuryGpu (https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) có khá nhiều video cho thấy đại khái tiến độ
    Các bài blog tiếp theo sẽ nói về giao diện PCIe, và có lẽ sẽ là một loạt nhiều phần, bắt đầu từ sơ đồ mạch/bố cục PCB, rồi tới thiết kế FPGA và driver Windows. Chỉ riêng việc viết một bài về Texture Unit cũng khiến tôi càng kính trọng hơn những người đều đặn viết các bài kỹ thuật kiểu này
    • Tôi đã theo dõi các cập nhật bán định kỳ trên Discord, và thật tuyệt khi thấy dự án đi được tới đây. Tôi cũng hơi nản vì tiến độ dự án FPGA của mình trong cùng khoảng thời gian lại ít hơn tương đối, và vẫn đang chờ nó được viết thành bài
    • Tôi tìm thử Xilinx Zynq UltraScale+ thì thấy có vẻ khá đắt. Nhiều người cũng chi vài nghìn đô trở lên cho sở thích, nên nếu có tiền thì không thành vấn đề, nhưng tôi tò mò liệu đây có phải là phần cứng mục tiêu cuối cùng của dự án không, hay còn nghĩ tới thứ cao hơn nữa
    • Tôi tò mò dự án phụ thuộc vào các khối hard IP đến mức nào. Có thể port sang FPGA của hãng khác như Lattice ECP5 không? Tôi cũng muốn biết PCIe được tự triển khai bằng HDL hay dùng khối IP riêng của nhà cung cấp. Nếu có thể cung cấp cả thống kê mức sử dụng tài nguyên thì tốt
    • Trong bài Texture Unit, bảng ROM dùng cho offset địa chỉ mức mip có vẻ chiếm khá nhiều không gian. Tôi tự hỏi bạn đã cân nhắc đưa địa chỉ cơ sở mip vào như một phần của đặc tả texture chưa
    • Nếu muốn thử làm một thứ tương tự, bạn có thể giới thiệu sách nào không? Ví dụ tôi cần tài liệu để học thiết kế bo mạch PCB cho phần cứng gắn PCIe
  • Tác động của loạt máy tính breadboard của Ben Eater đối với điện tử học sở thích thật đáng kinh ngạc. Tôi cũng được truyền cảm hứng tương tự và đã thử tự thiết kế một CPU “retro”
    Tôi rất muốn có một thứ dễ cắm dùng như 6502 nhưng có thêm vài thanh ghi, phần cứng chia số và vài tính năng nữa, nhưng đó thật sự là một việc không hề đơn giản
    Cuối cùng lại quay về “thôi cứ dùng MCU cho xong”, rồi tiếp theo là đụng phải bài toán tạo đồ họa
    • Dự án này cũng bắt đầu đúng từ chỗ đó. Sau khi làm máy tính breadboard 8-bit của Ben Eater, tôi bắt đầu tìm xem cần gì để làm thứ thú vị hơn
      Vì chỉ dùng các cổng logic rời thì khó xử lý tốc độ cao nhiều, nên tôi nghĩ học xem FPGA có thể làm được gì sẽ thú vị hơn nhiều
    • Thanh ghi có thể lách qua bằng stack hoặc bộ nhớ, còn phép chia thì cứ triển khai bằng một hàm đơn giản là được. Đó là một phần niềm vui khi làm việc ở mức đó
      Với đồ họa, ban đầu cứ bắt đầu bằng đầu ra nối tiếp là được. Đó là cách trừu tượng hóa vấn đề cho đến khi bạn sẵn sàng xử lý. Nếu ép Arduino hết mức, có thể biến nó thành một card đồ họa VGA rất cơ bản [1]. ESP32 to VGA thì còn dễ hơn và còn cung cấp cả bàn phím lẫn chuột [2]
      [1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
      [2] https://www.aliexpress.us/item/1005006222846299.html
    • Tôi đã định giới thiệu Parallax Propeller, đặc biệt là mẫu đầu tiên dạng DIP, nhưng thật ra thứ đó phức tạp hơn nhiều để lập trình và hiệu năng cũng mạnh hơn nhiều. Đến mức đó thì tốt hơn nên xem ESP32, và rốt cuộc lại thành “chỉ dùng MCU” :)
      Xuất hình là vấn đề lớn vì băng thông cần cho đầu ra số. Nếu là composite hoặc VGA thì có thể vẫn làm được bằng các chip còn dễ kiếm. Commander X16 gần đây đã chọn FPGA cho vấn đề này
    • Tôi không nghĩ ra được ví dụ nào khác phổ biến đến mức này. Sau một thời gian thưa thớt, gần đây anh ấy lại bắt đầu đăng video khá đều đặn, và lượng người xem ở mức vài trăm nghìn đầu
      Có lẽ số người thật sự xem hết video dưới 100 nghìn, và trong số đó những người tự tay làm gì đó còn ít hơn nữa. Với thời đại ngày nay, điện tử học sở thích có cảm giác nhỏ bé đến bất ngờ
    • Khi tìm hiểu đồ họa trên MCU, tôi thất vọng khi biết NeoChrom GPU nhỏ trong các linh kiện STM32 mới không được tài liệu hóa đầy đủ. Về mặt lịch sử, STM32 thường không đưa hộp đen vào trong chip, nên có lẽ đây là khối IP được cấp phép từ bên thứ ba
  • Tuyệt quá. Blog hello giúp hiểu ý định của người tạo: https://www.furygpu.com/blog/hello
    Đọc thì thấy đây trước hết là một dự án sở thích làm cho vui, và có vẻ tác giả định viết nhiều bài về cách đã tạo ra nó
    Đặc biệt ấn tượng là toàn bộ stack đều hoạt động. Driver Windows triển khai một API đồ họa tùy chỉnh, và Quake chạy trên đó. Việc không hỗ trợ DX/GL thì hơi tiếc, nhưng tôi hoàn toàn hiểu vì sao lại chọn con đường API tùy chỉnh
    Tôi tò mò liệu thiết kế có được công bố mã nguồn mở không
    • Để thêm các chức năng cần thiết cho hỗ trợ D3D cơ bản sẽ tốn khá nhiều công sức, và tôi đang thực sự cân nhắc xem về mặt hiệu năng thì có thể làm được gì. Đáng tiếc là triển vọng có vẻ không tốt
      Vấn đề không chỉ đơn giản là “shader”; chỉ riêng trình quản lý cửa sổ của OS muốn hoạt động cũng đã có khá nhiều yêu cầu. Những người chơi thông thường trong lĩnh vực này, tức AMD, Nvidia, Intel, Imagination, v.v., đã tích lũy dần dần trên nền công nghệ phát triển hơn 20 năm
  • Đây là dự án trong mơ của tôi

Trong một năm qua, tôi đã làm việc trên một GPU thiên về 2D cho các vi điều khiển bị ràng buộc I/O rất lớn (https://github.com/KallDrexx/microgpu). Tôi đã làm cho nó có thể render giao diện người dùng lên màn hình lớn ngay cả trên các thiết bị SPI chậm, và công việc đó rất thú vị
Nhưng khi thấy giới hạn của pipeline xử lý, tôi vẫn nghĩ rằng nếu dùng FPGA thì có thể làm nhanh hơn. Gần đây tôi kiếm được vài FPGA giá rẻ và bắt đầu học để thử chuyển microgpu dựa trên ESP32 sang nền tảng FPGA
Vì con cái và hạn chế thời gian rảnh, tôi không biết mình có thể đạt tới mức này hay không, nhưng tôi vẫn muốn thử làm được dù chỉ 1/100 mức này

  • Chắc bạn đã biết rồi, nhưng để nói cho những người khác tò mò về con đường này: với kiểu ứng dụng như vậy, việc tự giới hạn vào các FPGA có transceiver băng thông cao chuyên dụng chắc chắn là đáng giá
    Chỉ riêng tín hiệu 1080p RGB 60Hz “cơ bản” đã đòi hỏi xử lý tín hiệu tần số cao mà rất khó đảm đương chỉ bằng logic FPGA thuần túy
  • Pipeline trông có vẻ retro, nhưng vẫn tốt hơn rất nhiều so với không có gì
    Hầu như không có GPU phần cứng mở nào đáng nói. Tùy giấy phép thì có thể khác, nhưng tôi không tìm được thông tin, và đây có thể là trường hợp đầu tiên cũng như điểm khởi đầu cho nhiều công việc hơn
    • Cũng có một GPU kiểu tương tự như thế này
      https://github.com/asicguy/gplgpu
    • Tất nhiên còn tùy vào định nghĩa “mở”. Theo tôi biết thì không có toolchain nguồn mở cho các FPGA tương đối mới, nên để thực sự sửa đổi bạn vẫn bị trói vào công cụ độc quyền, có lẽ là trả phí. Nếu cần thứ gì lớn hơn iCE40 UP5k thì gần như không có cách nào
    • Ticket2Ride Number9 là một GPU chức năng cố định cuối thập niên 1990 và đã được mở mã nguồn hoàn toàn theo GPL
    • Còn tùy bạn xem “GPU” là gì
      https://github.com/schlae/graphics-gremlin là adapter tương thích MDA/CGA
      https://github.com/OmarMongy/VGA là VGA core
      https://github.com/archlabo/Frix là SoC tương thích IBM PC hoàn chỉnh, bao gồm VGA
    • Cũng có Nyuzi, hướng này tập trung hơn vào GPU đa dụng: https://github.com/jbush001/NyuziProcessor. Tuy vậy tác giả cũng đã thử nghiệm chạy đồ họa 3D
  • Thật khó tin là đây lại là lựa chọn gần nhất với GPU độc lập cỡ nhỏ mà chúng ta có. Không có thứ gì như GPU dạng M.2
    Thứ tôi muốn chỉ là một GPU M.2 độc lập. Hiệu năng có thể khiêm tốn, chỉ cần ở mức GPU tích hợp như Intel UHD Graphics, AMD Radeon, Qualcomm Adreno là được
    Tôi có ý tưởng về một sản phẩm nhúng nhỏ cần nhiều tính toán và mạng, nhưng chỉ cần rất ít năng lực đồ họa. NXP Layerscape LX2160A [1] gần như hoàn hảo, nhưng phải bỏ vì không có GPU tích hợp. Tôi chỉ cần một GPU nhỏ thôi
    [1]: https://www.nxp.com/products/processors-and-microcontrollers...
    • Có ít nhất một GPU M.2 do Asrock Rack làm, dựa trên bộ điều khiển Silicon Motion SM750. Các sản phẩm form factor mPCIe tương tự cũng tồn tại
      Hiệu năng hoàn toàn không sánh được với GPU tích hợp hiện đại. GPU tích hợp có thể tận dụng bộ nhớ hệ thống, cache và ngân sách điện năng, còn một thiết bị M.2 đơn giản thì không có những thứ đó. Ngay cả GPU PCIe cấp thấp, tức card một khe, nửa chiều dài/nửa chiều cao, cũng khó vượt được một GPU tích hợp tốt, và chỉ có ý nghĩa khi bạn thật sự cần chức năng hiển thị cơ bản
    • Còn GPU MXM từng có trong laptop gaming ngày trước thì sao? Tôi biết chuẩn này rất ngách nên đắt. Trên eBay, 3080M cũ khoảng 400 USD, nhưng chúng có tồn tại và có thể chuyển sang PCIe rồi nối tiếp qua M.2
    • Có thể công suất quá thấp, nhưng cũng có thứ như thế này: https://www.matrixorbital.com/ftdi-eve
  • Dự án rất hay, và thật vui khi thấy có thêm nhiều công việc trong lĩnh vực này
    Một dự án đáng xem cùng là Vortex project của Georgia Tech [1]. Có vẻ đây là cách tiếp cận nhìn về tương lai, thay vì lặp lại quá khứ chức năng cố định của thiết kế GPU. Cốt lõi là một máy tính song song hóa cao dựa trên RISC-V, với các mở rộng để xử lý tốt hơn các tác vụ GPU
    Bo mạch chạy được có giá vài nghìn USD nên không thân thiện lắm với dân hobby, nhưng chắc chắn dễ tiếp cận hơn phát triển độc quyền khép kín. Bản phát hành 2.0 cũng đã ra mắt vài tháng trước
    [1]: https://vortex.cc.gatech.edu/
  • Trông như một thành tựu thật sự ấn tượng. Tôi muốn xem ảnh thiết bị thật. Tôi cũng hơi bối rối không rõ họ dùng module FPGA nào
    Blog nói đến Xilinx Kria SoM, nhưng khi theo liên kết xem thông số module thì trông như nó chứa ARM SoC chứ không phải Xilinx FPGA. Có thể tôi đang bỏ sót điều gì đó vì không quen với thế giới FPGA
    https://www.amd.com/en/products/system-on-modules/kria/k26/k...

Như đã nói ở chỗ khác trong luồng này, Kria SoM có cấu trúc gồm FPGA fabric cùng với các lõi ARM cứng đảm nhiệm phần điều khiển. Ngoài việc lúc đó có thể mua được và bo mạch phát triển Kria thật sự rất rẻ, khoảng 350 USD, các thiết bị này còn bao gồm những thứ như IP DisplayPort cứng gắn với lõi ARM, nên có thể chuyển các tác vụ như xuất hình và âm thanh sang firmware
Phiên bản trước của dự án này chạy trên Zynq 7020, khi đó phải tự viết phần liên quan đến HDMI. Không quá phức tạp, nhưng chiếm khá nhiều logic, và nếu làm cho nó có thể cấu hình được thì sẽ phức tạp hơn nhiều

  • Không phải là một trong hai thứ ARM SoC hoặc Xilinx FPGA, mà là chip lai. Cấu trúc này ghép FPGA với một SoC truyền thống, nên không cần đưa vào một MCU soft-core vốn sẽ ngốn tài nguyên FPGA quý giá chỉ để làm các tác vụ quản lý cơ bản
  • Xilinx không công bố mã linh kiện FPGA chính xác được dùng trong Kria SoM. Tuy nhiên theo thông số công khai thì có vẻ khớp với các thiết bị ZU3EG-UBVA530-2L và ZU5EV-SFVC784-2L[1], và chỉ thiết bị sau mới có hỗ trợ PCIe
    Chỉ riêng việc thiết kế và bring-up một bo FPGA như trong bài blog đã là một rào cản rất cao. Hy vọng một ngày nào đó sơ đồ mạch và mã nguồn sẽ được công bố
    [1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...
  • Họ nói là hỗ trợ các tính năng phần cứng tương đương card đồ họa cao cấp giữa thập niên 1990, mà có vẻ chưa ai hỏi câu này nên tôi muốn hỏi: khả năng tương thích VGA đến mức nào? Ví dụ có thể cắm vào bất kỳ PC nào có khe PCIe, khởi động vào DOS và chơi DOOM được không?
  • Tôi mong tác giả sẽ trình bày chi tiết việc triển khai giao tiếp PCIe. Có lẽ tôi sẽ không bao giờ làm phần cứng ở mức đó, nhưng xét như kiến thức phổ thông thì vẫn đáng để nhìn vào bên trong PCIe
    • Bài blog tiếp theo dự kiến sẽ nói đúng về nội dung đó. Có vẻ sẽ là một loạt nhiều bài; bài đầu là sơ đồ mạch/bố cục PCB, bài tiếp theo là giao tiếp FPGA và kiểm thử, rồi sau đó là driver Windows
    • FPGA đang dùng có PCIe native, nên ở phần này thường chỉ nhận được giao diện tới một khối IP độc quyền của nhà cung cấp. Tình trạng giao diện mở trong thế giới FPGA thật thảm hại. Thứ tốt nhất mà tôi từng thấy hoàn toàn mã nguồn mở chỉ cỡ gigabit MAC
    • Sử dụng https://github.com/alexforencich/verilog-pcie trên lõi hard IP PCIe của Xilinx. Lõi này cung cấp mọi thứ bên dưới tầng giao dịch