CELLの相対評価と絶対評価   

2004年2月21日



読者様から頂いたメールで気がついたのだが、 今年はまだマザーの電源フェーズ数調査を行っていなかった事を思い出した。 マザーのフェーズ数調査は、当サイトの年頭恒例行事になっている。 (今、PC雑誌のマザーボード特集を開いてフェーズ数をカウントしている 最中である。)

だがWebを見ていると、この手の世界に興味のある人々の場合、 今月の世間の注目点はCELL一点に集まっているようだ。

PS2のEmotion Engineの時もそうだったが、SONYはハードウエア性能の高さを、 話題性という形でブランドイメージ形成に役立てるという戦略を採っている。 だから、CELLの話題が盛り上がるのはSONYとしてはまさに望むところだろう。 (今SONYは大画面テレビのブランドイメージ戦略でシャープにやられ放題で、 大きな失敗を犯している。だから、CELLの話題性を使ったブランドイメージの 失点回復は、企業として背負わされた大きな使命だろう。)

正直、この手のCPUはPCネタとは関係が薄そうだが、今後のトレンドを 探る意味では一見の価値はある。 ただし、当サイトはPCのために趣味でCPUを語るサイトな上に、 コンシューマゲーム機には全然感心がないので、 あんまりPCに関係なさそうなCELLには個人的に興味が薄いのだが...

というわけで、いつでもできるマザーボードの電源フェーズ数調査は 次回に持ち越しという事で、今回はCELLについて幕つなぎ的な 簡単な感想を書いてみた。

☆CELLに求められるモノの背景   
CELLの性能は一見すると、とてつもなく高性能である。 ゲームという用途を考えた場合、能力過剰と言ってもいい位である。

SONYは他のゲーム機メーカーと比べると、ハードウエア的には理想主義的で スペック的には前向きなメーカーだ。 経営戦的には別の判断もありうるのだろうが(例えば任天堂) 当サイト的にはその「前のめりの姿勢」は評価したいと思う。 (同じ失敗なら、性能が不足して売れない失敗より、高性能すぎて歩留まりが上がらず 需要に応えられない失敗の方がまだマシである。もっとも、 経営者としては、利益が出なければどちらも同じ失敗なんだろうけど...)

Emotion Engineがダイサイズの大きさから量産性を疑問視された事もあったが、 今ではそんなことを言う人もいない。 半導体の世界は開発費や製造設備といった固定費が極めて高く、 付加価値の割に原材料費等の変動費の占める割合が小さいという特徴がある。 だから、数量さえ出れば少々の費用的問題点には目をつぶる事ができる。

そして、ゲーム機は一時の勢いが衰えつつあるとはいえ、 巨大半導体市場である事には変わりがない。 また、今システムLSIが情報家電関係で注目を集めいている事で分かるとおり、 家電に高機能半導体が搭載される時代になっている。

日韓のDRAM攻防を見れば分かるとおり、市場規模の論理が透徹するこの世界では 技術力面だけで相手を圧倒するのは(ニッチ市場でない限り)難しい。だから、 CELLはゲーム機以外にも対応できる処理能力が求められている。 ワン・アーキテクチャで巨大市場を握るためには、 ゲーム機以外の市場も獲得する他無いからだ。

一見過剰な性能はこのためだろうか?

☆理論ピーク性能とバンド幅の関係   
ただし、よくよく見ていると、その過剰な能力がやたらとピーキーなだけで、 効率よく使えるかどうかは別問題と言うところに弱点がありそうだ。

CELLが採った戦略は単純明快の様に思える。

  1. 今、処理能力が要求されている部分は主に浮動小数点演算である。
  2. そのために、データ並列性を徹底活用した処理をする。(SIMD)
  3. それでも性能が足らない場合は、内部でのスレッド並列性を活用する。 (マルチコア)
  4. それでも性能が足らない場合は、外部でのスレッド並列性を活用する。 (マルチプロセッサ用インターフェイス)
  5. しかし、ゲーム機以外の市場も確保するためにはある程度の汎用性を持たせなければならない。(Powerアーキテクチャの部分導入)
このため、CELLの浮動小数点演算能力はSPEで32GFLOPSが8個、 PPEで32GFLOPSだそうだから、総計288GFLOPSだ。 x86なら最新鋭の3.8GHz動作Pentium4でも15.2GFLOPS (単精度浮動小数点演算時の値である。倍精度ならばその半分の値。) だから、相対的に評価するなら確かにとてつもなくすばらしい値だ。

さて、では当サイトがピーキーと表現するその根拠を述べてみよう。 それはデータ転送能力が貧弱だという点だ。 PCの3倍以上の25.6GB/sという能力は一見すると素晴らしい値である。 そんなバンド幅を持ちながら、なぜ貧弱というのか...

処理能力に対する必要なデータ転送能力とはどれくらいなのであろうか? 「多ければ多いほどよい。」では身も蓋もないので、論理的に考えてみよう。 当サイトが得意とする、いつものウソっぽい超単純化論理だ。 (いつものごとく、間違っていたらご容赦って事で...)

まず、コンピュータの内部では多くの場合二つのデータから 一つのデータを演算して作り出す。整数演算の場合は データのビット反転とか、シフトといった一つのデータから新たな一つのデータを 作り出す演算もそれなりにはあるが、浮動小数点演算ベースの場合では 比較的希な作業だ。

基本的な演算
ロードユニットA
(データA)
ロードユニットB
(データB)
浮動小数点演算ユニット
ストアユニットC
(データC)

この場合、1FLOPにつきロードが2回とストアが1回である。 つまり、理想的には3データ/FLOPのデータ転送能力が必要になる。

従って、データ転送能力はこれ以上あったとしても過剰で、 ムダなユニットとなる理屈だ。 3データ/FLOPのデータ転送能力は、 ある意味で完全な理想状態であると言える。 (演算ユニットが複数あっても、比率としては変わらないことに注目。)

しかし、これだとデータ転送能力がかなり厳しく求められる事になる。 ハードウエアリソースやCPUのバンド幅が厳しく問われすぎるので現実的ではない。 なので、多数のレジスタを用意してレジスタ間演算でなるべく済むようにする。

基本的な演算
レジスタA
(データA)
ロードユニットA
(データB)
浮動小数点演算ユニット
レジスタB
(データC)

上記では、レジスタリネームを前提にデータCはレジスタAで受けても良い。 どちらの場合でも、1FLOPの演算に必要なデータ転送量は1データとなる。

もちろん、演算済みデータを無限にレジスタで受けている訳にはいかないので、 いつかはメモリに書き戻さなければならない。 この場合は、ストアの操作が1回入る事になる。 しかし、例えば積和演算の様な場合、積和すべきデータの数が十分に多ければ、 ストアの操作のロスは相対的に小さくなる。

そして、十分に演算量が多ければ必要データ転送量は1データ/FLOPSに 漸近していく事になる。つまり、3データ/FLOPが完全な理想とすれば、 1データ/FLOPは現実的な理想という事が言えるだろう。

完全な理想状態が3データ/FLOPS、現実的な理想状態が1データ/FLOP。 それが分かった時点で、では、CELLの内部がどうなっているか見てみよう。

CELLの内、データ処理を受け持つのは主にSPEである。 PPEはSPEの制御や、OSのコントロールや、SPEで対処できないような 複雑だがデータ数の少ないスカラ演算に当たるだろうから、ここでは除外する。

SPEは内部にLS(LocalStore)という一種の スクラッチパッドメモリを持っている。 このユニットとSPE内部の浮動小数点ユニットとのバンド幅は、 この図を見る限り128bit/cycleとのことだ。

SPEのSIMDユニットは4並列で最大2演算/cycleらしいから、 サイクルあたりの演算量は8演算であろう。 すると128/8=16bit/cycleとなる。 単精度浮動小数点演算(32bit)を前提とすると、0.5データ/cycleとなる。 ただし、図からはデータラインは双方向の様にも見えるので、 そうだとするとLoadとStoreが巧くバランスすれば1.0データ/cycleである。 (実際には命令もバンド幅を消費する。だが、計算を簡単にするため、 バッファが理想的に機能すると仮定してそれはここでは無視する。)

つまり、LSとのやりとりでは現実的理想の半分〜同等のレートだ。

では、メインメモリとのやりとりではどうだろうか?

メインメモリのバンド幅は25.6GB/sである。 最速PCをもってしても約1/3の能力(8.5GB/s)しかないから、 一見すると十分な能力のように思えるのだが、どうだろうか?

この数値をベースに、クロックが4GHzだとすると6.4byte/cycleとなる。 ただし、これは8個のSPEとPPEでの共用だから、 PPEがキャッシュにヒットしていて見かけ上メインメモリのバンド幅を 消費していない状態でもSPE1個あたりでは0.8byte/cycle=6.4bit/cycleとなる。

SPEの場合と同様に1演算あたりに直すと、0.8bit/cycle。 単精度浮動小数点演算の場合は0.025データ/cycleとなる。 つまり、LSから転送する場合の1/20〜1/40のデータ転送能力しかない。

これが何を意味するかというと、SPEはキャッシュを持たないから、データが LSのメモリ容量(256KB)に収まらない演算の場合、その桁違いの内部演算性能は まったくの張り子のトラになりかねない危険をはらんでいるということだ。

合計256GB/sというSPEの総演算性能は、256KB×8=2MBというLSの総メモリ容量に すべてのデータが収まるか、あるいはLS内部のデータに強い局所性があって データがガンガン再利用される (その隙を縫って不足するデータをメインメモリからチマチマ転送する。) ことが大前提である事は間違いない。

これでは、演算量とデータ量の比率が、演算量側にかなり偏ったアプリでないと 実力が発揮しにくいと思う。

☆ベクトル型スパコンとの比較。   
では、眼を他の世界に向けてみよう。 最近つとに当サイト的に注目のベクトルプロセッサで考えてみる事にする。

ベクトルCPUのバンド幅はスカラCPUより一桁ほど大きい。 それを下表にまとめてみた。

CPU プロセッサあたりの理論ピーク性能
Gflops/P
バンド幅
GB/s
1FLOPあたりのメモリ帯域
 Byte/FLOP
1FLOPあたりの転送データ
(単精度浮動小数点演算時)
CELL 256 25.6 2 or 4(対LS)
0.1(対XDR)
0.5 or 1(対LS)
0.025(対XDR)
地球シミュレータ用ベクトルプロセッサ 8.0 32
マルチストリーミングプロセッサ
(CrayX1用ベクトルプロセッサ)
12.8 34.1 2.7 0.675
Pentium4(3.8GHz) 15.2 8.5 0.564 0.141

まず、ベクトルプロセッサの能力が単精度の場合0.675〜1データ/FLOP である事に注目して欲しい。 特に地球シミュレータの4Byte/FLOPという値は、 上記で計算した現実的理想での値 (単精度浮動小数点演算の場合)にピッタリと一致する。この事は 明確な設計思想に裏付けられたものであり、 絶対に偶然の一致ではないだろう。

見ていただくと分かるが、CELLのデータ転送能力はLS動作時ではベクトルプロセッサと 同等〜1/2程度だが、XDRから転送する場合はPentium4にも劣る事が分かる。 XDRデュアルという非常におごったメモリインターフェイスを 装備しているにもかかわらず、SPEの能力がそれ以上に高すぎるために、 それでも能力不足が露呈してしまっているのである。

それにしても、この表を見るとおもしろいことが分かる。

純粋な演算能力ではPentium4(3.8GHz)の能力は地球シミュレータ用プロセッサの能力を 上回る。しかし、実際の能力では、多くの科学技術用計算でPentium4は 地球シミュレータ用ベクトルプロセッサの前に敗れてしまう。

ある資料によると、科学技術計算における Pentium4(3GHz)の実演算性能は倍精度演算で1GFLOPSにも届かない。 倍精度演算の場合、理論ピーク性能は6GFLOPSだから実効性能は1/6以下なわけだ。 ちなみに、ベクトルプロセッサと比較した場合は4〜6倍程度の効率差が出る。

ここで、Pentium4の1FLOPあたりのデータ転送能力を4〜6倍してみると、 0.141×4=0.564、0.141×6=0.846だから0.561〜0.846となって、 ベクトルプロセッサの値にほとんど等しくなる。 (ここでは単精度を仮定するが、倍精度を単精度にして考えると、 Pentium4の場合演算能力も2倍になってデータ転送量も2倍になるので 比率としては結局同じである。)

つまり、キャッシュやローカルメモリに収まらない巨大なデータを扱う場合、 総合的な演算能力を決める主要素は演算ユニットの演算能力ではなく メモリのデータ転送能力なのだ。 スカラプロセッサでのバンド幅を能力低下比率で補正してやると、 ベクトルプロセッサのそれにほぼ近い値になるという事実がそれを示している。

天才技術者セイモア・クレイは科学技術計算の本質を"It's the Bandwidth"と 表現したが、この表を見ると今更ながら卓見であった事を 思い知らされる。

☆ピーキー過ぎて...   
この状況をタイプA、B、Cという3つの種類に分類してみた。

分類 タイプA タイプB タイプC
性能の支配要因 演算能力が支配 どちらも影響 メモリバンド幅が支配
実際の製品 PC用途でのx86系CPU GPU ベクトルプロセッサ
科学技術計算におけるx86系CPU

タイプAは内部の演算能力が性能の支配要因である場合。 キャッシュがよくヒットする事でメモリ性能が見かけ上満たされている場合である。

タイプBはメモリバンド幅も内部の演算能力も共に支配要因である場合で、 GPUが相当する。GPUの場合、内部の処理能力とメモリバンド幅は拮抗していて、 ATIとNvidiaではどちらの支配要因が強いか判断が異なっているからだ。

タイプCはベクトルプロセッサであり、メモリバンド幅がもっとも重大な 支配要因である事は先にクレイの言葉を示したとおりである。

ちなみに、CELLは理論ピーク性能を追求したあまりメモリバンド幅が不足し、 その結果タイプAのハズがタイプCになってしまったというのが、 当サイトの判断である。

つまり、CELLの場合の値はLSから転送する場合はベクトルプロセッサ並みだから、 LSに収まるデータ数の場合は超高性能が予想される。

しかし、XDRから転送しなければならない様な場合はPentium4より劣るから、 効率としてはPentium4にも劣ると言うことになりかねない。 もちろん、たとえ効率が下がっても 理論ピーク性能が高いから、それなりの値にはなるのだろうが...

余談だが、CELLはループ処理をアンロールして 多数のレジスタに展開する方法で演算できるそうだ。

実は、プログラム側から見たベクトルプロセッサの本質は 最内側ループをハードウエアで丸ごと実行する事に相当する。 つまり、CELLのこの手法は、LSをメインメモリに見立てた場合、 ベクトルプロセッサの真似をコンパイラと協調してやらせよう という方法であり、これも一種の疑似ベクトル方式だ。

とっ、話がずれたので戻して、大雑把に計算してみよう。 XDRからデータを転送しなければならない場合は、 最初に述べた現実的理想の1データ/FLOPを仮定すれば、 25.6GB/sを4(単精度の場合1データは4Byteだから。)で割って、 6.4GFLOPSとなった。

それでもPentium4の実効性能から見れば桁違いの高性能だが、SPEの理論ピーク性能 256GFLOPSから見ればかなり大きなハンデキャップを背負った値になってしまう。 もちろん、これは当サイトの論理が正しければと言う仮定付きの かなり粗っぽい近似値だが...

CELLのキモはSPE毎に256KBにデータを納めるということに尽きると思う。 それができなければ...という状況は、あまり考えたくない。

CELLは外部メモリバンド幅と内部演算性能の比率が演算性能側に凄く偏っているので、 非常にピーキーな特性になってしまっている。 プログラマが乗りこなすのに大きなスキルが必要なのではないだろうか? (たとえコンパイラの支援があったとしてもである。)

車のエンジンに例えれば、F1のエンジンみたいなものだろう。 トッププロのドライバーが運転すれば爆速だが、 素人が運転すればパワーバンドを維持する事すら難しいのではないか?  つまり、トルクの細い超高回転型ユニットである。 ただし、超高回転型とは言っても、中で回っているのはクランクシャフトではなく、 LSの中でのループ処理という意味である。LS内でループが回らなければ失速する...

ちなみに、それはゲームでは可能と思うが科学技術計算用途では絶望的だ。 だから、CELLはゲーム機では超優良プロセッサかもしれないが、 計画されている科学技術計算用のワークステーションなんかでは意外な 苦戦を強いられるかもしれない。

なんだかCELLを見ていると、大友克洋のアキラに出てきた金田の乗る バイクを思い出してしまう。 「ピーキー過ぎてお前にゃ無理だよ。」ていう決め台詞のアレだ。

☆相対評価と絶対評価   
今回の内容はCELLにとって少し厳しすぎたかもしれない。 もし開発関係者がこのページを見ていて気分を害したらお詫びする。 しかし、絶対性能を指標に考えるとそうなってしまうのだ。

世の中の評価には2つの方法論がある。 つまり、絶対評価相対評価だ。

CELLは桁違いの内部演算性能を持っているから、 相対性能でx86プロセッサなんかと比較すると格段にすばらしいプロセッサに見えるのは 理解できるし、それはそれで正しい評価であろう。 また、メモリバンド幅もPC用のx86プロセッサと比較すると 相対的に見れば格段に強力である。 実際、たぶん過去のx86プロセッサよりは数段上の総合性能を示すだろう。

しかし、世間の記事が相対評価に走るのを見て、へそ曲がりな当サイトは あえて絶対評価で考えてみた。その結果、分かることは、 確かにすばらしいプロセッサだが、実際の性能はLSにデータが収まるかどうか 次第であり、収まらない場合はかなり効率が落ちてしまう 可能性が極めて高いという点だ。

例えばワークステーション用ならば、たとえ理論ピーク性能が1/4になったとしても バンド幅を4倍にした方が総合的には高性能が出せるだろう。 素人には扱えないピーキーなF1マシンより、 パワーが1/4でもオートマ車の方が素人運転の公道ではかえって速い。 サーキットでの性能には、あまり意味はないと考える。 もっとも、バンド幅と理論ピーク性能は単純なトレードオフの関係にはないので、 実際にはこんな訳にはいかないのだろうが...

CELLは相対評価では疑うことのできない高性能プロセッサだが、 絶対評価ではまだまだやり残したことの多いプロセッサなのでは無かろうか?

CELLを開発した技術者は世間の評価をたぶんこう思っているのではないだろうか?  「CELLをそんなに誉めて貰うのは面はゆい。ホントはメモリバンド幅を もっと増やしたかったんだけど。」ってね。

さて、次回こそはマザーのフェーズ数調査結果をお届けする予定である。