全国高校eスポーツ選手権運営の舞台裏。Islands(ノーザンアイランズ)」ファミリをリリースし始めた。5870(Cypress)」を拡張しつつ、小型化したバージョンだ。Islandsでは、今後、上位のエンスージアスト向けに、新アーキテクチャの「Cayman(ケイマン)」(11月後半出荷)と、Caymanをデュアルチップ構成にした「Antilles(アンティリーズ)」が登場する。6800では、NVIDIAに引き離されていたテッセレーション性能の強化を図ったと説明する。5870より、テッセレーションの性能は2倍になったという。テッセレータのアウトプットバッファを増やすことで実現した。6800でテッセレーション回りの実装を改良すると同時に、テッセレーション性能についての理解を呼びかけた。これを説明するためには、まず背景にあるテッセレーション実装の実態を説明する必要がある。11世代でグラフィックスパイプラインに加わった新機能であるテッセレーションは、GPUのパイプライン全体に少なからず影響を与えている。Shader」を配置した。ハードウェア的な実態としては、AMDとNVIDIAのどちらも、テッセレータをハードウェア実装し、前後のシェーダは、シェーダプロセッサ群でソフトウェア実行している。11のテッセレーション問題は、このハードウェアテッセレータのアウトプットにある。トライアングルを分割するテッセレーションの結果、トライアングルのサイズが小さくなり、頂点数が増加するからだ。トライアングルサイズの縮小はラスタライザの効率の悪化を招き、さらにはピクセルパイプの処理負担も増やす。頂点数の増加はレジスタやバッファからメモリへの頂点データ溢れを引き起こす。古典的なGPUパイプラインは、ラスタライザ以外は、アウトプットデータが一定であることを前提として作られている。テッセレータは、多数の頂点データを生成してしまうため、古典的なグラフィックスハードウェアの考えが通用しない。●テッセレーションに対する最適化の度合いの違いそのため、テッセレーション実装のハードウェア上のチャレンジは、小さくなるトライアングルと増える頂点を、どうやって効率良く扱うか、という点にある。この点で、NVIDIAとAMDの思想は異なっている。NVIDIAはテッセレーションの活用が、マイクロポリゴン(ピクセルより小さなポリゴン)にまで過度に進むと想定して、ボトルネックの解消によりリソースを割いた。それに対して、AMDは実際のゲームアプリケーションでのテッセレーションの必要性の一定レベルと想定して、そのスイートスポットに対して最適化した。具体的には、NVIDIAはGPU内をより小さく分割(ハイエンドGPUで4分割)することでラスタライズのパフォーマンスを上げた(GPU分割によるオーバラップ増加のロスとのトレードオフがある)。Multiprocessor:AMDアーキテクチャのSIMDコアに近い演算コア)に分散して搭載することで、テッセレータとプロセッサ間のデータ移動を最小に抑えた。頂点データの溢れをオンチップでキャッシュするために、キャッシュ階層を設けた(実際にはGPUコンピューティング用に設けたキャッシュ階層を利用している)。L1キャッシュはSMに分散されているため、L1にヒットする限り、頂点データはSM内の移動だけで済む。それに対して、AMDは、GPUの分割度は2でNVIDIAより大人しく、テッセレータは各SIMDコアではなく、上位のセットアップエンジンに密着している。メモリ階層の基本は変えず、テッセレータに専用バッファを設けた。テッセレータハードウェア自体の実装コストはさほど重くはないが、こうした付帯する部分にどれだけリソースをつぎ込むかによって、コストは変わってくる。NVIDIAの方がはるかにコストをかけているが、キャッシュ階層のように、GPUコンピューティング向け機能をうまく利用した部分も多い。AMD)は、こうした実装の違いがあるものの、テッセレーションの性能指標についても、大きな誤解が生じていると指摘する。GPUも充分な性能を発揮しているのに、テッセレーションを極度に使うベンチマークでは不本意な結果が出ていると主張する。最大のポイントは、どの程度のテッセレーションが適切かという点にある。Demers氏は次のように説明する。「人々がどの程度テッセレーションについて理解しているのか、そこに疑問がある。ゲーム『エイリアンVSプレデター』では、実に美しくテッセレーションを使っている。Detail)を効かせることで、トライアングルの分割数を最適にしている。一部のベンチマークはテッセレーションを限界まで進めて計測している。これはムダとしか思えない。実際のアプリケーションはそんなテッセレーションの使い方をしないからだ。テッセレーションでのトライアングル分割を最高に上げると何が起こるか。トライアングルが小さくなるため、ラスタライザの効率が顕著に落ちてしまう」。テッセレーションの適用の度合いが、アプリケーションとベンチマークではかけ離れた場合があるとDemers氏は指摘する。ベンチ自体に偏りがあるという主張だ。そのために、非効率が発生していると言う。「我々だけでなく、NVIDIAもIntelも、みんなラスタライザはクアッドベースの実装を行なっている。そのため、ラスタライザが最も効率がいいのは、クロック当たり16ピクセルになるトライアングルを処理する時だ。(下のスライドの)左の図で示したように、テッセレーションを適用して1トライアングルが小さくなり、トライアングル当たり1ピクセルになると、ラスタライザの効率はたった6%と、極めて悪くなる。4ピクセルでさえ、効率がよくない。トライアングルが小さくなると、シェーディングの重複も多くなる。(下のスライドの)右の図はSIGGRAPHでの、オーバーシェイディングを示した論文のものだ。図の右の方に行くにつれてトライアングルが小さくなる。すると、赤い色で示されるように、シェーディングの重複が増える。トライアングルが小さくなると、トライアングルのエッジが多くのピクセルで重なり合うからだ。複数のトライアングルで重なったピクセルは、何度もシェーディングされる。同じことを何度も行なうことになり、無駄が増える。トライアングル当たり5ピクセルでも、各ピクセルは平均で5回もシェーディングされる」。テッセレーションの効率ラスタライザは、トライアングル毎にシリアル処理するため、ここがパフォーマンスボトルネックとなる。1トライアングルをラスタライズすると16ピクセルが生成される場合、16ピクセルラスタライザのパフォーマンス効率は最も高くなる。ところが、トライアングル当たり1ピクセルのマイクロポリゴンばかりになると、同じ16ピクセルの生成に16クロックかかってしまう。効率は1/16に落ちてしまう。シェーディングでもオーバーヘッドが生じるため、マイクロポリゴン化はシェーディングのオーバーヘッドが大きいと言う。補足すると、伝統的なGPUは16ピクセルの倍数を1グループとして処理している。正確に言えば、4のべき乗を単位として構成されており、各ユニットの数もそれに沿っている。GPUの各SIMDコアは、16個のVLIWプロセッサで構成されており、それぞれが別なピクセルを処理する。そのため、ピクセルパイプへと供給するラスタライザも1トライアングル当たり最大16ピクセルをラスタライズできるように構成されている。●トライアングル当たりのピクセル数が効率のカギDemers氏は、マイクロポリゴン的なテッセレーションによるオーバーヘッドは、ミッドレンジ以下のGPUではテッセレーションが使いものにならないという誤解を生む原因になっていると指摘する。「ラスタライザの効率が落ちて、ピクセルのオーバーシェイディングが増えても、ハイエンドGPUはリソースが多いため、ある程度の性能を出すことができる。下位のGPUでは性能が出せない。そのため、ベンチマークのようなテッセレーションを行なうと、『ハイエンドGPUしかテッセレーションを行なうべきではない』という結論になってしまう。私はテッセレーションは、全ての階層のGPUで有効だと考えている。テッセレーションのアイデア自体が、もともと全ての階層のGPUで、最適なジオメトリを実現することにある。GPUによって、ゲームのジオメトリ(パイプラインのプロセッシング)を変える必要はない。GPUハードウェアは、トライアングル当たり10~30ピクセルで効率がよくなるように設計されている。アプリケーションもそれに合わせており、それより小さなトライアングルにするのは、ベンチマークのためとしか思えない。statement)に過ぎない。NVIDIAは開発者に対して、テッセレーションの度合いを最大に上げるようにとプッシュしている。彼らの方がテッセレーションの性能がいいからだ。それはベンチマークのために過ぎず、間違えている。(3Dグラフィックスが)マイクロポリゴンへと進むなら、私は今とは別な設計を取るだろう。現状はそうではない」。そもそも、テッセレーションのアイデアは、ジオメトリデータを圧縮し、GPU側で最適なポリゴン数へと調節することにあった。テッセレータによって、各GPUリソースに合わせてアダプティブにポリゴン数を増やすことで、どのGPUでも同じジオメトリデータを扱いながら、内部的には、GPUリソースに合わせた頂点数へと変換する。Demers氏が指摘しているのは、極端なテッセレーションでは、こうしたテッセレーションのそもそもの利点に反する結果となってしまうという点だ。6800でのテッセレーションはどのように強化されたのだろう。AMDはハードウェア的にはオンチップのバッファを増やし、ビデオメモリ上と推定されるオフチップバッファも増やし、ソフトウェア的にはHullシェーダとDomainシェーダを最適化したという。オンチップバッファは、テッセレータハードウェアに付属するアウトプットバッファで、メモリ階層とバスアーキテクチャをテッセレーションに合わせて拡張したわけではない。6800の内部バスPDF版はこちら下のスライドは、相対的なテッセレーションのパフォーマンスを示している。縦軸がトライアングル数で、横軸がトライアングルの分割数であるテッセレーションファクタだ。5870(Cypress)を1xとした相対性能となっている。絶対性能は、トライアングルを小さく分割すればするほど、つまり、右に行けば行くほどレートは落ちるはずだ。テッセレーションの性能このチャートで目立つのは、分割数が比較的少ない9ファクタまでのパフォーマンスが相対的に上がっている点。ファクタ数が増えるにつれて、相対的に性能差が縮まる傾向にある。AMDのDemers氏は、「今日の典型的なアプリケーションでは4から8ファクタ程度が多い。そのスイートスポットでの性能は最大2倍に上がっている」と説明する。オーバーオールにテッセレーションの性能が2倍になったわけではなく、アプリケーションのよく使うポイントに合わせた性能アップだ。6800で改良されたバッファがそれほど大きな容量ではないことだ。容量が大きければ、ファクタ数が増えてもパフォーマンスアップが維持される傾向が出ると推定されるからだ。11世代GPUのハードウェア設計の最大の焦点だ。6800への移行でも、この部分では、根本的な部分での拡張は行なわなかった。上位のCayman(ケイマン)は、Cypress→Bartsとはアーキテクチャが異なるため、Caymanでどれだけ変わるかがカギとなる。Decoder)が第3世代となり、複数のHDビデオのデコードが可能になった。Evergreenの売り物だったマルチディスプレイ技術「Eyefinity」は引き継がれている。下は、CypressのEyefinityパイプラインの図だ。6800では3つ目のタイミングソースを内蔵したと説明している)。6800におけるEyefinityのアーキテクチャPDF版はこちら「6つの独立した(ディスプレイ)パイプラインがあり、それぞれ個別に独立して制御することができる。PLLは限られている。DVIとVGA、HDMIはそれぞれが個別の独立したタイミングソースを必要とする。そのため、それぞれに個別にPLLを用意しなければならない。DisplayPortはタイミングソースを共有するので、実装しやすい。6つのVGAを備えようとしたら、非常にコストは高くつくだろう。6つのDisplayPortなら、非常に安くつく。我々がDisplayPortを推している理由はそこにある」(Demers氏)。微細化が進むと、デジタル回路はどんどん小さくなる。アナログ回路やタイミングソースといった部分は、同じ比率では縮小しないので、相対的にコストが高くなってしまう。そのため、DisplayPortへと全面移行しない限り、必然的にディスプレイ出力の制約が残る。