久しぶりにワクワクしてきた。(RockとSilverthorne)   

2008年2月24日



さてさて、久しぶりに更新が約一ヶ月滞った。すみません。

もうすぐ年度末(当サイトにとっては本業の締めの季節であり、毎年ピンチになる最も忙しい季節である。) がやってくるということもあるが、 加えて今年度はプライベートで引っ越し(実空間での)があり、 仕事に併行して転居先も探さねばならず、2月は週末が転居先の探索・偵察で完全に潰れてしまったためだ。

引っ越し先の家探しで思ったのだが、引っ越し先の某所近傍は地の果てというか、蛮族の地というか...完全にデジタルデバイド地域だね。

友人には「これを機会にFTTH化。」なんて言われているのだが、 なんせ光ファイバーどころか下手をするとADSLすら来ていない地域が存在している。1) (FTTHは都市部ではほぼ100%利用可能で、全国平均でも確か80%位は利用可能だと思ったのだが... ADSLに至っては全国平均の人工カバー率は95%以上。) 都会ではFTTHなんて常識以前のライフライン的インフラなんだろうけど、 引っ越し候補地周辺ではFTTHが来ているというだけで家賃が若干高めになるのだ。

それにしても、FTTHそれ自体に付加価値がある地域なんて今時ありえるのかね!?

当サイトに言わせれば、それは「この物件は水道が来てますから、家賃高めです。」 とか、「この賃貸アパートは電気が来ているから、家賃高めです。」なんて言われているも同然に思えて、 まさに「何じゃそりゃ。」状態。

ブロードバンド黎明期には「IT技術が地域格差を縮小させる。」とか「田舎での自宅勤務が可能になる。」なんて寝言が 盛んに宣伝されてきたが、何のことはない、結局ブロードバンド系インフラも経済原則に従って 人口密度の高い地域から普及するわけ。IT技術は地域格差を縮小させるどころか、他のインフラ同様、単に地域格差を 拡大させる要素の一つになってしまっている。

FTTHを導入したいのだけど、「こりゃ、またもADSLで我慢しなければならないのかね〜。」なんて思いながら、 現代版の竪穴式住居とも言えるFTTH未開通アパートをメインで家探ししなければならない今日この頃である。

というわけで、今回は短編で内容もちょっと手抜き。 (読者の皆様にはお詫び申し上げます。) 最近のいろいろなCPUの感想などでお茶を濁してみた。(^^;)

☆もう出たのか!? L1キャッシュ共有CPU   
前回はIsaiahの設計思想について考えてみたわけだが、 今回はいろいろなCPUが発表されておもしろい。 個人的には特にintelのSilverthorneとSunのRockがおもしろかった。

というのも、最近はCPUの進歩が遅滞気味で新しい設計思想が薄れており、 キャッシュ増量とか地味な改良が多かったからだ。 もちろんキャッシュ増量だってそれなりに効果はあるわけだし バカにする気はさらさら無いのだが、CPUマニア的にはワクワク度低いよね。 (だって...そうでしょ。)

しかし、今回発表されたこの二つのCPUは、いずれも設計思想が新規であり、 CPUコアにおける進歩の壁をどう乗り越えていくのか興味が湧く。

まずはRockから見てみよう。 まず驚いたのは、L1キャッシュ共有構造となっていた事だ。

当サイトはキャッシュの共有について、まずはL2キャッシュの共用からだが、 最終的にはL1キャッシュの共用が最も効果的と書いた事がある。

しかし、L1キャッシュはL2キャッシュとは比較にならない位にCPUコアと密接に結合しており、 共有の技術的難易度はL2キャッシュ共有の比ではないと予想される。 それ故に、効果こそ大きいが技術的困難度を考えれば実装されるのはもっと先だろうと予想していたのである。

要するに、理想論としては正しいのだが2008年の段階で当サイトの予想が的中するとは、 当の本人自身が思っていなかったのだ。 (ちなみに...これは予想が的中したと言うよりは、半分は外れたと正直に認めるべきなのかな。 定性的には的中したが、定量的には予想を外したというか...微妙だ。)

とっ、話を戻して、 L1キャッシュの共有は、キャッシュ容量が同じならば非共有よりも性能が上がるし、 同じ性能でよいのならば容量を減らしてコアサイズを小さくできる。 Rockの選択は後者で、なんせコア数が16個も内蔵されているのだからこの効果は小さくないだろうと思われる。

共有によるダイサイズの縮小効果はどれくらいだろうか?

非常に興味があるところだが、はっきり言えば実際にものが出てみないとわからない。 わからないのだが...それじゃ話にならないので、アマチュアなりに当サイトの大雑把な予想を書いてみる。 おそらく同じ性能を維持するために必要なL1キャッシュのダイ面積が、 共有しなかった場合に比べて大雑把にはL1命令キャッシュで50%位、L1データキャッシュで30%位縮小できるのではないだろうか?

根拠であるが、キャッシュの必要容量が局所性の時間変動でランダムに変動していると仮定して、 スレッド間に相関性が全くない場合を仮定すると、変動の平均ばらつきは共有数の平方根分の1となるから。 まぁ、これ以上ない位に超簡略化された近似だから、この予想の的中率はそれほど高くないかもしれないけど...

ともかくも、コア数を増やす場合は単純に同じコアを並べていくだけでは シングルスレッド性能が低下してしまう。 こうしたシンプルな設計思想のマルチコアが有効なのは元々アプリ側にそれに見合う並列性が備わっている場合であり、 サーバー用途とかスパコン用途とかでないとこういう設計はうまくは行かない。

Rockはサーバー用途だが、Niagara2よりは1つ1つのスレッドが高負荷な場合を想定して設計されているそうだ。 それは先に述べたL1キャッシュの共用もそうだが、アウトオブオーダー機構の採用とか、 高クロック設計とか、1コアあたりの実行スレッド数がNiagara2の4スレッドから2スレッドに下げられた点とかに 明確に見て取ることが出来る。 これらはWeb報道でも当サイトとまったく同じ主張が見られるが、たとえば下記の記事の意見とは当サイトもまったく同感である。 (たとえば Sunがサーバー向けハイエンドプロセッサ「Rock」の概要を公表 等の記事をご参照ください。)

「マルチコアだから速い。」は(現状のソフトウエア環境の)PC用途では成り立たないことを当サイトは強く主張しているわけだが、 マルチコアがかなり有効と思われるサーバー用途ですらシングルスレッド性能回帰の流れが見られる点には特に注目する必要性があるだろう。 事実、Sun自身が講演で「シングルスレッドの処理でも高い性能が得られることをRockの設計目標にした。」と述べたそうだ。

要するにNiagara2よりもずっとシングルスレッド性能指向なのであり、製品ポジションの問題以外にも、こうした行き過ぎたマルチコア化に対する 揺り戻し現象というか、マルチコア化によるシングルスレッド性能の低下をいかに抑制するかがマルチコア成功のカギである事を示唆していると言えるだろう。

Rockが教えてくれた今後のCPU進化における最大のポイントは、 マルチコア化最大の壁であるシングルスレッドの低下をいかに最小限にとどめるかという点だと思われる。

それにしても、一時期は経営状態が危惧されたSunであるが、CPUの開発力を見る限りでは完全に復活したようである。 CPUマニア的には嬉しい限りだ。 (財務諸表の見方はあまりよく知らないので、技術的な復活が経営的な復活につながっているかどうかはわからないけどね。)

ちなみに、Rockの一番の売りはスカウトスレッド対応にあるわけだが、 これの効能については現状では正直よくわからなかった。 良く効くのかそれほどではないのか、もう少し勉強してから別途書いてみたいと持っている。

☆高クロックと高並列性のどちらが優位かは用途と設計次第。   
で、お次はintelのSilverthorne。これもRock同様にワクワク度は高い。

特に SilverthorneのPC向け派生CPU「Diamondville」という記事によるとローコストPC向けの製品も発表される点には注目だ。 つまり、携帯向けなどと違って我々PCマニアでも実際にPCとして使ってみる事が可能であり、 これがワクワク度をいや増す事となる。 Rockは技術的にはワクワクするけど、残念ながらPC用に発売される事は万に一つもないもんね。

まず、Silverthorneの何にワクワクしたのか書いてみたい。 一つはローエンド向けにもかかわらず高クロック主義であること、もう一つはブロックダイアグラムだ。

高クロック主義は高ILP主義と同様にPC用途では十分にあり得る選択肢であると当サイトは主張してきた。 しかし、Net-Burstが失敗に終わってからと言うもの、この主張は常にご批判を受けてきた。 平均的に見るとPCマニアは高クロック主義に対する点数付けがものすごく辛いのである。

当サイトはPCマニアの中では高クロック主義に比較的寛容な立場であり、ある意味でかなり異端な立場であろう。 もちろん高クロックに批判的な意見にも納得できる一面は確かにあって、 PCマニアは高クロックを「脊髄反射的に」批判する...などと言うつもりは無い。

けれど、たとえばIBMのPower6プロセッサを見ていただきたい。 Power6は高クロック主義設計だけど、消費電力が大きめな点を除けばほとんど欠点のない良くできたCPUである。 Net-Burstの失敗だけを見て「高クロック=悪」と即断するのは早計で、 これを見ても高クロック主義が無条件で駄作であるハズは無いことが簡単におわかりいただけよう。

そして出てきたのがSilverthorneだ。特に低消費電力向けCPUで比較的高クロック指向なのには 注目すべきである。ハイエンドCPUの典型であるPower6、そしてローエンドの典型であるSilverthorneで 共に高クロックが用いられると言うことは、高クロック主義は未だ生きている事を如実に示すものであろう。

高クロックは消費電力が大きいと言われるが、実は高クロック主義が高消費電力になるかどうかは、 ライバルとなる並列性を利用したプロセッサの相対比較次第であろう。 低クロック・高並列性利用プロセッサの場合、 実性能が高くなって高クロックプロセッサを打ち破れるのは、命令レベルにせよデータレベルにせよスレッドレベルにせよ いずれかの並列性が上手く抽出出来る用途に限られる。 (典型的なのはサーバー用途とスパコン用途。それぞれに膨大なスレッド並列性やデータ並列性が存在するからね。)

逆に並列性があまり上手く抽出出来ない用途(一番典型的なのはPC用途である。)では、 スレッドレベルの並列性を利用するマルチコアも本来の高効率性を生かせずに 実効性能ベースではかえって高消費電力となってしまうケースも多いだろう。 (マルチメディア用途でマルチコアが上手く動いてくれるのは、 PC分野としては例外的に強いデータ並列性があるからだ。負荷の状態がスパコン用途に似ているのである。)

また、Net-Burstの失敗は安易にパイプライン段数を増やしたことが原因で、 根本的に高クロックが悪という訳じゃないと思う。 安易じゃなくてちゃんと熟慮を重ねた上での設計ならば十分にあり得る選択肢なのだ。 このあたりの話は、頭の悪い当サイトが書くよりも SilverthorneのパフォーマンスはDothan以上 という記事の後半部分の方がよほど詳しいので、お手すきならばお読みいただきたいと思う。

というわけで、高並列性と高クロックのどちらを取るのが有利かは用途や設計次第であり、 PC用途ならば高クロック主義も十分にあり得る選択肢であるという当サイトの主張を Silverthorneは間接的に証明してくれたのである。

☆Silverthorneはシングルスレッド対応デュアルコアCPUか?   
次に話題を変えてSilverthorneのブロックダイアグラムを見た当サイトの第一印象。 「これ、本当にシングルコア? デュアルコアCPUじゃないの???」

一応、公式発表ではSilverthorneはSMT装備とは言え、れっきとしたシングルコアCPUである。 デュアルコアCPUではない。(将来的にはデュアルコアCPUプランが計画されているようだが...)

が...そのSMTの実装手法がNet-Burstとは全然違うのである。

Net-Burstでは各ステージが実行する命令は同一スレッド由来のものである。 それが時系列に交互に入れ替わることでSMTを成し遂げている。 要するに時分割的なSMTだ。 超細粒度なタイムシェアリングを想像すればいいだろう。 しかし、SilverthorneのSMTはインオーダー実行CPUの各パイプラインを スレッド毎に分割する事でSMTを実装している。 これは、いわば空間分割的なSMTだ。 たとえて言うなら、キャッシュと実行ユニットを共用したデュアルコアCPUである。

Net-Burstの場合 Silverthorneの場合
トレースキャッシュ L1命令キャッシュ
命令4
命令5
命令6
命令4
命令4
命令4
命令5
命令6
命令3
命令3
命令1
命令2
命令3
命令2
命令2
命令1
命令2
命令3
命令1
命令1
実行ユニットへ 実行ユニットへ
HT動作時にはNet-Burstでは3本のパイプラインを2つのスレッドが交互に分割するが、
Silverthorneはパイプライン毎に各スレッド専用とすることでSMTを実現する。
つまり、Silverthorneは一見すると実行ユニットとL1キャッシュを共用したデュアルコアのようにも見える。

(この図では同じ色が同一スレッドを意味している。)


注目すべきはSilverthorneはインオーダー実行である点である。 アウトオブオーダーの場合、パイプラインを2系統に分割する今回のSMT実装法だと本来持っている スレッド間の独立性が無駄に再検証される事になり、効率が悪いと思う。 (Net-Burstの場合は時分割的SMTなので、インオーダーのシステムでは同一スレッド内での依存関係が解消される度合いが低く、非効率となるハズ。 Net-Burstの場合は、実行ユニットを効率的に動かすためにアウトオブオーダー機構装備であることが本質的に必要と思われる。)

つまり、この方法はNet-Burst的な手法と比べるとメインメモリのレイテンシ隠蔽効果が劣るため絶対性能面では若干劣るが、 必ずしもアウトオブオーダー機構を必要とせず、インオーダーというより少ないトランジスタ数でもそれほど性能を落とさずにマルチスレッド対応できるハズである。 絶対性能基準ではNet-Burst的なSMTに負けるが、電力効率とかトランジスタ効率とかの面から見ればNet-Burstより優れていると当サイトでは予想する。 (ちなみに、SMT動作時の性能ブーストは30%とされるので、intelの発表通りならばNet-BurstのHTと同程度の効きと思われる。)

ところで、Silverthorneは2並列のインオーダー・スーパースカラCPUという事になっている。 が...発想を逆転させてみるとおもしろい事がわかる。

ここで、単純なスカラコアCPUのデュアルコアバージョンを考えてみよう。 前回書いたとおり、このような低性能コアのデュアルコアはPC用途では実力を発揮出来ないわけである。 ではどうすればいいのであろうか?

まず、このようなアーキテクチャではダメだからマルチコア化をあきらめて、 消費電力面・トランジスタ効率面でデメリットがあることを承知の上でアウトオブオーダー機構装備としたのが前回のネタで書いたIsaiah。 言わば壁を避けて回り道する水平思考だ。

ではここで、素のままのマルチコア化がダメならシングルスレッド性能をマルチコアでいかに上げるかを考えてみよう。 いわば、正攻法の垂直思考だ。 単純なスカラCPUのデュアルコアでシングルスレッド性能を上げるためにはどうしたらいいのであろうか?

もし当サイトがアーキテクトだったならば、まず2つのスカラCPUを超密結合にする事を考える。 同じスレッドの命令も2つのパイプラインに流せるようにする。 実行ユニットも共有させる。 実行ユニット共有のメリットは以前効率アップで省エネ?(実行ユニットの共用)で書いた事がある。

アウトオブオーダーは2つのパイプラインのスレッド並列化手法から考えて二度手間部分があるので実装しない。 デコーダーは原理的にはフルデコーダー2個が必要だけど、フルデコーダーが必要な命令が二つのスレッドで同時に出現する確率は 低いだろうから、トランジスタ効率を考えればショートデコーダー1個とフルデコーダー1個でもいいだろう。 実際、Meromの4命令並列でも(デコーダー部分がボトルネックとは言え) ショートデコーダー3個+フルデコーダー1個の構成でそれほど激しい性能低下は発生していないわけだしね。 フルデコーダーがバッティングした場合は優先順位の低いスレッドのパイプラインを遅延させればいいだけだからね。

インオーダー実行の場合は基本的には依存関係を解消しない訳だから、2スレッド動作の場合は単純なスカラCPUのデュアルコアにきわめて近い状態になる。 しかも、実行ユニットやデコーダーが共用されているわけだから、単純なデュアルコアよりもさらにトランジスタ効率が上がってダイを小さくできる。 絶対性能ではなく効率を重視する設計思想の場合は実に都合が良い設計と言えると思う。

Silverthorneの設計思想は、インオーダー型のスーパースカラCPUにマルチスレッド性能を付与するためにSMTを装備したもの... とトップダウン思考的に考えるのが一番常識的な発想だろう。 Power6的な高クロック・インオーダー設計で、かつSMT無しのCPUをまず最初に考えて、 そのマルチスレッド性能の低さをカバーする意味でSMTを追加したという設計手順である。

だけど、当サイトの眼ではスカラCPUのデュアルコアという 理論ピーク性能でのトランジスタ効率が良いアーキテクチャをまず考えて、 「スレッドが2つあるときはこれが一番効率的だけど、でもこれじゃシングルスレッド性能が出ない。 PC用途でシングルスレッド性能が出ないのはお話にならないから、 何とかデュアルコアCPUでシングルスレッド性能を上げる方法を考えなきゃ...」 とアーキテクトが考えた...と想像(妄想?)してみるのもおもしろい。

前回のコラムで「C7コアベースでもマルチコア化すればVistaが快適に動くだろうか? という点を一度真剣に考えてみて欲しい気がする。」 と書いたけれど、「じゃ、単純なスカラCPUのデュアルコアでも、それなりのシングルスレッド性能が出るように技術的に工夫してみましょ。」 というシナリオだってあり得る。これはこれで大きな矛盾はないシナリオのハズだからね。

いわばボトムアップ思考での性能向上であるが、真実はどうなのであろうか?  一介のドシロウト・アマチュアがプロ中のプロであるアーキテクトに会う機会はないが、もし会えたなら 発想の原点について聞いてみたい気がする。 異なるアプローチではあってもこの場合は最終的には同じ設計に落ち着くわけなのだが、 最初に考えたのがSMTを持たないインオーダー・スーパースカラのシングルコアCPUなのか、 単純なスカラCPUのデュアルコアなのか...

ともあれ、Silverthorneは「高クロックは無条件で悪というわけでない。」とか 「シングルコアCPUでもSMTを装備すればまだまだ実用的。」という当サイトの主張を裏付けてくれたとてもありがたいCPUであり、 当サイトの購入検討リスト入りを果たした。2)

Silverthorneには、低価格PC向けのDiamondvilleという派生品が予定されているそうで、 これが発売されたらおそらくは購入する羽目になるだろう。 Rockといい、Silverthorneといい、久しぶりにワクワクしてきたというわけだね。

というわけで、今回は短編。次回の更新は巻頭通りの理由により引っ越し作業が終わるまで更新ペースが鈍る事をご容赦いただきたい。



1)
ちなみに、現在の住居もデジタルデバイド地域で、光ファイバーは未だに開通していない。 当サイトがADSL接続なのは、やむを得ずである。 しかも、そのADSLも12Mbps契約なのに実測値は最大1.6Mbps、平均1.4Mbps程度。 ベストエフォートだから文句は言えないが、実効帯域だけでなくサービスの平等性の観点から見てもFTTHが数段上であることは言うまでもない。

2)
SilverthorneのパフォーマンスはDothan以上という記事によれば 「Silverthorne 1.86GHzのパフォーマンスをStealey 800MHzと較べた場合、シングルスレッド時には10%程度高く、 マルチスレッドでは最大40%も高くなる。」そうだ。 つまり、VistaでもWindows Vista Basicならば必要最小限の体感速度は得られそうであり、 セカンドマシン用としてWeb閲覧など軽負荷の用途ならそれなりに使えそうである。 (もっとも、BGAパッケージだからCPU直付けの専用マザーになりそうだけど。)