バッファがあふれると性能が低下する爆弾を抱えるもライセンスが無料で広く普及したAGP 消え去ったI/F史
消え去ったI/F史でPCIとくれば、次はAGP(Accelerated Graphics Port)ということになる。そろそろAGPのビデオカードを見たことのない世代の方もだいぶ増えたのではないだろうか?

AGP3.0対応ビデオカード「RADEON 9700 PRO」
AGPは1996年にインテルが発表した、ビデオカード専用のI/Fである。これもPCI同様IALが開発をしたものであるが、PCIと異なり標準化作業に相当するものは最後まで行なわれず、インテルがライセンスを保有した。ただそのライセンスは申請すれば無料で取得でき、ロイヤリティも掛からなかったため、広範に利用されることになった。
ちなみに標準化団体そのものはないが、AGPを普及させるためのAGP-IF(AGP Implementors Forum)という団体が1996年に発足している。

1997年2月時点のAGP-IFのトップページ。ちなみに2006年10月10日まではサイトは存在したが、2007年7月にはもうドメインが売りに出されていた
AGPは、近い将来にやってくる3Dゲームにビデオカードが対応するためには、当時のPCIだと帯域が絶対足りないという確信の下で、これに対応するためのI/Fをコストを掛けずに実現するための方策だった。
下の画像は1996年5月末に開催されたAGP Developer Conferenceにおけるスライドだが、従来のXGAサイズの2D描画と比較した場合、同じXGAサイズでも3Dで30Hz表示をするだけで10倍近い帯域が必要と考えられ、しかもその大半はテクスチャーの読み出しと想定されていた。

2D描画と比較した場合、同じXGAサイズでも3Dで30Hz表示をするだけで10倍近い帯域が必要という試算。これは当時マイクロソフトでDirector, Graphics and MultimediaのポジションだったJay Torborg氏が示したスライドだ
1996年というのは3Dfxが初代Voodooを出荷した年であり、NVIDIAはRIVA 128を設計していた(出荷は1997年)という時期で、まだ3Dゲームと言われてもユーザーからするとピンと来ない時期ではあったが、ハードウェアを開発側からすると早急になんらかの対策が必要だった。
ビデオカードに大量のVRAMを搭載するのが一番根本的な解決になるのだが、当時はまだVRAMが高価だったことや搭載量に限りがあったことなどもあり、「それほどVRAMを積まなくても3Dがそこそこの速度で動く方策」が求められた。
そこで考え出されたのがGART(Graphics Address Re-mapping Function)である。要するにPCのメインメモリーをビデオカードのメモリーの一部として割り当てようというものだが、この際に問題になったのが、ビデオカードとメインメモリーの間がピークでも133MB/秒しか出ないPCIで接続されていたことだ。

GARTの仕組み。LFBはビデオカードのLocal Frame Buffer。そこに仮想的な追加のメモリーアドレスを割り当て、そこにアクセスが来たらメインメモリー中に割り当てた領域にアクセスし、その結果をビデオカードに送り出す
ちなみにRIVA 128の場合は、4MBのSGRAMと128bitバスを100MHz駆動で接続していたので、メモリー帯域は1.6GB/秒ほどになる。これの代替として133MB/秒のバスでつながったメモリーを利用する、というのはいくらなんでもギャップが大きすぎた。そこで、「もっと高速なビデオカード専用バスを開発して、これを使ってPCに接続すればGARTの方式で行けるのでは?」と考えたわけだ。
1998年にはVL-Bus/PCIからほぼAGPに移行
ライセンスも無料で爆発的に普及する
インテルはビデオカード専用バスの開発をわりと手早く実行した。ベースとなったのはPCI Revision 2.1である。ここで32bit幅で信号速度を66MHzにすることで266MB/秒の帯域が利用できるのだが、AGPではDDR転送を行なう2xモードを追加、最大帯域を533MB/秒に引き上げた。
加えて、PCIの場合と異なり基本Point-to-Pointでの接続になるので、Shared Busで必要とされていたいくつかの機能(例えば複数の転送リクエストを同時に実行するためのDelayed Transaction)はあっさり省かれている。その一方で、オリジナルのPCIにはないSBA(Side Band Addressing)という、データ転送する際に同時にアドレス指定が可能なアドレス線(8bit)や、通常のPCIとは異なるExecuteモードと呼ばれるデータ転送モードなどが追加されている。
2xモードで533MB/秒は、先のRIVA 128の1.6GB/秒に比べるとまだだいぶ低い数値ではあるが、それでも工夫すればまだ実用になる範囲の帯域と考えられた。要はよく利用するテクスチャーやデータはLFBに置き、頻繁に使わないものはGARTを利用してPCのメインメモリーを利用する、という話である。この技法はPCIの時代にももちろん用いられていたが、AGPを使うことでだいぶPCIよりは性能がマシになると考えられた。

AGPスロット。画像は玄人志向のAGP→PCI変換アダプター「CHANGE-AGP2PCI」から
なぜインテルは突如としてビデオカードの性能改善に取り組んだか、と言えばもちろん業界的にそうしたものが必要な時期になってきていたという事情もあるが、もっと身近な理由としてこの当時「Intel 740」というグラフィックチップを水面下で開発していたからでもある。
Intel 740は以前GPU黒歴史として紹介しているが、メモリーは32bit幅のものが2個(つまり64bit幅)で、100MHz駆動だったから800MB/秒程度でしかなかった。
しかもスペック的には4MBのSGRAMを2つ搭載可能だったが、最小構成のものでは1MBのSGRAM×2でわずか2MBしかなかった。さすがに2MBで3Dは苦しいと思うのだが、AGPを使えばPCのメインメモリーを使えるため、それなりの性能で動く! という目算だったとしか思えない。
そうした思惑はともかく、AGP 1.0の仕様書は先にも述べたように1996年7月に公表され、これをサポートしたチップセットとしてIntel 440LXが1997年8月にリリースされる。
ただインテルはこれをPentium Pro/Pentium II向けの差別化要因にしたいと思ったのか、ついにSocket 7向けチップセットではAGPのサポートはなく、Socket 7の市場はVIAがApollo VP3を1997年11月にリリース、ALiやSiSもこれに追従することで、あっという間にAGPはPC市場に普及することになった。
ビデオカードの方も、1996年9月という極めて早い時期にCirrus LogicがLaguna3D CL-GD5465を発表、1997年からの出荷を発表した(が、連載147回で解説したようにCL-GD5465には3Dアクセラレーターが搭載されておらず、ほとんど売れなかった)し、ATIの3D Rageも1997年中には発表されていた。
1998年に入るとNVIDIAのRIVA 128ZX(RIVA 128のAGP対応版)やS3のViRGE/GX2など、続々とAGP対応のグラフィックチップが投入され、1998年に入るとビデオカード市場はVL-Bus/PCIからほぼAGPに移行しつつある感が強かった。そんな中にIntel 740が投入され、敗退した理由は黒歴史の方で説明している。
バッファがあふれると性能が著しく低下する
AGPは、カタログスペックだけ見ればLFBの数分の1の速度でアクセスできるように見えるが、実際にはGARTドライバー経由でメモリーコントローラーにリクエストが行き、そこからメモリーコントローラーがそのアドレスのメモリーをアクセスしてGARTドライバーに返す、という処理が入るのでレイテンシーが恐ろしく増える。
これはランダムアクセスを行なう際には特に顕著であって、結果AGPを使うと強烈に性能が下がるので、なるべくLFB内で完結するようにゲームを構築する必要があり、必然的にLFBの容量が少ないIntel 740に不利になるというわけだ。
以上のように、AGP 1.0の開発の動機の半分くらいは当初から失敗していた感があるのだが、業界に支持されたことでこの後もAGPの改良が続く。1998年5月には、信号の電圧を3.3Vから1.5Vに下げる(これは信号の高速化のため)とともに4xモード(66MHzの4倍速でデータを転送するモード)が追加されたAGP 2.0がリリースされる。
ちなみに電圧を変更したため、3.3Vしか供給できないマザーボードに1.5V対応のビデオカードを装着すると過電圧で壊れてしまうし、逆では電圧が低すぎで通信できなくなる。こうした問題に対応するため、3.3Vと1.5Vではスロットの切り欠き位置を変更(単に逆に付けただけ)するなど工夫された。

AGP Proの仕様書より抜粋。AGP Proの話は後述する

AGP 1.0のみに対応する3.3VタイプAGPカード。切り欠きはコネクターに近い

AGP 1.0/2.0両対応のカードは2ヵ所の切り欠きを持つ
x4モードでは1.06GB/秒まで帯域を拡大した格好になるが、2002年にはさらに高速化したAGP 3.0がリリースされ、x8(66MHzの8倍速で転送)モードが追加された。このx8モードでは信号電圧が0.8Vまで落とされたが、カードエッジは1.5Vと共通になっている。
ただ、AGP 2.0がリリースされた1998年は6月にNVIDIAのRIVA TNTが出荷されているが、これは128bit/110MHzのメモリーバスで帯域は1.76GB/秒。AGP 3.0の2002年は2月にGeForce 4 Ti 4400が出荷されており、こちらは128bit/275MHz DDRのメモリーバスで帯域は8.8GB/秒であり、AGPの高速化はGPUに全然追いつかない状況に陥っていた。
といってもPCIを使うよりははるかにマシではあったのだが、PCI Expressが世の中に出てくると、ビデオカードも「次第に」こちらに移り変わることになる。
「次第に」というのは、第1世代のPCI ExpressはI/F部の回路規模が非常に大きく、当時のプロセス(130nm前後)ではかなりのダイサイズになってしまうため、コストの高いハイエンド向けはともかく低価格のミドルクラス~ローエンド向けにはとても採用できなかったためだ。一方AGPは高速化したとは言ってもI/Fは非常に小さく、ミドルクラス~ローエンドではAGPが根強く支持されることになった。
結果、AGPからPCI Expressへの移行には結構な時間がかかることになった。例えばNVIDIAで言えば、おそらく2004年4月に発表されたGeForce 6800 GTOが最初のPCI Express対応製品かと思うのだが、2年後の2006年2月にはAGP 8x対応のGeForce 7800GSが発売されている。
AGP対応製品がNVIDIAのラインナップから完全に消えたのは、2006年11月から発売を開始したGeForce 8000シリーズまで待たなければならず、つまり2006年前半くらいまではまだAGP対応ビデオカードが売られていた格好だ。
AGPに加えて、AGP Proという規格も追加されていた。これはワークステーション向けなど消費電力の大きなビデオカード向けに、信号ピンの両端に追加の電源ピンを追加する、というものである。AGPのコネクターそのものは最大で25Wまでしか供給できないが、AGP Proでは3.3Vコネクターと12Vコネクターが追加され、定格では3.3Vで25W、12Vで60Wの追加電力供給が可能とされた。最大では12Vレーンで110Wの供給が可能で、この場合は合計160Wまで利用可能だった。

AGP Proに対応した、AOpenのマザーボード「AX4T」

ATIのFireGL X1。カードエッジの切り欠きの数から、明らかにAGP Proとわかる
上の画像のように一応対応したマザーボードも存在したし、対応したビデオカード(例えば旧ATIのFireGL X1)もあったが、あまり広く利用されたとは言い難かった。それでもVL-Bus/PCIの時代からPCI Expressの時代の間をつなぐものとして、AGPは広く利用されたといって差し支えないだろう。