BeneDict 地球歴史館

BeneDict 地球歴史館
menu

週刊スモールトーク (第219話) プレステ4 Ⅵ~驚異のGPGPU&共有メモリ~

カテゴリ : 娯楽科学

2013.08.11

プレステ4 Ⅵ~驚異のGPGPU&共有メモリ~

■グラフィック性能

さて、次はグラフィックのキモとなる「GPU(Graphics Processing Unit)」。

GPUはいわゆる「グラフィックチップ」で、その名のとおり、グラフィック処理を担当する。メイン処理のCPU同様、ゲーム機の性能を大きく左右するが、グラフィックに限ればGPUの方が影響が大きい。

ところで、プレステ4のCPUはAMD社の有り物をアレンジしたものだが、GPUは?

同じく、有り物のアレンジ品。

ベースとなるGPUは、パソコン市場でNVIDIAとシェアを二分する「RADEON」だ。英語読みでは「レイデオン」、日本では「ラデオン」で通っている。CPU同様、AMD社の有り物だが、なかなか強力なチップで、パソコンの上位のビデオカードに匹敵する。

ところで、GPUの性能は何で決まるのだろう?

まずは、浮動小数点の演算速度。

ここで、「浮動小数点」とはコンピュータ上で小数を扱うフォーマットの一つ。なので、「小数を計算するスピード」と考えていいだろう。それを表す単位が「FLOPS(フロップス)」で、1秒間に「浮動小数点演算(小数計算)」を何回実行できるかを表す。

ちなみに、プレステ4のGPUは「1.84 TFLOPS」、一方、旧機種のプレステ3は「400 GFLOPS」(理論値)。

ここで、
・ T(テラ)=10の12乗
・ G(ギガ)=10の9乗
なので、

1.84 TFLOPS÷400 GFLOPS=1.84×10の12乗÷400×10の9乗=4.6

つまり、プレステ4のGPUはプレステ3より「4.6倍」速い(理論上)。

ちなみに、2013年末にリリースされるアップルのMac Proは「7 TFLOPS」。プレステ4の「3.8倍」も高速だ。ただし、Mac ProはGPUを2基搭載したアップルの業務用のハイエンドマシンで、本体だけで30万円はする。そんなたいそうなマシンの「1/4」の性能なのだから、プレステ4は大健闘と言っていいだろう。

もっとも、「浮動小数点演算速度(FLOPS)」ほど進化の速い分野はない。なので、絶対性能より相対性能で見るべきだろう。つまり、2013年、3万9000円のゲーム機で、「1.84 TFLOPS」ならナイス!

もちろん、GPUの性能を決めるのは「小数の計算」だけではない。

Poli_Galleon 一般に、ゲーム上のオブジェクトはポリゴンと呼ばれる三角形の小片で構成される。たとえば、左図のガレオン船は825個のポリゴンからなる(見た目200個ぐらいに見えるけど正確に825個です)。

このガレオン船を描画する際、825個の三角形ポリゴンの3頂点の(x、y、z)座標、その表面に貼り付ける絵(テクスチャ)など、諸々のデータをGPUに送る。次に、GPUがそのデータを元に、3D物体として描画するわけだ。

ここで、もし、ポリゴンの数が825個ではなく、その100倍の82500個だったら?

さぞかし滑らかに見えるだろうが、GPUに送るデータ量は100倍、計算量も100倍になる!これでは、処理速度はガタ落ちで、アニメーションはカクカク、ヘタをすると綺麗な「紙芝居」 ・・・ シャレになりませんね。

というわけで、現在は、ポリゴン数を減らして(ローポリ)、ポリゴンに貼り付ける画像(テクスチャー)を凝って、形状のゴツゴツを誤魔化している。実際、ゲーム画面を拡大してみると、ゴツゴツが丸わかり。たとえば、大砲が五角柱だったり(本当ですよ)。

では、形状が滑らかで、アニメーションもヌルヌル、そんな都合の良い方法はないものだろうか?

じつはある。

それが「テッセレーション」だ。

■高機能化するGPU

テッセレーションとは、一言でいうと、物体を滑らかに高速で描画する「いいとこ取り」の方法。

先のガレオン船を例に話を進めよう。まず、ポリゴン数は「825」個のまま。もちろん、そのまま描画すれば、オブジェクトはゴツゴツで、何も変わらない。

そこで ・・・

GPU側で、ポリゴン数を「825 → 82500」に増やした後で描画するのである。これなら、「82500」ポリゴンの滑らかなガレオン船が表示される。しかも、「ポリゴンの増殖」はGPUが内蔵する専用ハードで処理するので非常に高速。しかも、ポリゴン数が少ないので「CPU → GPU」のデータの受け渡しにも時間がかからない。つまり、オブジェクトは滑らか(ハイポリゴン)で、アニメーションはヌルヌル(高速描画)で、いいことずくめ。

じつは、このテッセレーションはパソコン用のビデオカードではすでに標準になっている。ただし、ほとんどのゲームソフトはまだ未対応なので、これからの技術だろう。そういう意味で、プレステ4の「テッセレーション」強化はグッドチョイスだろう。

さらに ・・・

オブジェクトの形状と色をゲーム中に変更する機能が強化されている。前者の変形機能を「バーテックス・シェーダ」、後者の変色機能を「ピクセル・シェーダ」と呼んでいる。

たとえば、宇宙艦隊戦ゲームで宇宙船が被弾したとする。この場合、電磁スクリーン(電磁バリア)がなければ、被弾した部分は穴があくか、変形する。当然、被弾した部分の形状データは変更する必要がある。ところが、ほとんどのゲームは、形状は変えず、テクスチャ(ポリゴンに貼り付ける画像)だけを「被弾版」に変えている。ゲーム中に「形状」を変えるのは非常メンドーだからだ。

ところが、「バーテックス・シェーダ」を使えば、ポリゴンの頂点座標をプログラムで変更することができる。つまり、ゲーム中にオブジェクトを自由に変形できるわけだ。

また、「ピクセル・シェーダ」を使えば、ポリゴンの色をプログラムで変更することができる。つまり、ゲーム中にオブジェクトを自由に変色できるわけだ。

これまでは、CGツールで作った形状と色は、ゲーム中に変更することはできなかった(アニメーションによる変形、光源による変色は除く)。ところが、「バーテックス・シェーダ」と「ピクセル・シェーダ」を使えば、形状と色を動的に変更できるわけだ。

もし、この機能がなかったら、変形・変色されたオブジェクトをあらかじめ全部用意しておく必要がある。たとえば、光子魚雷に被弾したオブジェクトなら、魚雷のあらゆる侵入角度、あらゆるエネルギー量に対応する被弾オブジェクトを全部作っておく ・・・ できるわけがない。

では、どうすればよいのか?

光子魚雷の侵入角度とエネルギーによって、都度、ダメージを計算し、その結果にっもとづいて変形・変色する。その方がリアルだし、ムダなデータをもつ必要もない。このような方法を「物理シミュレーション」とよんでいる。

では、なぜ初めからそうしないのか?

第一に、オブジェクトの元の形状と色をプログラムで動的に変更できなかったから。第二に、CPUとGPUの演算能力が低すぎて、物理演算に耐えられなかったから。

ところが、プレステ4では、「バーテックス・シェーダ」と「ピクセル・シェーダ」が実用レベルに達し、小数の計算能力も一桁上がっている。そのため、今後は、物理演算による動的変形・変色がスタンダードになるだろう。

さらに ・・・

今回のプレステ4では、この2つの「シェーダー」が一つに統合された。

統合?

だから?

プログラミングが楽ちんになる。そのぶん、プログラマーはこの機能を多用するだろうし、そうなれば、より美しく、よりリアルなゲームが増えるだろう。実際、「シェーダ・プログラミング」を専門にするプログラマーも出てきた。

■GPGPU

というわけで、GPUは高機能化が進んでいるが、最近、その「高機能」をグラフィック以外に使う技術が注目されている。

3Dのグラフィック処理は小数計算の塊なので、GPUは小数の計算が非常に得意だ。実際、小数計算では、GPUはCPUより10倍ほど速い(プレステ4の場合)。そこで、CPUでやっていたグラフィック処理以外の小数計算もGPUにやらせようというわけだ。これを「GPGPU」または「GPUコンピューティング」と呼んでいる。

初めからそうすれば良かったのに?

ところが、話はそう簡単ではない。

ゲームは、見てのとおり、常に画面が動いている(更新されている)。つまり、GPUはいつも大忙しなのだ。だから、GPUにグラフィック以外の計算を頼もうにも、GPUがいつ手が空いているかわからない。ムリに仕事を突っ込めば、グラフィック処理がおろそかになり、画面がカクカク ・・・ 何をやっているかわからない。

早い話が、プログラマーがGPUのグラフィック演算と汎用演算を効率よく振り分けるのはとても難しい(というかムリ)。ところが、プレステ4のGPUはこの振り分けをしてくれるという。もし、それが本当なら、物理演算の塊のシミュレーションゲームで重宝するだろう。まぁ、パソコンの「GPGPU」は実用レベルにあるので、ウソではないだろう。

たとえば、NVIDIAは「GPGPU」専用の拡張カード「Tesla」を販売している。浮動小数点演算性能が高く、自作スーパーコンピュータ、さらに世界のTOP500に入る本物のスーパーコンピュータでも採用されている。もちろん、用途はゲームではない。シミュレーションなど大がかりな計算を必要とする科学技術分野だ(金融工学も含む)。

さらに ・・・

この世界では、NVIDIAに一日の長がある。

一般に、バーテックス・シェーダーやピクセル・シェーダーのプログラミングでは、自由度の低い”なんちゃって”言語が使われる。ところが、「Tesla」はCUDAという、プログラマーおなじみのC言語の開発環境が用意されている。今のところ、用途は科学技術計算(金融工学も含む)に限られるが、今後、「新しい使い道」が生まれるかもしれない。

たとえば ・・・

知的好奇心はそそるものの、何かの役に立つわけでもない「お遊びシミュレーション」。具体的には ・・・ おっと、ここからは企業秘密だ、ムフフ。

じつは、旧世代のプレステ3にも同じような仕掛けがあった。プレステ3のCPU「Cell」は、メインプロセッサー「PPE」と、8個のサブプロセッサ「SPE」が一つのチップになったマルチコアCPUなのだ。ただし、パソコンのマルチコアのように、同じ種類のコアではない。このような異種のマルチコアを「ヘテロジニアス・マルチコア」とよんでいる。一方、同種のマルチコアを「ホモジニアス・マルチコア」という(名前はどうでもいいのだが)。

ところで、この「SPE」が小数計算専用のプロセッサなのだ。しかも、GPUとはハード的に独立しているので、基本、汎用演算とグラフィック演算の振り分けが不要。そのぶん、GPGPUより使いやすい(と思う)。

■メインメモリ

一般に、コンピュータのメインメモリは容量が非常に大きい。最近のパソコンでは、4GB~8GBが当たりまえ。なので、メモリ代もバカにならない。そこで、メインメモリは「DRAM」という低速だが安価なチップが使われている(プレステ3もDRAM)。ところが、プレステ4のメインメモリは、なんと「VRAM」。

これはサプライズだ!

「VRAM」は高速だが、非常に高価なメモリなのだ。あの高ビーなパソコンでさえ、「VRAM」はビデオメモリにしか使われないのだから。

ここで、「ビデオメモリ」とはモニタに表示される画像データを保存する記憶装置である。

じつは、ビデオメモリは読み書きの頻度が非常に高い。まず、ビデオメモリの画像データは、定期的にモニタに表示しなければならない。ビデオメモリの内容とモニタ画面は常に一致していないといけないから(あたりまえだが)。そのため、
「ビデオメモリ → モニタ」
のデータ転送が常に発生している(ビデオメモリからの読み出し)。

さらに、3Dゲームでは画面が常に動いている。つまり、ビデオメモリ内の画像データは刻一刻と更新されている(ビデオメモリへの書き込み)。というわけで、ビデオメモリは常に読み込まれ(表示)、常に書き込まれている(更新)。しかも、「表示」と「更新」は非同期で起こるので、「読み」と「書き」を同時に処理する必要がある(並列処理)。

そのため、ビデオメモリは、最低、2系統のデータ口をもち、しかも、高速でなければならない。そのスペックを満たすのが「VRAM」というわけだ。

ところが、プレステ4は、そんな贅沢な「VRAM」をメインメモリとして使っている。その結果、プレステ4のメインメモリはプレステ3より「7倍」も速い(理論上)。しかも、容量は8GBで、プレステ3の「31倍」!メインメモリがこれだけ高速で大容量なら、ゲーム機の速度は劇的に向上する。

では、Xbox Oneは?

Xbox Oneのメインメモリは、容量こそプレステ4と同じだが、低速のDRAMを使っている。さらに、GPU単体のグラフィック性能も、Xbox Oneはプレステ4の60~70%程度(理論上)。ということで、グラフィック性能で、プレス4はXBox Oneの2倍はあるだろう。この差は大きい。なぜなら、はっきりと体感できるレベルだからだ。

また、プレステ4のCPUとGPUはメインメモリを共有している。そのため、CPUとGPUのデータの受け渡しが非常に高速だ。

たとえば、「CPU → GPU」にデータを渡す場合 ・・・ まず、CPUがGPUに渡すデータをメインメモリに書き込む。すると、次の瞬間、このデータはGPUのメインメモリに書き込まれている。なぜなら、メインメモリは、CPUのメモリであると同時に、GPUのメモリでもあるからだ。

つまり ・・・

CPUとGPUのデータの受け渡しに、いわゆる「データ転送」は必要ない。これが共有メモリのメリットだ。ただし、片方がデータを書き込み中に、もう片方が読み込んではいけない。古いデータ(更新前)と新しいデータ(更新後)をいっしょくたに読むことになるから。

では、どうすれば良いのか?

片方が共有メモリを使っている時は、片方が共有メモリを使えなくすればいい。これを「排他制御」とよんでいる。何だか難しそうだが、じつは大したことはない。「現在使用中」のフラグ(旗)をもてばいいのだ。そのフラグが立っていれば、相手が使い終わるまで待つ、立っていなければそのまま使う、それだけのこと。

ただし、このフラグを普通のメモリでもってはいけない。なぜなら、このメモリにも排他制御が必要になるから。排他制御の排他制御 ・・・ つまり、堂々巡り。

というわけで、ソフトだけで対応するのはムリ。そこで、専用のハードが必要になるのだが、仰天するほどカンタンな論理回路だ。この仕掛けをもったいぶって「セマフォ」と呼んでいるが、じつはとても古い技術。実際、1981年に富士通が開発したパソコン「FM-8」でも採用されている。

FM-8は、当時、画期的なパソコンだった。まず、CPUだが、当時主流だったインテルの80系でなく、モトローラ社の「MC6809」が搭載された。

その頃、この手のマイコン技術を生業にしていたが、インテル系が嫌いで、特に指定がない限り、CPUはモトローラかテキサスインスツルメンツを使った。具体的には、8ビットは「MC6809(モトローラ)」、16ビットは「MC68000(モトローラ)」か「TI9900(テキサスインスツルメンツ)」。モトローラのチップは80系にくらべ、命令体系がすっきりしていて、アーキテクチャも洗練されていた。そのぶん、ハードの設計が楽ちんで、ソフトも書きやすかったからだ(当時は機械語で書いていた)。しかも、若干ではあるがパーフォーマンスも高かった。

ではなぜ、インテルの80系(今の86系)が生き残り、モトローラの68系は廃れたのか?

コンピュータ市場は最初に普及した者が勝者になる「ゼロサムゲーム」だから。

その分かりやすい例がOSだろう。その昔(といっても大昔ではない)、素晴らしいOSはたくさんあった。たとえば、先のモトローラの68系の「OS9」。信じられないほどコンパクトで、高速、しかも、マルチタスク・マルチユーザー。80系で幅をきかせていたマイクロソフトの「MS-DOS」など「OS9」の足元にもおよばなかった。自分で設計したFAコンピュータ(工場など悪環境で使用するコンピュータ)にOS9を移植して使った感想なので、間違いない。

さらに、メルチメディアに対応すべく開発された「BeOS」。一から書き起こしただけあって、ムダがなく、非常に洗練されたOSだった。当然、息を呑むほど高速(日本で代理店をやっていた印刷会社の社長さんから聞いた)。

そして ・・・

これらの素晴らしいOSを棍棒(名刀ではない)で叩きつぶしたのが、Windowsだった。もちろん、物が良かったからではない。先に普及していただけのことである。もし、面白いソフトを思いついたとして、普及していないOS9やBeOS用に作る人はいないだろう。たとえ、それがどんなに素晴らしいOSであったとしても。

インテルとマイクロソフトの悪口はこのくらいにして、FM-8に話をもどそう。

じつは、FM-8は、この「6809」を2基も搭載していたのである。1基はメイン処理用、もう1基はグラフィックとIO処理用である。その連携に使われたのが「共有メモリ」だった。当時としては、イケてるアーキテクチャだったが、ユーザーがスペックの違いを体感できるほどではなかった。アーキテクチャーの洗練度とパーフォーマンスは必ずしも一致しないのである。

さて、ここで、プレステ4の「共有メモリ」にもどろう。

まず、重要なのが、AMD社が「共有メモリ」で本気だということ。

プレステ4で採用された「共有メモリ」は、AMD社が開発中の「GPGPU支援技術HSA」に対応しているのである。

ということは ・・・

共有メモリを使って、計算内容をワープ転送し、GPUで高速計算し、計算結果を共有メモリで再びワープ転送する。結果として、「GPGPU」は超高速になるわけだ。つまるところ、GPGPUは共有メモリとセットで初めて威力を発揮するのである。それはそうだろう。データ転送でしこたま時間がかかるなら、CPU単独で計算する方が速いから。

ここで、GPGPU(GPUコンピューティング)を整理しよう。

この仕掛けは、既存の技術を使って、ムダ、ムリなく、パーフォーマンスを引き上げている。奇をてらうことなく、自然体で進化したエレガントな方法だ。

というわけで、プレステ4は、かなめのCPUとGPUは有り物だが、細部に渡って手抜きがない。しかも、3万9000円!

プレステ4は地味なマシンだが、限られたテクノロジーと予算の中で、ほぼベストに最適化されている。一方、Xbox Oneは技術の方向性は合っているが、詰めが甘く、技術者の心に響かない。一言でいえば、頭のテッペンから足のつま先まで「有り物」なのだ。

つまり ・・・

プレステ4はMac、Xbox OneはPC/AT互換機?

■総括

最後にプレステ4を総括しよう。

まだ、市場に出ていないので、断言はできないが、プレステ4はプレステ3の「10倍」は高速だろう。しかも、メインメモリの容量が「31倍」になったので、プログラマは些末な雑用に煩わされることもない(メモリが少ないのをカバーするためゲームの面白さとは関係ない処理にどれだけ労力を使ったことか)。そのぶん、いかに面白くするかに集中できる。

リアルなオブジェクト、滑らかなアニメーションにくわえ、シミュレーション能力も劇的に向上する。同じようなゲームなのに、これまでとは何かが違う ・・・ たとえば、モニタに映し出されない、どこか遠い場所で、同時に何かが進行しているような ・・・ こんなリアルな臨場感を体験できるだろう(たぶん)。

しかし ・・・

過度の期待は禁物だ。「宇宙を再現する」シミュレーションは論外だし、リアルな歴史シミュレーションもムリ。つまり、コンピュータの「新しい使い道」が生まれるわけではない(断言はできないが)。

とはいえ ・・・

プレステ4用に開発されたゲームのムービーを観ると、まるで、実写!「プレステ3の10倍」がヒシヒシと伝わってくる。たかがCG、されどCG、これはこれで凄いのだ。

ということで、次世代ゲーム機「プレステ4」は地味とはいえ、確実に進化している。

おっと、一馬身遅れのXBox Oneもお忘れなく!(3馬身かも ・・・)

《完》

by R.B

関連情報