12月17日、Sebastian Aaltonen氏が「No Graphics API」と題した記事を公開した。この記事では、現代のGPUが抱える複雑すぎる命令系統を整理し、より効率的に動かすための次世代の考え方について詳しく紹介されている。
なお、本稿は初心者向けに要点をかいつまんで解説したものである。技術的な詳細や厳密な議論をより深く知りたい方は、ぜひ原文を参照していただきたい。
以下に、その内容を紹介する。
グラフィックスAPIの歴史と「現代の壁」
PCゲームや3DCGを動かす際、ソフト(ゲームエンジン)とハード(GPU)の間を仲介する役割を果たすのがグラフィックスAPIだ。DirectXやVulkan、AppleのMetalといった名称で知られている。
10年前の設計思想が招いた複雑化
現在の主要なAPI(DirectX 12やVulkanなど)が設計された約10年前、GPUはまだ「CPUから一から十まで細かく指示をもらって動く」機械であった。そのため、API側で「どのメモリを使い、どの画像を準備するか」を、描画のたびに一つずつ紐付ける必要があった。
現代の課題:膨大な「紐付け作業」
しかし、現代のGPUは非常に賢くなり、自らメモリを管理する能力を持っている。それにもかかわらず、古いAPIのルールに従うために、開発者は今でも膨大な「紐付けコード」を書かなければならない。これがプログラムを複雑にし、処理のオーバーヘッド(無駄な負荷)を生む原因となっている。
本記事が提案する解決策:「ポインタ」による自由なアクセス
Sebastian Aaltonen氏が提案するのは、これまでの「APIが仲介する面倒な紐付け作業」を撤廃し、GPUが直接メモリ上の場所を指し示してデータを読み書きする「バインドレス(Bindless)」な設計だ。
ここで鍵となるのが「ポインタ」という概念である。
- APIの簡略化:
画像を一枚ずつ「これは1番の画像、これは2番…」とAPIに登録する手間を省く。代わりに、メモリ上の「住所」を直接教えることで、プログラムを劇的にシンプルにする。 - 「ポインタ」の全面採用:
コンピュータがメモリを扱う最も基本的な仕組みである「ポインタ」を、GPUのプログラム(シェーダー)でもフル活用する。 - 最新ハードウェアへの最適化:
Nvidia(RTX 2000以降)、AMD(RX 6000以降)、Apple(M1以降)といった現代のGPUは、すでにこの方式に対応できる十分なポテンシャルを持っている。
変換レイヤーによる互換性の確保
「新しい方式に変えたら、今のゲームが動かなくなるのでは?」という懸念に対し、筆者は変換レイヤーの有効性を説いている。
- すでにMoltenVK(Vulkanという命令をMetalに変換する技術)などが成功を収めている。
- 提案する新しいAPIを土台にしても、既存のDirectX 12やVulkanの命令を「翻訳」して動かすことは十分に可能だ。
これにより、過去の資産を守りつつ、未来の高性能な開発環境へ移行できるとしている。
結論
現代のGPUは、10年前とは比較にならないほど進化した。しかし、我々が使うAPIという「道具」は、まだ古い時代の制約に縛られたままである。
筆者は、Nvidiaを時価総額4兆ドルの超巨大企業へと押し上げたCUDA(計算用プログラムのための仕組み)の成功に学ぶべきだと主張する。CUDAは、メモリに直接アクセスできる柔軟な設計だったからこそ、AI分野などで爆発的に普及した。グラフィックスの世界も「複雑なAPIを通じた管理」から「自由なメモリ管理」へと舵を切るべき時が来ている。
本記事で示された構想は、古き良きDirectX 11よりも使いやすく、かつ最新のDirectX 12以上の性能を引き出せる可能性を秘めている。
- CUDA: Nvidiaが提供する、GPUを画像処理以外(AI計算など)に使うための技術。自由度が非常に高い。
さらに詳しい技術仕様や、実際のデバッグ手法、メモリ保護の仕組みなどについて知りたい方は、No Graphics APIを参照していただきたい。