1P by GN⁺ | ★ favorite | 댓글 1개
  • 최신 PC에서 실제 GPU처럼 쓰이도록 하드웨어부터 드라이버까지 직접 만든 맞춤형 그래픽 처리 장치임
  • 핵심 구현은 Xilinx Zynq UltraScale+ FPGA 위에서 이뤄졌고, 맞춤형 PCB에 탑재됨
  • 호스트 컴퓨터와는 PCIe로 연결되어 소프트웨어 실험이 아니라 실제 하드웨어 GPU로 동작함
  • 지원 기능은 1990년대 중반 고급 그래픽 카드 수준으로 맞춰져, 당시 게임 렌더링을 목표로 함
  • 최신 Windows 드라이버 스택까지 갖춰 해당 시대의 실제 게임을 실시간을 넘는 프레임률로 렌더링할 수 있음

하드웨어 구성

  • FuryGpu는 최신 컴퓨터에서 사용하기 위해 처음부터 제작된 완전 맞춤형 GPU
  • 그래픽 처리 로직은 Xilinx Zynq UltraScale+ FPGA 위에 구현됨
  • 맞춤형 PCB에 탑재되며, 호스트 컴퓨터와는 PCIe로 연결됨

그래픽 기능과 드라이버

  • 하드웨어 기능은 1990년대 중반 고급 그래픽 카드와 동등한 수준을 지원함
  • 최신 Windows 소프트웨어 드라이버 스택을 함께 제공해 실제 환경에서 GPU로 사용할 수 있음

실행 가능한 작업

  • FuryGpu는 해당 시대의 실제 게임을 렌더링할 수 있음
  • 렌더링 성능은 실시간을 넘는 프레임률에 도달할 수 있음

댓글과 토론

Hacker News 의견들
  • 이 프로젝트의 제작자임. 사이트에 콘텐츠가 조금 더 쌓인 뒤 퍼지길 바랐지만 이렇게 됐음 :)
    가장 자주 받는 질문에 답하자면, 언젠가는 전체 스택을 오픈소스로 공개할 생각임. PCB 회로도/레이아웃, 모든 HDL, Windows WDDM 드라이버, API 런타임 드라이버, 그 API를 쓰도록 포팅한 Quake까지 포함됨
    다만 직장과 관련된 법적 문제를 정리해야 하고, 라이선스 같은 세부 사항도 결정해야 함. 본업은 아니지만 충분히 인접한 분야라 조심해야 함
    이 프로젝트의 첫 커밋은 2021년 8월 22일이었고, 2년 반 조금 넘게 작업해 왔음. 과정 중 글은 쓰지 않았지만 YouTube FuryGpu 재생목록(https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...)에 진행 과정을 대략 볼 수 있는 영상이 꽤 있음
    다음 블로그 글들은 PCIe 인터페이스에 관한 내용이 될 예정이고, PCB 회로도/레이아웃에서 시작해 FPGA 설계, Windows 드라이버로 이어지는 여러 편짜리 시리즈가 될 듯함. Texture Unit 글 하나만 써 보고도 이런 기술 글을 꾸준한 주기로 쓰는 사람들을 더 존경하게 됐음
    • Discord에서 반정기적으로 업데이트를 봐 왔는데, 프로젝트가 여기까지 온 게 멋짐. 같은 기간 내 FPGA 프로젝트 진척이 상대적으로 적어서 좀 좌절스럽기도 했고, 글로 정리되길 기다리고 있었음
    • Xilinx Zynq UltraScale+를 검색해 보니 꽤 비싸 보임. 취미에 수천 달러 이상 쓰는 경우도 많으니 돈이 있으면 문제는 아니지만, 이게 프로젝트의 최종 목표 하드웨어인지, 아니면 그 이상을 생각하는지 궁금함
    • 하드 IP 블록에 얼마나 의존하는지 궁금함. Lattice ECP5 같은 다른 벤더 FPGA로 포팅 가능한가? PCIe를 HDL로 직접 구현했는지, 벤더 전용 IP 블록을 썼는지도 알고 싶음. 자원 사용량 통계도 제공해 주면 좋겠음
    • Texture Unit 글에서 밉 레벨 주소 오프셋용 ROM 테이블이 꽤 많은 공간을 쓰는 것처럼 보임. 밉 베이스 주소를 텍스처 명세의 일부로 넣는 방안은 고려해 봤는지 궁금함
    • 비슷한 걸 해 보고 싶다면 어떤 책을 추천할 수 있는지 궁금함. 예를 들어 PCIe 장착 하드웨어용 PCB 보드 설계를 배우는 자료가 필요함
  • Ben Eater의 브레드보드 컴퓨터 시리즈가 취미 전자공학에 끼친 영향은 놀라울 정도임. 나도 비슷하게 자극받아 직접 “레트로” CPU를 설계해 보려 했음
    6502처럼 꽂아 쓰기 쉬우면서도 레지스터 몇 개 더, 하드웨어 나눗셈 같은 기능이 조금 더 있는 무언가를 간절히 원하지만, 정말 만만치 않은 작업임
    결국 “그냥 MCU 쓰고 끝내자”로 돌아오게 되고, 그다음에는 그래픽 생성 문제에 부딪힘
    • 이 프로젝트도 정확히 거기서 시작했음. Ben Eater의 8비트 브레드보드 컴퓨터를 만든 뒤, 좀 더 흥미로운 걸 만들려면 뭐가 필요할지 찾아보기 시작함
      개별 논리 게이트만으로는 고속 처리를 많이 하기 어렵기 때문에, FPGA로 무엇을 할 수 있는지 배우는 편이 훨씬 흥미롭겠다고 생각했음
    • 레지스터는 스택이나 메모리로 우회할 수 있고, 나눗셈은 단순 함수로 구현하면 됨. 그 수준에서 작업하는 재미의 일부임
      그래픽은 처음에는 직렬 출력으로 시작하면 됨. 다룰 준비가 될 때까지 문제를 추상화해 두는 방식임. Arduino를 최대한 몰아붙이면 아주 기본적인 VGA 그래픽 카드로 만들 수 있음 [1]. ESP32 to VGA는 더 쉽고 키보드와 마우스도 제공함 [2]
      [1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
      [2] https://www.aliexpress.us/item/1005006222846299.html
    • Parallax Propeller, 특히 DIP 형식으로 나오는 첫 번째 모델을 추천하려 했지만, 사실 그건 프로그래밍이 훨씬 복잡하고 성능도 훨씬 강함. 그쯤 되면 ESP32를 보는 게 낫고, 결국 “그냥 MCU 쓰기”가 되어 버림 :)
      영상 출력은 디지털 출력에 필요한 대역폭 때문에 큰 문제임. 컴포지트나 VGA 출력이면 아직 구하기 쉬운 칩으로 가능할 수도 있음. 최근 Commander X16은 이 문제에 FPGA를 선택했음
    • 이만큼 인기 있는 다른 사례는 잘 떠오르지 않음. 한동안 뜸하다가 최근 다시 어느 정도 규칙적으로 영상을 올리기 시작했고, 시청자는 수십만 명 초반대임
      실제로 영상을 끝까지 보는 사람은 10만 명 미만일 것 같고, 그중 뭔가 직접 해 보는 사람은 더 적을 듯함. 요즘 시대치고 취미 전자공학은 의외로 작게 느껴짐
    • MCU에서 그래픽을 살펴보다가, 최신 STM32 부품에 들어가는 작은 NeoChrom GPU가 완전히 문서화되지 않았다는 걸 알고 실망했음. 역사적으로 STM32는 칩 안에 블랙박스를 넣지 않는 편이었는데, 아마 제3자로부터 라이선스한 IP 블록인 듯함
  • 멋짐. 제작자의 의도를 이해하는 데 hello 블로그가 도움이 됐음: https://www.furygpu.com/blog/hello
    읽어 보니 무엇보다 재미로 하는 취미 프로젝트이고, 어떻게 만들었는지 앞으로 많은 글을 쓰려는 듯함
    특히 전체 스택이 동작한다는 점이 인상적임. Windows 드라이버가 커스텀 그래픽 API를 구현하고, 그 위에서 Quake가 실행됨. DX/GL 지원이 없는 건 아쉽지만, 왜 커스텀 API 경로를 택했는지는 충분히 이해됨
    설계를 오픈소스로 공개할지 궁금함
    • 기본적인 D3D 지원에 필요한 기능을 추가하려면 상당한 노력이 드는데, 성능 측면에서 무엇이 가능한지 실제로 따져보는 중임. 안타깝게도 전망은 좋지 않아 보임
      단순히 “셰이더”만의 문제가 아니라, OS의 창 관리자만 해도 동작하려면 요구사항이 상당히 많음. 이 분야의 일반적인 플레이어들, 즉 AMD, Nvidia, Intel, Imagination 등은 20년 넘게 발전한 기술 위에서 점진적으로 쌓아 온 것임
  • 내 꿈 같은 프로젝트임
    지난 1년 동안 입출력 제약이 큰 마이크로컨트롤러용 2D 중심 GPU를 작업해 왔음(https://github.com/KallDrexx/microgpu). 느린 SPI 장치에서도 큰 디스플레이에 사용자 인터페이스를 렌더링할 수 있게 만들었고, 작업이 매우 흥미로웠음
    하지만 프로세서 파이프라인의 한계를 보면서 FPGA라면 더 빠르게 만들 수 있겠다는 생각을 해 왔음. 최근 저가형 FPGA 몇 개를 구해서 ESP32 기반 microgpu를 FPGA 기반으로 바꿔 보려고 배우기 시작했음
    아이들과 자유 시간 제약 때문에 이 수준까지 갈 수 있을지는 모르겠지만, 이 수준의 100분의 1만이라도 해 보고 싶음
    • 이미 알고 있을 것 같지만, 이 길을 궁금해하는 다른 사람들을 위해 말하자면, 이런 용도에서는 전용 고대역폭 트랜시버가 있는 FPGA로 스스로를 제한하는 게 확실히 가치 있음
      “기본적인” 1080p RGB 60Hz 신호만 해도 순수 FPGA 논리만으로 감당하기 매우 어려운 고주파 신호 처리가 필요함
  • 파이프라인은 레트로해 보이지만, 없는 것보다는 훨씬 나음
    말할 만한 오픈 하드웨어 GPU는 거의 없음. 라이선스에 따라 다르겠지만 정보를 찾지 못했고, 이게 첫 사례이자 더 많은 작업의 출발점이 될 수도 있음
  • 이게 우리가 가진 것 중 소형 독립 GPU에 가장 가까운 선택지라는 게 믿기지 않음. M.2 형식 GPU 같은 게 없음
    원하는 건 독립형 M.2 GPU 하나뿐임. 성능은 modest해도 되고, Intel UHD Graphics, AMD Radeon, Qualcomm Adreno 같은 내장 GPU 수준이면 됨
    계산과 네트워킹은 많이 필요하지만 그래픽 능력은 매우 조금만 필요한 작은 임베디드 제품 아이디어가 있음. NXP Layerscape LX2160A [1]가 완벽할 뻔했지만, 내장 GPU가 없어서 포기해야 함. 그냥 작은 GPU가 필요함
    [1]: https://www.nxp.com/products/processors-and-microcontrollers...
    • Asrock Rack이 만든 Silicon Motion SM750 컨트롤러 기반 M.2 GPU가 적어도 하나 있음. mPCIe 폼팩터 제품도 비슷하게 존재함
      성능은 현대 내장 GPU에 전혀 미치지 못함. 내장 GPU는 시스템 메모리, 캐시, 전력 예산을 모두 활용할 수 있지만, 단순한 M.2 장치는 그런 게 없음. 저가형 PCIe GPU, 즉 단일 슬롯 반길이/반높이 카드조차 좋은 내장 GPU를 넘기 어렵고, 기본 디스플레이 기능이 꼭 필요할 때만 의미가 있음
    • 예전에 게이밍 노트북에 들어가던 MXM GPU는 어떤가? 표준이 매우 틈새라 비싸다는 건 알고 있음. eBay에서 중고 3080M이 400달러 정도지만, 존재는 하고 PCIe로 변환한 뒤 M.2로도 연결할 수 있음
    • 전력이 너무 낮을 수도 있지만 이런 것도 있음: https://www.matrixorbital.com/ftdi-eve
  • 매우 멋진 프로젝트이고, 이 분야에서 더 많은 작업을 보게 되어 좋음
    함께 볼 만한 것으로 Georgia Tech의 Vortex 프로젝트가 있음[1]. GPU 설계의 고정 기능 과거를 되풀이하기보다는 미래를 바라보는 접근으로 보임. 핵심은 RISC-V 기반의 고도로 병렬화된 컴퓨터이고, GPU 작업을 더 잘 처리하기 위한 확장이 들어감
    실행 보드는 수천 달러라 취미용으로 친절하진 않지만, 폐쇄적 독점 개발보다는 확실히 접근성이 높음. 몇 달 전에 2.0 릴리스도 나왔음
    [1]: https://vortex.cc.gatech.edu/
  • 정말 대단한 성취처럼 보임. 실제 장치 사진을 보고 싶음. 어떤 FPGA 모듈을 쓰는지도 약간 혼란스러움
    블로그에서는 Xilinx Kria SoM을 말하는데, 링크를 따라가 모듈 사양을 보면 Xilinx FPGA가 아니라 ARM SoC가 들어 있는 것처럼 보임. FPGA 세계가 익숙하지 않아서 뭔가 놓치고 있는 걸 수도 있음
    https://www.amd.com/en/products/system-on-modules/kria/k26/k...
    • 운이 좋음! https://imgur.com/a/BE0h9cZ
      이 스레드의 다른 곳에서 말했듯, Kria SoM은 FPGA 패브릭과 제어를 맡는 하드 ARM 코어가 함께 있는 구조임. 당시 구할 수 있었고 Kria 개발 보드가 350달러 정도로 정말 저렴했다는 점 외에도, 이 장치들은 ARM 코어에 붙은 하드 DisplayPort IP 같은 걸 포함해서 영상 출력과 오디오 같은 작업을 펌웨어로 넘길 수 있음
      이 프로젝트의 이전 버전은 Zynq 7020에서 돌아갔고, 그때는 직접 HDMI 관련 부분을 작성해야 했음. 아주 복잡하진 않지만 꽤 많은 논리를 차지하고, 설정 가능하게 만들면 훨씬 복잡해짐
    • ARM SoC와 Xilinx FPGA 중 하나가 아니라 혼합 칩임. FPGA와 전통적인 SoC를 붙여 놓은 구조라, 기본 관리 작업만 위해 귀중한 FPGA 자원을 잡아먹는 소프트코어 MCU를 넣지 않아도 됨
    • Xilinx는 Kria SoM에 쓰인 정확한 FPGA 부품 번호를 밝히지 않음. 다만 공개 사양에 따르면 ZU3EG-UBVA530-2L과 ZU5EV-SFVC784-2L 장치와 맞아 보이고[1], 후자만 PCIe 지원을 갖고 있음
      블로그 글처럼 FPGA 보드를 설계하고 bring-up하는 것만 해도 이미 높은 장벽임. 언젠가 회로도와 소스가 공개되면 좋겠음
      [1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...
  • 1990년대 중반 고급 그래픽 카드와 동등한 하드웨어 기능을 지원한다고 했는데, 아직 아무도 이 질문을 안 한 것 같아서 묻고 싶음. VGA 호환성은 어느 정도인가? 예를 들어 PCIe 슬롯이 있는 아무 PC에 꽂고 DOS로 부팅해서 DOOM을 플레이할 수 있을까?
  • 제작자가 PCIe 인터페이스 구현을 자세히 다뤄 주면 좋겠음. 내가 그런 수준의 하드웨어 작업을 할 일은 아마 없겠지만, 일반적인 교양 차원에서 PCIe 내부를 들여다볼 가치는 있다고 봄
    • 다음 블로그 글이 정확히 그 내용을 다룰 예정임. 여러 편짜리 시리즈가 될 것 같고, 첫 글은 PCB 회로도/레이아웃, 다음은 FPGA 인터페이스와 테스트, 그다음은 Windows 드라이버가 될 듯함
    • 사용 중인 FPGA에 네이티브 PCIe가 있어서, 보통 이 부분에서는 벤더 독점 IP 블록에 대한 인터페이스만 얻게 됨. FPGA 세계의 오픈 인터페이스 상태는 처참함. 완전히 오픈소스로 본 것 중 최고는 기가비트 MAC 정도였음
    • Xilinx PCIe 하드 IP 코어 위에서 https://github.com/alexforencich/verilog-pcie를 사용함. 이 코어가 트랜잭션 계층 아래의 모든 것을 제공함