ボトルネックに投資せよ。   

2008年6月3日



☆ようやく引っ越し完了。ふぅ。   
さてさて、引っ越しもようやく終わり一息ついている。

もっとも、新居はまだ段ボールの山だらけ。 とても人間の住みかとは言えない状態である。 これを片付けるにはかなりの月日が必要だろうけど、 ワンルームの寮にこれだけの荷物がよく収まっていたなと我ながら思う。

数回の週末で荷物の運搬をすべて行うという計画は、今思えば相当に甘かった。 平日の荷物運びが難しいという事情があるにせよ、結局1ヶ月半以上かかったんだよね。

ともあれ、日常的に使用するメインマシンだけはまともに動くようにして、 メールやWeb閲覧程度はできるようにした。 とりあえず、Webサイトの更新位はできるようにしないとね。

固定電話の接続は立ち会いが必要なので、予定が遅れに遅れてネット接続できるようになったのはつい最近。 さすがに携帯では能力不足だし、最後の数週間はネットを見るためだけに寮に戻るという変則的な生活を送っていたわけだ。

だが、新居のネット環境はというと田舎なので未だにADSLだが、それでも速度は少しアップして約3.5Mbpsとなった。 以前の寮生活では1.4〜1.6Mbpsだったので約2倍の速度である。 (寮と違って新居のある地域は将来的にFTTH開通予定ありとのこと。単なるリップサーブスかもしれないけど、期待しておりますぞ!)

ちなみに、1.4Mbpsと3.5Mbpsの速度差だが、数値上は2倍だけど、体感上は「なんとなく速くなったかな?」という程度。 接続速度が2倍になっても前回紹介したローエンドVistaマシンは十分な性能を発揮している。 今やこのローエンドマシンは当サイトの実質的なメインマシンとなっており、 ローエンド・シングルコアCPUが力不足になるには、やはり最低でもFTTHで接続する必要がありそうだ。

☆リスクを取らずにパイを拡大させるには?
さて、前回、前々回と最新CPUについてワッチしてきたわけだが、 CPUマニア的には最近のCPUは開発方針を読みにくくなっているように思う。 昔は「CPUを高性能にするには、こうするべきだ!」という主張があったように思うのだが、 最近は「とりあえず手を付けられるものから...」という感覚のような気がしてならない。

「やるべき事をやる。そのために工夫する。」という開発方針の維持が難しくなってきて、 「やれることからやる。」という、言わばニーズとシーズの乖離が大きくなってきているのではないだろうか? 

また、開発リスクをとらなくなってきているのも感じている。 「虎穴にいらずんば虎児を得ず。」的なチャレンジ精神はあまり感じられない。 いや、チャレンジ精神を持っている人はいるのだが、 そういう信念のあるタイプの人材が現場からいなくなって、 進捗管理型のプロジェクトで漸近改良的製品を小改良の積み上げで作っているような気もする。

典型的なのはPC市場での単純なマルチコア化の進行である。 マルチコアは原理的にダメという訳ではないので、サーバー用途などでマルチコア化が進行するのは問題ない。 しかし、PC用途でクアッドコアやオクタコアが市場ニーズに合っているとまさか本気で考えているのだろうか???

単純なマルチコア化は開発リスクが最小である。 2コアを4コアにしろと言われれば新コアの開発よりは数倍楽であろう。 確かに開発リスク管理という意味では正しい選択かもしれない。

しかし、サーバー用途とは異なり、PC用途では効果も最小である。 正直な感想を率直に述べさせていただくと、 「作れる物をまず先に作って、ニーズが無ければユーザーのニーズをそちらに誘導すればよい...」 みたいな、安易な感覚すら感じるのである。

なぜそんなことになってしまったのだろうか?

非PC用途では結構おもしろいCPUが出てきているのだから、 これはPC用途におけるニーズの特殊性を示すものだと思う。 おそらくPC用CPUの必要性能が非PC市場のトレンドと乖離しかかっており、 また、非PC市場の方がPC市場よりも今後の市場規模拡大が見込めるのが原因ではないだろうか?

ドッグイヤーという言葉でわかるとおり半導体産業は他産業よりも進歩が早い。 つまり、ニーズが一定規模で停滞してしまうと、自身の生産能力拡大によって勝手に自爆モードに突入してしまう。 ハイテクとは言っても、いつも価格下落圧力と市場拡大のどちらが強いかの自転車操業なのだ。

そんな中でPC用途でニーズに合う製品を開発するのが困難になったらどうするのだろうか?  具体的に言うとコア内部の性能アップが停滞している点だ。 PC用途が特殊だとするならば、それに向かった開発は投資効率の面で非効率的だろう。

現実的に経営者として打つべき打開策は3つあると思う。

  1. それでもリスクをとってコア性能を上げる開発をする。
  2. 新規市場を開拓する。
  3. 他業界の既存市場を奪う。
1.は当サイトの求める方向性。 しかも正攻法である。だが根性論では物事は解決しないかもしれない。

それが社会的に正当であるかどうかを別とすれば、ビジネスの目的は「利益追求」であり技術革新自体は決して目的ではない。 技術革新はあくまで利益を生むための手段にすぎないのだ。 つまり、利益を生み出さない技術革新は、ビジネスサイドから見れば革新でも何でもなく、単なるリスク要因に過ぎない。

利益を生み出しにくい方向性の技術革新が必要だが、調査したところ実はそれがビジネス的にはコントロールできないリスク要因に過ぎないとすれば、 残念ながらこの方向での解決は期待できないと思う。リスクは取りたくないのが半導体業界の本音のようだからね。

2.はAtomの流れで、ローエンドCPUのさらに下に新規市場を開拓しようという考え方。 (もっとも、Atomの場合は組み込み向け市場を奪うという3.の方針も含まれるけど。)

3.はFusionの流れで、GPU市場という既存市場を取り込んでしまおうという考え方。

当サイト的には2.はかなり期待できる市場が発掘できると思っている。

実はPC需要にはWeb閲覧やメールができれば十分という用途が結構大きく存在して、 この手の用途ならば現行のCPUは最低価格帯のCPUでも十分な性能を持っている。 しかし、そんな需要に価格で応えようというx86-CPUが無かっただけの話である。

確かに先進国ではこの需要は既存の高性能CPUと競合してパンドラの箱を開けてしまうのかもしれない。 だが、中国やインドに代表される新興市場では大きな需要が期待できる。 実際、中国市場ではVIAのプロセッサが意外に大きな市場を形成していると聞くしね。

それに、ローエンドマシンのさらに下に発掘されるだろう超低価格機は 既存市場を喰う以上に新規市場を発展させ、 トータルでは市場拡大につながる可能性は高いと思う。

携帯電話がよい例だろう。 携帯電話は、それを作る部品単価が毎年激烈に低下していくが、 それ以上に出荷量が伸びることでトータルでは部品市場を拡大してきた。 これをコンピュータに当てはめれば、単価が下がってもそれ以上に新規市場が拡大すれば CPU市場はトータルでは拡大し、ビジネス的には問題ない事になる。

「ローエンドのさらに下なんて、所詮はセカンドマシン需要だけだよ。」という意見もあるけれど、 何が何でも最高性能CPUでなければダメだというのはPCマニアの悪い癖だと思う。 回転寿司屋で「トロは海外産冷凍物なんて論外! 大間産のクロマグロでないと!」と言っているのと同じじゃないかな? 

確かに大間のクロマグロは旨いけれど、回転寿司屋の価格帯では食べられない。 そういうこだわりのある人も一部にはいるだろうけれど、そういう人は銀座の高級店にでもどうぞ、という感じだ。 味にそれほどこだわりのない人ならば冷凍物のトロでも十分に旨いと思っているハズであり、 だからこそ回転寿司屋が商売として成り立っている。 つまり、これはPC市場でも同じなのだ。

また、2.の方針は最終的にはCPU内蔵のオールインワン・チップとDRAM という2種類のチップでPCが構成できるまでは、こちらの方向も進んでいくと思う。 オンチップに統合されるのはGPUだけには留まらないハズで、最終的には統合できる物は何でも飲み込んでいくと思う。 (DRAMはCPUとは半導体製造工程が全然違うので、さすがにこれは統合できないと思うけど。)

歴史的に見れば明らかだろう。x86-CPUは386から486への進化でコプロセッサを飲み込んだ。 次にはメモリコントローラが飲み込まれ、近い将来にはGPUが飲み込まれる。 それでもムーアの法則が有効である限り、いずれトランジスタの埋め草が足らなくなる。 シリコンチップは常に飲み込む対象を探しているハイテク業界のブラックホールなのだ。

「サウスブリッジなんかは規格や需要の変化に細かく対応する必要があるのでCPUと同じチップには組めない。」という意見もあるが、 たしかに短期的にはその意見は正しいが、長期的に見ればそれは強固な理由付けにはならないというのが当サイトの意見。 チップに組み込めるトランジスタが余るようになるのは時間の問題なので、 その際には効率が多少落ちても「汎用度の高い構成+マイクロプログラム化」でしのげると考えている。 (少々の規格変更はマイクロプログラムの変更である程度は対応可能。)

なんですか? そんな事をしたら電力効率が悪くなる?

いやいや、確かにチップ内の電力効率は悪くなるけれど、 チップ間アクセスの消費エネルギーがチップ内アクセスの消費エネルギーで 済むようになるので、これで十分キャンセルできると思いますけどね。 汎用度の高い回路構成によりチップ内の消費電力が増えても、チップ間アクセスがDRAM以外無くなる事で システム全体では十分におつりが来ると思いますが...シロウト考えかもしれませんが!?

ワンチップ化というのは消費電力面から見ても非常に魅力的な概念であり、 また地球温暖化対策が必要なこともあって時代の流れは省エネルギーなチップへと向かっている。 ワンチップ化が時代のトレンドに沿っているとすれば、 DRAMのようにオンチップ統合そのものが技術的に困難な場合を除き、他分野の既存市場を ブラックホールのように何でも飲み込んでいくのがムーアの法則の自然な流れだと思うわけだ。

と言うわけで、要するにPC用CPUの市場ニーズがもはや時代のトレンドと乖離してしまったために、 新規であろうと既存であろうとトレンドに沿った別の市場を奪わなければ (市場拡大追従的に)やっていけない状況になってきているのではないのだろうか?  それがPC需要とはちょっと離れた近年のCPUの開発方向性の原因ではないかと推測しているわけだ。

☆負のスパイラル。   
と言うわけで、CPUコアの新規開発は主戦場から外れてしまったので、 ILPウオールとの合併症で開発ペースは鈍っている。 「ILPウオールで新規CPUコアの開発が難しい&市場ニーズとも乖離→優秀な開発人員を別方面へ転戦→ CPUコア開発でのスケジュール遅延発生→さらに開発の困難度増大...」 といった負のスパイラルに入っているのではないだろうか?

というわけで、しばらくはCPUコア的な改革は停滞するような気がする。 intelはデコーダーの改革がさらに1世代遅延するようだし、 AMDの新CPUコアも遅延しているので、PC用途には不向きなサーバー用マルチコアをPC用にも転戦させざるを得なくなっている。

既存CPUの改良版ではなく全くの新設計のコアはx86系では、今しばらく見られそうにない。 はぁ〜(と、深くため息。)

当サイトがCPUを眺めて楽しむ上で一番興味深く見守っているのは、根幹部分の設計思想だ。 もっとかっこよく言うなら、アーキテクトの「夢とロマン」である。

今までのCPUには各種の設計思想がにじみ出ていておもしろかった。 特にCrusoeなんかは(それが正しい設計思想かどうかは別として)ある種信念の固まりみたいに感じたものである。 当サイトはCrusoe指名でノートPCを購入してしまった位で、正直言うとあれは性能面から見れば正しい判断ではなかったが、 趣味として納得の上なのでなんら後悔はしてない。

しかし、CPUコアをワッチする楽しみが今しばらく無いとすれば... そんなわけで、今回は当サイトならではの設計思想の評価基準を考えてみたいと思う。

☆ボトルネックに投資せよ。   
設計思想の評価基準にはいくつかあるけれど、当サイトがそれを評価する基準には共通点がある。 頭のよい方ならばもうお気づきかと思うけれど、 それは「ボトルネックに投資しているか?」という極めてシンプルな考え方である。 コンピュータの総合性能は各性能要素の平均値で決まるのではなく、 ボトルネック部分の性能でほぼ決まってしまうというのが当サイトの信条だからである。 つまり、当サイト流の解釈ではコンピュータの総合性能とは最も低い性能部分の性能の事である。

そんなのは基本中の基本...とお考えの方へ。

確かに基本中の基本であるのは確かだ。 しかし、設計思想としては当たり前に思えても、「では、どこがボトルネックなのか?」という部分で 全然考え方が違ったりするので、基本中の基本と言えども結論が180度違うことはよくある。 基本は誰でも理解できる概念としても中身は意外に高度な判断が必要で、決してバカにはできないのだ。

たとえばPC用CPUでマルチコアを当サイトがあまり評価しないのは、 コア数がPC用途での性能ボトルネックになっていないからである。 コア数2倍で性能2倍...とまでは行かなくても、コア数2倍で性能8割増しというソフトが 秋葉原でドッサリ購入できるようになれば、当サイトはいつでもお詫びの上で前言を撤回する用意がある。

しかし、喜んで良いのか悲しんで良いのか、現実問題としてはそんな時代は当初の想定以上に遠のいている。 (この分では、当サイトの意見は少なくともあと2〜3年は撤回する必要は無いだろうなぁ。) ソフトウエアの開発はハードウエア以上にハードルが高いようだというのが当サイトの印象だ。 と言うか...マルチコアはそもそも並列性抽出のプロセスをスレッド並列性という形でソフト側に投げているわけだから、 ソフト開発のハードルが高いのは当然だ。

余談だが、PC用途で成功したVLIWプロセッサが無いのも、 並列性抽出作業をソフトウエアに投げているからだと思う。 その意味では、オクタコアのような過大なマルチコア化は、 いずれはVLIWのようにPC用途では一時のあだ花に終わる可能性すらあると考えている。

また、当サイトがスパコンでB/F比が高い用途においてはベクトル機を評価するのも、 このアーキテクチャがメモリのバンド幅というボトルネックに投資しているからだ。 だから、この分野でバンド幅を増やさないで理論ピーク性能を上げると、性能は上がらずに効率が下がるだけなのである。 (つまり、ハードウエアのB/F比が下がるとベクトル機の魅力は失われる。最近はちょっと低下気味なので頑張って高めてくださいな。)

ちなみに、そんなマシンは今のところこの世に存在しないのでネタにしたことがないが、 バンド幅がベクトル機と同レベルのスカラ機というマシンがもしこの世に存在したならば、おそらくそれでも高性能を発揮できるだろう。 当サイトがGPGPUに対して比較的好意的なのも同様な理由による。 (GPGPUの理論ピーク性能がCPUより高いのは、当サイトの眼ではどちらかというと二次的なメリットである。 GPGPUがCPUよりも科学技術計算向きなのは、理論ピーク性能がCPUより高いメリットよりも、 むしろバンド幅がCPUより大きいメリットが重要だと思う。) しかし、低B/F比のマシンを流体分野で使って問題なしという意見にはまったく同意できない。1) そういうマシンはボトルネックに投資していないからである。

また、当サイトがMerom予想でデカップルド・アーキテクチャ採用説を掲載して笑いものになり、 それでも懲りずにNehalem予想でまたもデカップルド・アーキテクチャ採用説を掲載したのも、 「ボトルネックに投資せよ。」という考え方からである。 つまり、x86-CPUのボトルネックがこの部分にあると考えたからである。

当サイトがデカップルド・アーキテクチャを推すのは、 それがデコーダーの発熱を抑制できるからだ。 また、可変長命令の並列デコード問題もキャッシュヒットする限りは回避できる。 現段階ではトランジスタ効率が悪いという欠点があるが、 Fusion系の技術が進歩すればある程度はカバーできるだろうし、 なにより技術革新の余地が残されている数少ない分野であろう。

現代x86-CPUはすべからく内部RISC構造なので、 実際に実行される命令とx86-ISAには乖離がある。 Core MAなどは「もはや内部RISCプロセッサではない。」と表現しているが、 これは設計がややCISC寄りというだけで、内部RISC構造を根本的に捨てた訳ではないだろう。 (でなければμOPs-Fusion系の技術はそもそも適用できない。) その意味で、x86命令を扱う部分と内部RISC命令を扱う部分の間にキャッシュを入れるのは メモリ階層から見ても自然な流れであると思う。2)

実際にはトレースキャッシュはキャッシュミス時のペナルティーが大きくて、なおかつ、 容量効率が低いために投入トランジスタ数の割にヒット率が低く、 12K-μOPsの容量で通常型キャッシュ8〜16KB相当でしかないわけだけど、 技術革新によってこの問題さえ回避できれば、 いずれデカップルド・アーキテクチャは復活すると当サイトでは考えている。

☆ソフトウエアに投資せよ。   
ん...すると、マルチコアがPC用途で実用的になるためには、 ソフトウエア開発に投資するのが一番重要なのかな?

比較的小さなコアを一度上手く設計してしまえば、 マルチコアのコア数をムーアの法則に従って増やしていくことは比較的容易だ。 CPUコアを開発するよりもずっと楽して(見かけ上の)性能を高めることができる。

これを実際の性能向上に結びつけるにはソフトの対応が必須だ。 すると、マルチコアCPUを売れるようにするためにはコア設計よりもむしろソフトウエア開発に投資すればよいことになる。

もちろん、並列化ソフトの開発はいろいろな意味でものすごくハードルが高い。 かのパターソン先生もマルチコア最大の障壁はソフトの並列化対応だと言っているくらいだ。 ちょっとやそっとで超えられる壁ではないのは明白だ。 パターソン先生流に言えばTLP(スレッド・レベル・パラレリズム)ウオールと言ったところかな?

しかし、エンコードなどでは確かにマルチコアで高性能が発揮出来るのだから、 困難とは言え原理的には不可能な話ではないだろう。

このまま放っておいたら、コア数が増えるに従ってマルチコアは「高性能なふり」を演じ続けなくてはならない。 一般ユーザーだってバカではないのだから、コア数が増えて実性能との乖離が大きくなれば、 いつかは「何かおかしい。」と気がつくだろう。 そして、マルチコアは売れなくなる。

そうなる前に手を打つとすれば、マルチコア版の「ボトルネックに投資せよ。」は 「ソフトウエア開発に投資せよ。」である。

要するに、マルチコアは命令レベルでハードウエアが抽出していた並列性を スレッドレベルの並列性で代替して高速化しようというのだから、 ハードウエアのアーキテクトが命令レベルで担当していた並列性抽出回路を プログラマがスレッドレベルで肩代わりするわけだ。

これは、ハードウエア的に一番困難なILPウオール解消という作業を、 ソフトウエア的に一番困難なソフトの並列処理対応という作業にぶん投げている、 いわばババ抜きみたいなやりとりである。

ババ抜きではババは引いた方が負けだけど、 この勝負は誰かがババを解消しない限り問題は解決しない。 今後のPCの将来をマルチコアが支えるとするならば、ババを押しつけ合っている場合ではないのだ。

というわけで、もしマルチコアが今後のトレンドだとするならば、 キャッシュ階層とか、コア間のデータアクセス方式とか、 真のマルチコアなのか、なんちゃってマルチコアなのか、 などというハードウエア上の問題点の論戦は、当サイトに言わせれば枝葉末節の議論となる。

マルチコア最大の議論点はソフトウエアにどう対応させるか? であるべきであり、またハードウエア側でサポートする事があるとすれば、 枝葉末節の議論よりも、むしろソフトウエア開発の困難をいかに和らげる事ができるマルチコア構成か? という点が最も重要となるだろう。

マルチスレッド対応ソフトのサポート設計こそが「ボトルネックに投資せよ。」という 当サイト流の設計思想から見たマルチコア・アーキテクチャ開発のキモなのだ。



1)
JAXAのHPCはスカラ機だが、次世代機ではスカラ機ながらB/F比が1にアップされた。 JAXAでの用途は典型的な流体分野がメインだから、B/F比がまだ足りないとしても、 用途を考えれば方向性としてはこれはまったく妥当な判断だと思う。 富士通はもうベクトル機を作っていないのだから、 現状できる対応の範囲内ではベストを尽くしたと言えるかもしれない。 JAXAの方々にはちょっと失礼な話なのでお詫びしながら書くけれど、 正直な話、用途を考えれば現行機が正しい選択とは思えない。しかし、 次世代機は少なくとも現行機よりはずっと良い成果を出せるだろう。

2)
「実行ユニットに近いほど高速低容量、遠いほど低速大容量。」 「時代の進歩とともに高階層化」というメモリ階層の基本原則を考えれば、 NehalemでLSDの容量が28μOPsと小さいのも定性的には妥当なのかもしれない。 なぜならば、LSDのバッファは通常の1次キャッシュよりも内部階層に相当するからである。 当サイトはLSDよりもずっと大容量のトレースキャッシュ採用説を掲載したわけだけど、 無理して大容量化するよりは多段トレースキャッシュ化する方が正しい方向性の可能性もある。

6/13 誤記訂正
スレッドの頭文字はTだから、SLPじゃなくてTLPだな。たるさん汗顔の至り。