1 ポイント 投稿者 GN⁺ 2024-03-28 | 1件のコメント | WhatsAppで共有
  • 最新PCで実際のGPUのように使えるよう、ハードウェアからドライバーまで独自に作られたカスタムグラフィックス処理ユニット
  • 中核実装は Xilinx Zynq UltraScale+ FPGA 上で行われ、カスタムPCBに搭載
  • ホストコンピューターとは PCIe で接続され、ソフトウェア実験ではなく実際のハードウェアGPUとして動作
  • 対応機能は 1990年代半ばのハイエンドグラフィックスカード 相当に合わせられており、当時のゲームレンダリングを目標としている
  • 最新の Windowsドライバースタック まで備え、その時代の実際のゲームをリアルタイムを上回るフレームレートでレンダリングできる

ハードウェア構成

  • FuryGpuは最新のコンピューターで使用するためにゼロから製作された完全カスタムGPU
  • グラフィックス処理ロジックは Xilinx Zynq UltraScale+ FPGA 上に実装
  • カスタム PCB に搭載され、ホストコンピューターとは PCIe で接続

グラフィックス機能とドライバー

  • ハードウェア機能は 1990年代半ばのハイエンドグラフィックスカード と同等レベルをサポート
  • 最新の Windowsソフトウェアドライバースタック も提供し、実環境でGPUとして利用できる

実行可能なタスク

  • FuryGpuはその時代の実際のゲームをレンダリングできる
  • レンダリング性能はリアルタイムを上回るフレームレートに到達できる

1件のコメント

 
GN⁺ 2024-03-28
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 の記事を 1 本書いただけでも、こうした技術記事を一定のペースで書き続けている人たちへの尊敬がさらに深まりました。
    • 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 はチップ内にブラックボックスを入れない傾向がありましたが、おそらく第三者からライセンスされた 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として、こういうものもある。
      https://github.com/asicguy/gplgpu
    • もちろん「オープン」の定義次第ではある。自分の理解では、ある程度最近のFPGA向けのオープンソースツールチェーンはないため、実際の修正作業では依然としてプロプライエタリで、おそらく有料のツールに縛られることになる。iCE40 UP5kより大きいものが必要なら、ほぼ手がない。
    • Ticket2Ride Number9は1990年代後半の固定機能GPUで、GPLとして完全にオープンソース化されている。
    • 「GPU」を何と見なすかによる。
      https://github.com/schlae/graphics-gremlinはMDA/CGA互換アダプタ。
      https://github.com/OmarMongy/VGAはVGAコア。
      https://github.com/archlabo/FrixはVGAを含む完全なIBM PC互換SoC。
    • Nyuziもあり、こちらは汎用GPUにより焦点を当てている: https://github.com/jbush001/NyuziProcessor。ただし作者は3Dグラフィックスの実行も実験している。
  • これが、我々が持っているものの中で小型の独立GPUに最も近い選択肢だというのが信じられない。M.2形式のGPUのようなものがない。
    欲しいのは単体のM.2 GPUだけだ。性能は控えめでよく、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が少なくとも1つある。mPCIeフォームファクタの製品も同様に存在する。
      性能は現代の内蔵GPUにはまったく及ばない。内蔵GPUはシステムメモリ、キャッシュ、電力枠をすべて活用できるが、単純なM.2デバイスにはそれがない。ローエンドのPCIe GPU、つまりシングルスロットのハーフレングス/ハーフハイトカードでさえ、優れた内蔵GPUを超えるのは難しく、基本的な表示機能がどうしても必要な場合にだけ意味がある。
    • 以前ゲーミングノートPCに入っていた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...

このスレッドの別の場所でも述べたように、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 を使っています。このコアがトランザクション層より下のすべてを提供します