後藤弘茂のWeekly海外ニュース

Cellのパワーの源「SPE」の正体




●Cellの核となるプロセッサSPE

 Cellプロセッサは、9個のCPUコアを搭載したマルチコアCPUだ。主にOSやコントロール系処理を担当する「PPE(Power Processor Element)」が1個と、演算を担当する「SPE(Synergistic Processor Element)」が8個の構成となっている。SPEは、1命令で複数データに対する処理を行なうことができる「SIMD(Single Instruction, Multiple Data)」型のプロセッサで、ストリーム型の処理で強力な性能を発揮する。

 一見すると、PlayStation 2のCPUであるEmotion Engineに内蔵された「VU(Vector unit)」と似ているが、その内容と役割は大きく異なる。SPEはストリーム処理専用のプロセッサコアではなく、汎用性の高いプロセッサコアとして設計されている。また、ハンドコーディングのEmotion Engineに対して、SPEは高等言語でのコンパイラベースの最適化を前提としたアーキテクチャを取っている。

 SPEは、データの転送を担当するDMAユニットと、プロセッサコア本体であるSPUで構成される。SPUは、256KBと大容量のローカルメモリ「Local Store(LS)」を備えるが、キャッシュメモリは持たない。ちなみに、次世代PlayStation(PlayStation 3)に搭載されるメインメモリは前回書いた128MBではなく、256MBであることが判明している(昨秋にSCEIがDRAMベンダーに対する要求仕様を256Mbitから512Mbitに変更したため)。SPEは、基本的にはこの256MBのメインメモリからプログラムとデータをLocal Storeに転送して実行する。

 SPU内部は、7つの演算ユニットがあり、2本のパイプラインに編成されている。SPU自体は、インオーダー型のデュアル発行、つまり、2命令を順番に実行ユニットに対して送る形の構造となっている。これは、3命令をアウトオブオーダ(命令を実行できる順番に並べ替える)発行する、Pentium 4などのCPUコアと大きく異なっている。

 SPEの大きな特徴は、CPUコアがシンプルに構成されていることだ。キャッシュやアウトオブオーダ型の命令スケジューリング機構を持たないため、従来のCPUと比べると、制御系の回路部分がずっと小さい。だが、演算性能は高く、特に、ゲームなどで多用される単精度(32bit)の浮動小数点演算の性能が高い。また、単体CPUを単純にマルチコアにしたX86系のマルチコアCPUと異なり、CellのSPEはマルチコア向けに最初から設計されている。そのため、マルチコアに特化したさまざまな工夫が加えられている。まさに、マルチコア時代のCPUコアだ。

Cellダイアグラム
PDF版はこちら

SPE 構成図
PDF版はこちら

●プロセッサの役割分担でレジスタファイルの拡張を可能に

 SPEは128bit長で128本と膨大なレジスタを備える。同等のレジスタ数を持つアーキテクチャはIntelのサーバー向けCPU Itaniumだ。レジスタ規模ではSPEは、Itanium並のプロセッサということになる。ただし、SPEでは128本のレジスタは、浮動小数点データと整数データ、その他のコンディショナルオペレーションの格納全てに使われる汎用レジスタとなっている。

 SPEでは、128本の物理レジスタは、論理レジスタとしてマップされる。つまり、「プログラム側からも128本のレジスタが見える(使える)」(SCEI、鈴置雅一氏、Vice President of Microprocessor Development Department, SCEI)。

 SPEが膨大なレジスタを備えるのは、OSを走らせるPPEとは異なり、頻繁なスレッド切り替えを行なわないことを前提としているからだ。

 「レジスタについて、われわれは経験を積んできた。(従来のPowerの)32本のレジスタセットには利点がある。コンテクストスイッチの際の(レジスタ内容のメモリへの)待避を軽減し、(スレッド切り替えを)小さなスライスに保つことを容易にする。

 しかし、SPE(のソフトウェア)はもっと、“始めたら完了まで(継続して実行する)モデル”を取るとわかっている。そのため、コンテクストスイッチングはそれほど頻繁にはしないと考えている。だから、より大きなレジスタも備えられると考えた」とCell開発を担当したIBMのJim Kahle(ジム・ケール)氏(IBM Fellow)は語る。

 Cellの場合は、頻繁なスレッド切り替えが発生するOSはPPEで実行し、SPEは主にストリーム型の演算タスクを実行する場合が多いことを想定している。そのため、コンテクストスイッチングのオーバーヘッドをあまり気にせずにレジスタ数を増やすことができるというわけだ。これは、処理によってCPUコアを使い分けるCellならではのアプローチだ。

●128本の膨大なレジスタはループアンロールのため

 また、SIMDプロセッサであるSPEでは、演算の並列度を上げるために膨大なレジスタファイルが必要だったという。

 「レジスタを大きくするのはループアンローリング(ループの展開)のためでもある。レジスタリネーミングなどの技法を使わずに、パイプラインを埋めるには(ソフトウェアによる)ループの展開が必要だ。他のプロセッサでの経験上、ループアンローリングを行なうのに適切なレジスタ数は100程度だと判断した」(Kahle氏)

 同じ処理を繰り返すループを展開して、SIMDによる複数データに対する同一命令の処理に変換する。そうしたSIMD化によって、データレベルの並列度を高めて、SPEの効率を高めるために、128本のレジスタが必要になったというわけだ。これは、展開した場合には、ループ内の同レジスタを、それぞれ異なるレジスタに割り当てなければならないためだ。

 こうした最適化をPlayStation 2のCPU「Emotion Engine」のようにハンドコーディングで行なうとしたら悪夢だが、Cellの場合はコンパイラベースの最適化を前提としている。

 「128本のレジスタは、一種のブルートフォース型(力ずく)のアプローチだ。しかし、SPEは基本的にインオーダマシンで4GHzで動作するため、レイテンシもそう小さくはない。そのため、コンパイラベースでのスケジューリングが非常に重要となる。ループアンローリングはその好例だ。コンパイラでの高度なスケジューリングのためには、128本のレジスタが必要だと考えた」(鈴置氏)

 「128本のレジスタがある環境なら、コンパイラが多くの最適化ができる。真にリソースの利用効率を上げることができるだろう。これまでの32本のレジスタは、コンパイラによる最適化の障壁となっていた」(Kahle氏)

 つまり、コンパイラベースのソフトウェアスケジューリングをゴリゴリ行なうためには、十分なレジスタファイルが必要だと判断したわけだ。レジスタ空間が広ければ、コンパイラがレジスタの競合なくより広い範囲でのスタティックスケジューリングが可能になる。その分、SPEでプログラムを実行する際の並列度が高まり、SPEのパフォーマンスが上がるわけだ。

 また、このことは、Cellの設計思想が、基本的にコンパイラベースのソフトウェアスケジューリングを前提としていることを意味する。それは、Cell向けに強力な最適化コンパイラの開発を行なっていることを示す。そのため、Cellでは、ハードが先行で開発環境が貧弱だったEmotion Engineの時とは、かなり状況が変わる可能性もある。

●新規に開発されたSPEの命令セットアーキテクチャ

 Cellの中のコントロール用のプロセッサコア「PPE(Power Processor Element)」は、完全にPowerアーキテクチャ互換の命令セットを備える。しかし、SPEの命令セットは、PPEのPower命令セットとは全く異なっている。

 「ベースにしたものはあるが、これは完全に新しい命令セットだ。我々は32bit命令からスタートし、RISC型のオーガナイゼーションを行なった。だが、128本のレジスタのアドレスをしなければならないため、新しい命令セットになった。また、我々はできる限り命令セットをシンプルにしようとした。整数命令、単精度浮動小数点命令、倍精度浮動小数点命令、ロードストア命令、分岐命令、それら全てを32bit命令フォーマットにフォーマットした」とCell開発を担当したIBMのJim Kahle(ジム・ケール)氏(IBM Fellow)は語る。

 SPE命令は、RISC型の32bit固定長命令フォーマットで、以下のような命令種類を備える。

Single Precision Multiply-add
Integer Arithmetic & Logicals & Compares
Shifts & Rotates(word, quadwords)
Loads/Stores, branches
Channel I/O
Media

 上記の命令に加えて、聞き間違えでなければ倍精度浮動小数点演算命令も備えていることになる(ただし、演算ユニット自体は単精度SIMDなので性能は低い可能性がある)。Channel I/O命令はSPE外のユニットとのリード/ライトのための命令だ。最後のMedia命令は、メディア処理に特化した命令とされているが、詳細はまだ明かされていない。

 SPEの命令セットはフルの汎用命令セットとなっており、CやC++などの高級言語でプログラミングができる。高等言語でのプログラミングを前提としていることは、PS2のEmotion Engineとは大きく異なる。SPEの命令セットは、最大3オペランド。3オペランドの場合は、3つのソースレジスタと1つのターゲットレジスタが命令に納められる。

SPE 命令体系
PDF版はこちら

●2本のパイプに構成された実行ユニット群

 SPEの演算ユニットは7つ(数え方によって異なる)で、OddとEvenの2パイプに編成されている。

◎Even Pipe
Simple Fixed Unit
Sigle Precision Unit
Byte Unit
◎Odd Pipe
Permute Unit
Local Store Unit
Channel Unit
Branch Unit

 演算系のユニットは基本的にEvenパイプで、その他の処理がOddパイプのようなイメージだ。SCEIのCell関連の特許出願では、SPEに当たるAPUのパイプは、浮動小数点演算と整数演算に分かれていたため、特許とはパイプ構成はかなり異なる。

 SPEのパイプの構成は、じつはIBM/Motorolaが開発したPowerPCのマルチメディア処理ユニット「VMX/Altivec」によく似ている。VMXでも、パイプラインは演算を行なう「Vector ALU」とレジスタのオーガナイズを行なう「Vector Permute」との2つに分かれている。IBMの経験から、この構成が最適だと判断したと推測される。両パイプへの命令発行はスワップすることもできる。

□関連記事
【2月11日】【海外】PCを遙かに超える、Cellのメモリ/IO帯域
http://pc.watch.impress.co.jp/docs/2005/0211/kaigai155.htm
【2月9日】【海外】PlayStation 3に搭載されるCellの性能
http://pc.watch.impress.co.jp/docs/2005/0209/kaigai154.htm

バックナンバー

(2005年2月12日)

[Reported by 後藤 弘茂(Hiroshige Goto)]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp 個別にご回答することはいたしかねます。

Copyright ©2005 Impress Corporation, an Impress Group company. All rights reserved.