PentiumPROの二の舞?   

2004年3月29日




大学時代、試験期になるとマンガを読みに来る友人がいた。 試験勉強で疲れたので15分だけ息抜きさせて欲しいという。

で、15分のはずが3時間もマンガを読んでいくのであった。 ちなみに、普段はマンガをあまり読まない友人である。 これって、いわゆる現実逃避ってやつかな?と思ったりしたものだ。

で、今たるさんは期末で仕事の追い込み期なのであるが、 押入の中から古いマシンを引っ張り出して再度メインマシンとして使用すべく 整備をしている。もう、数年以上もホコリを被ったマシンである。

今の状態を自分自身で客観視してフッと気づいた。 「あっ、これも現実逃避だ!」ってね。 今回の内容はこの現実逃避を正当化すべく書かれたもの?(笑)かもしれない。 人のことは言えないよねぇ。

あっ、そうそう。今回の内容はデュアルCPU機ユーザーには心証の悪い内容が 数多く含まれているので、信奉者の方にはまず先に無礼をお詫びしておきます。

☆押入の中で過ごした日々   
以前CyrixIIIパソコンについて報告したが、最初は一時的な実験のつもりだった。 しかし、そのCyrixIIIマシンが我が家に定着しつつある。 Celeron300A@450MHzマシンのHDDを新品と交換してOS・アプリを入れ直すのが面倒と いうこともあるが、Web機としての使用がメインであるメインマシンでは CyrixIII-600MHzというCPUでそれなりに満足できてしまう というのが最大の理由なのである。

あとは、特に静音マシンとして組んだわけではないにもかかわらず、 CPUファンはファンレス放熱器で外部電源も静音系だから 結構静かになったのも気に入っている。 おかげさまで、寝る前に電源の切り忘れが増えたという欠点があるが...

もっとも、巻頭で述べた通り今週末は久々にシステムの入れ替えを行った。 メインマシンをCyrixIIIマシンから、別のマシンに入れ替える計画が 着々と進行中である。 とはいっても、べつにPrescottとかを買う訳ではない。 (Prescottは意識を失うに値するとは思えないので...) じつは更に昔のマシンへと先祖返りするのである。

そのマシンとはこれである。

復活したデュアルPenIIマシン
不遇の過去を持つマシンだが、テスト用に復活

思えばこのマシンは当家では悲運なマシンであった。 当家で最初(で最後)のデュアル機として多くを期待されて導入されたにも関わらず、 結局ご主人様に愛されない鬼っ子マシンとして人生の多くの期間を 押入の中で過ごしてきた暗い過去を持つマシンなのである。

Slot1デュアルCPUマシン... デュアルCPUという世間体のいい響きを持つマシンだが、 当家の動作環境ではその実力は評判倒れであった。

では、なぜ今こいつを引っ張り出すのかと言えば、それは マルチコアCPUに近い動作環境を再実感するためである。 (キャッシュ・スヌープの問題があるので完全には同じではないが...)

☆時代遅れ?の方針転換。   
今、x86系CPUアーキテクチャの世界が騒がしい。 intelが「高クロック主義から高スレッド並列主義へと梶を切った。」との 報道が各所でなされているからだ。

intelは基本的方針を定めると逡巡することなくその方向で突っ走る会社 であるが、その基本方針が間違っていたとなると急激に舵を切ってしまい、 旧来の方針は見向きもしないという性格があるようだ。 例えば過去にはRDRAMという先例がある。

ちなみに、今までクロック命と高クロック化に邁進してきたが、 今回はというと高スレッド数で勝負の方針と決定したようだ。

今まで、パソコンの世界での同時実行スレッドは1個、 マニア系のデュアルCPU機でも2個程度で スレッド至上というにはほど遠い現状であった。 しかし、SMT-マルチコアとなれば最低でも4スレッド動作である。 これでデュアル対応マザーを使用すれば最低8スレッド。 あっという間に高スレッド数並列実行マシンである。

パソコンもついにスパコンと同じく並列性を競う時代になったと言うことであろうか? (ただし、スパコンはスレッドレベルの並列性ではなく、主に データレベルの並列性を駆使している訳だが...)

もっとも、スパコン界ではCPUの並列度を競う時代が終焉を迎えつつある。 最先端科学のこの世界ではAmdahalの法則という障壁があり、 ショボイCPUはいくら束にしても並列化効率が低すぎて 使い物にならないという事が判明しつつある。 特に粒度の細かいアプリで典型的なのであるが、単一プロセッサ性能の高い ベクトルプロセッサ方式が見直されつつあるという事は以前 地球シミュレータネタで述べたとおりである。

LINPACKベンチマークの様に比較的キャッシュの効きの良い場合でも スカラパラレル機とは20%近い効率差があるわけだが、 粒度の細かい処理(例えば気象シミュレーション)の場合 パソコン用CPUを使用したスカラパラレル機は 理論ピーク性能の20〜30%の処理能力しか出ないのはザラである。 酷い場合は10%を切ってしまう事もあるそうだ。 (この場合、90%以上もの時間CPUはお仕事をサボってタバコをふかしているのである。)

つまり、カタログ性能と実効性能の差が少なく、ピーク演算性能を 維持したまま長時間全力で計算をすることができるという、 マラソンランナーとスプリンターの性質を併せ持つ特性が 地球シミュレータの世界一の演算能力の秘密なのである。 逆にスカラパラレル機は粒度が細かくデータ負荷が重い場合、 理論ピーク性能を長時間維持する事は難しい。

ちなみに、マック派期待の星であるバージニア工科大学のスーパーコンピュータ (通称Big Mac)で使用されているPowerPC970プロセッサは、 パソコン用CPUとしては珍しくベクトル演算(AltiVec)に対応している。 PCクラスタである事ばかりが注目されるBig Macであるが、高性能を出せた要因としては ベクトル演算機構AltiVecによりPC用プロセッサとしては 浮動小数点演算能力がかなり高いという影響が大きいのではないだろうか?

(家に7100/80AVという化石のようなマシンが1台あるキリで、 Macはほとんど使った事がないので、そんな身分でこんな事書くのもなんだけど。)

というわけで、今、パソコン界が高並列性の時代へと突入すると言うことは、 やはりパソコンはスパコンから数歩遅れた技術革新を歩んでいると考えれば いいのであろう。

☆マルチスレッドの行く末   
まぁ、それはさておき、 マルチスレッドをマルチコアCPUで実現する方針に対する、 たるさんの評価については以前述べた事がある。 それは下記のようなものである。

  1. スレッドが豊富にある用途(例えばサーバー)では、 この方針で正解と考えている。異論はない。
  2. スレッドが枯渇しがちな用途(例えばクライアントPC)では、 アプリ・OSが本当の意味でマルチスレッドに対応するまでは、 ほとんど高性能は出せないと考えている。

「WindowsXP(Pro版)といった最新OSはほとんどがマルチスレッド対応じゃないか!」 と突っ込みが入りそうだが、 ここでたるさんが考えている「対応」とは少し意味が違う。

例えば、たるさんの動作環境でマルチスレッド対応OSとして普段よく使っているのは Windows2000である。普段Webを見たりコラムを書いたりしているのは、 このOS上である場合が多い。

この、Windows2000であるが、一応「マルチスレッド対応OS」である。 しかしこのOS、放っておくとあまりマルチスレッドでは動いてくれない。 複数のアプリを同時に動作させるか、あるいはアプリがマルチスレッド対応でないと ほとんど効果が見られないのである。

Windows2000としては、「スレッドが複数来れば受け付けますよ。」という程度であり、 自分から複数のスレッドを積極的に発生させたりすることはあまり無い。 (アプリの動作とはいっても、実体はその一部はOSの動作時間である場合が 多いので、OS自体が常時積極的にスレッドを作り出さない限り 高速化には限りがあると思う。 アプリ自体の負荷がべらぼうに重いビデオ編集系アプリは別だけど...)

たるさんがWindows2000を愛用するのはマルチスレッドに対応しているからではない。 Windows9X系OSではメモリリソースがすぐに尽きてしまって、 まともに複数のアプリを起動できないからである。 (特にWindowsMeは本当に酷かった。ほとんど使い物にならない。)

と言うような余談はさておき、Windows2000の通常動作における マルチスレッド動作はどういうものであろうか?  例えばIEの動作はマルチスレッド対応だそうだが、 Web閲覧においてIEを使った場合で見てみよう。

動作環境であるが、デュアルCPUマザーは下駄を履かせてもCyrixIII未対応なので、 チップセットは違う。ただし、OSとメモリ容量は合わせてある。 PentiumII-233・2個分に相当するPentiumIIがあれば同一条件で比較できて 良かったのだが、手持ちCPUの関係で完全に同一条件にはできなかった。 この点はご容赦頂きたい。

あと、閲覧したのは秋葉ホットラインの今週の新製品のページだ。 このページは小さな画像が満載なのでマルチスレッドの評価には都合がよい。 ただし、このページはフラッシュの内容が毎回違うので、 フラッシュが入っていると同じCPUでも読み込み時間が毎回変わってしまう。 このためフラッシュはアンインストールしてある。

秋葉ホットラインの今週の新製品ページを PentiumII-233のデュアルCPUシステムで閲覧する。
左は初回アクセス、右はキャッシュ内の再読。
 
同じページを PentiumII-233のシングルCPUシステムで閲覧する。
左は初回アクセス、右はキャッシュ内の再読。
確かにデュアルCPUシステムの方が速い。
 
同じページをCyrixIII-600で閲覧する。
左は初回アクセス、右はキャッシュ内の再読。
ベンチマークで見るとCyrixIII-600はPentiumII-233デュアルより遅いが...
 

一見するとマルチでガンガン動いているように見えるかもしれないが、 最初の2目盛り分を除けばCPU使用率は60%程度である。 ちなみに、CPU使用率を計測するためのタスクマネージャが5〜10%ほど CPUパワーを喰うので、実質的CPU使用率はほぼ50%。つまり最初の2目盛り分の時間を 除けばほとんどシングルスレッド動作だ。 (Hyper-Threadingと違ってほんまもんのデュアルCPU構成だから、 よく言われるOSとの相性問題で低い訳でもないだろう。)

その下に同じマシンでCPUを1個引っこ抜いてシングル構成にした場合を示した。 初回読み込み時間はデュアルとほとんど変わらない。 ネットとの接続速度が律速になっているのだろうか?

しかし、キャッシュから再読する場合はデュアルシステムに比べ明らかに遅い。 ネットから読み込む場合と異なり、 この場合は確かにデュアルの効果はあるように見える。

が、しかし...

今まで使ってきたCyrixIII-600システムと比較してみよう。 キャッシュから読み込む場合ではほぼ互角。(わずかにCyrixIIIが負けているか?) だが、ネットから読み込む場合では70%の時間で済んでいる。

ネットから読み込む場合はネットの混み具合も考えなければならないから 有意差と言えるかどうかは難しいところだが、やり直してみても ほぼ同様の結果であるからそんなもんなんだろう。 (PentiumII-233ではNICとのやりとりで力不足が露呈したのであろうか?)

ちなみに、PentiumII-233デュアルシステムとCyrixIII-600システムの HDベンチ結果を示しておく。

システム 整数演算 浮動小数点演算
PentiumII-233デュアル 21316
21240
PentiumII-233シングル 10656 10616
CyrixIII-600 18284 7805


HDベンチの結果を見ると、CyrixIIIはPentiumIIデュアルと比べて整数演算では 10%ほど負け、浮動小数点では40%にも至らない。 jpg画像の展開を整数演算で行っていたとしたら、 10%低い性能でほぼ互角の表示時間なのだから、CyrixIIIシステムの僅差勝ちである。

そして、もし浮動小数点演算を使用しているとしたら、 これはもうデュアルPenIIシステムの完敗である。 (jpg画像の展開は整数演算を使う高速・低精度の方法と浮動小数点演算を使う 低速・高精度の方法があるが、IEがどちらを使っているかは寡聞にして知らない。 知っている方がいたら教えてください。)

このように、対応アプリを使用した場合は効果が出るので同一周波数の シングルとデュアルを比較すると当然有利な結果がでる。しかし、 だからといってデュアル対応のアプリでさえ、 ほぼ同一性能の単一CPUシステムを上回るとは限らない 事には注意が必要であろう。

では、未対応アプリでの動作状態はどうなのであろうか?

東大将棋4をPentiumIIデュアルシステムで プレイした場合。
一見するとマルチスレッドが有効に思えるが、 CPU使用率は明らかに50%を越えない。
4%分はCPU使用率計測のためのタスクマネージャ分だからである。

例えば、整数演算能力を極限まで酷使するアプリ、 東大将棋4で動作状況を見てみよう。 グラフはややこしく動いているので一見するとマルチで動いているように見えるが、 実体はCPU使用率計測のためのタスクマネージャ分が上乗せされているだけの事である。

ちなみに、実際にプレイしてみると、 デュアルCPUシステムとCyrixIIIシステムでは 明白にCyrixIIIシステムの方が強い。 (東大将棋4はCPUの演算能力に比例して 思考ルーティンを強化するように設定されているのかな?)

☆絶対優位な比較   
おもしろいのは、世の中のPC雑誌でデュアル企画の記事が出ると、 ほぼすべての記事で同一CPUのシングルとデュアルが比較されることだ。 これは、「絶対優位の比較」といって 比較する事自体がまるで意味のないものである。

なぜならば、このような比較ではデュアルCPUの1つがまるっきり動いていない状態で、 初めてシングルCPUシステムとほぼ同一性能となるわけで、 比較するまでもなくデュアル優位という結論しかでないことが 論理的に自明な比較だからだ。

公正な比較とは、例えば「同じ予算でPCを作った場合、どちらが高性能か?」 とか、「総CPUパワーが同一の場合、どちらが高性能か?」にすべきであろう。

なぜならば、「絶対優位な比較」でデュアルCPUシステムが有利という 評価が出たとしても、同一予算でより高性能なCPUを装備したシングルCPUシステムを 構築した方が、下記に示した極一部の用途以外では明らかに体感速度の速いマシンを 構築できるからである。これでは、比較の意味がない。

また、デュアルシステムの長所とは、別のタスクが動いているときでも もう一方のタスクの応答性が比較的良好なことだが、 この場合はHyper-Threadingでも十分な効果を得ることができると思う。

というわけで、 マルチスレッド対応アプリを使うか、あるいはプロのプログラマのように バックグラウンドジョブでコンパイルが動いているとか、 サーバーとして運用しているとか、 そういうコアなユーザー以外ではほとんど効果無しというのが デュアルシステムの偽らざる実情ではないだろうか? (デュアル機を運用している方で気分を害した方がいたらお詫びするが、 自分自身の運用経験ではそう思う。)

ちなみに、プロの先生方の間にも同様な意見の方がいるようである。 例えば、Transmeta社に低消費電力化の技術を伝授した、 某大学教授のインタビュー記事での事。 「私の使っているパソコンもデュアルプロセッサなんだけど、 やっぱり、使ってないですね、プロセッサ両方は。」と 超一流のプロでさえ一言でばっさり。

☆消極的マルチスレッド対応と積極的マルチスレッド対応   
以前、 「クライアント用マルチコアの憂鬱」 というコラムを書いてたるさんの意見を 書いたことがあったのだけど、現状のマルチスレッド対応OSというのは 「マルチスレッド動作に対応していますよ。」というだけで、 常時積極的にマルチスレッド動作を引き出すようにはできていない。

しかし、たるさんの意見であるが、マルチコアが高性能を出すためには 常時マルチスレッド動作する事が必須なのだと思う。 Windows2000はOS自体もマルチスレッド動作する場合が確かにゼロではないのだけれど、 「常時」というところがミソなので完全に失格なのである。

それは、マルチコアCPUはその原理上シングルスレッド性能を 犠牲にしてしまうからだ。 この場合、少量のシングルスレッド動作が混入するだけで 総合性能は大きく落ちてしまう。

余談だが、この点ではHyper-Threadingは優れている。 シングルスレッド性能を犠牲にすることがほとんど無いからである。 マルチスレッドに批判的なたるさんがHyper-Threadingを例外的に あまり批判しないのは、Hyper-Threadingのこの優れた性質のためである。

だから、マルチコアCPUの潜在能力を引き出すためにはハードウエアの改良 だけではダメなのだと思う。いわば 「積極的にマルチスレッド動作を引き出す」積極的マルチスレッド対応OS無しには その能力は宝の持ち腐れとなってしまうだろう。 (きっと、ベンチマークだけは完全マルチスレッド対応になって、 数値だけは良くなるのであろうが...)

残念ながら、たるさん手持ちのWindoes2000はその意味では全くの 力不足であり、マルチコアCPUが出現してもたぶん高性能化はしない。 対応アプリの動作しか高速化しないから、ワープロや 今まで買った非対応ゲームでは潜在能力がまったく発揮できないからである。

その意味では、マルチコアCPUの能力を生かすも殺すも Microsoft次第という事になる。 intel自身がいくらがんばったところで、次世代OSが「積極的」 マルチスレッド対応に移行しなければ、一方のコアが遊びまくるおサボり系CPUとして マニアに酷評される運命を背負っているのではないだろうか?

☆不運な異端児PentiumPROという先例   
例えばこれにはちゃんと先例がある。 過去の先例としてもっともわかりやすいのは「PentiumPROの酷評ぶり」である。

思えばPentiumPROと言うのは不運なCPUである。 32bitコードに特化されてチューニングされていたため、当時の主流であった Windows95(一応32bit-OSを標榜されているが、 実際には16bitコードを多く含む)では実力を発揮できなかった。

しかし、これはOSの32bit化の時期を読み違えたのが原因であり、 2次キャッシュのマウント方法を除けば CPUの設計思想に基本的な誤謬は無かったと考えている。

それが証拠に、その後のPentiumIIはPentiumPROのアーキテクチャを 16bitコード向けに再チューンし、低コスト化のため2次キャッシュを 外付けのハーフスピード品にデチューンしたものである。

内部のアーキテクチャに関しては、PentiumPROの酷評ぶりにも関わらず、 設計思想の根本的見直しは行われなかった。 そして、それにも関わらずPentiumIIは 対6X86MX戦にも対K6-2戦にも最終的にはちゃんと勝利している。

PentiumIIの基礎をなすP6アーキテクチャには今でもマニア層の支持者が多い。 特にTualatinコアのPentiumIIIはintel製CPUとしてはたぶんマニア層の支持が 一番高いのでは?と思える位である。1)

しかるにPentiumII〜IIIと続くP6アーキテクチャの元祖であるPentiumPROの評価が このように低いのは、個人的にはなにか矛盾している気がするのであるが...

まっ、余談はともかく、 このようにCPUに罪はなくても、対応OSの出現時期を読み誤ると ダメCPUの烙印を押されてしまうケースはままあるのである。 そしてこの場合、後日対応OSが主流になっても一度貼られたレッテルは解消せず、 不遇の生涯を送る羽目になる。 (今日でもPentiumPROの評価は不当に低い。)

では、翻って高マルチスレッド対応ののマルチコアCPUたちを見てみよう。 これらのCPUが高性能を発揮できるのは、あくまでスレッドが 常時多数存在する場合のみである。 現状のOSでは対応アプリを使用しない限りそのような状況は望み薄だ。

つまり、これらのCPUが実際に発売される時期までにOSの「積極的な」 マルチスレッド対応を済ませておく必要がある。

もし、「積極的な」マルチスレッド対応が間に合わなければ、マルチコアCPUは 「期待はずれの性能しかでない見かけ倒しの製品」として、 最悪のレッテルを貼られてしまう可能性が高い。 しかし、このレッテルを貼られるか貼られないかの死命はintel自身ではなく、 最大シェアOS&最大シェアOfficeアプリ企業、 すなわちMicrosoftが握っているのである。

intelがいくらがんばってマルチスレッド性能を高めたところで、 OSが「消極的な」マルチスレッド対応のままでは その潜在能力を発揮できる機会はマルチスレッド対応アプリ動作時 だけになってしまう。 自社ではなく他社に製品の価値を握られた状態になってしまうのである。

これでは市場支配力も無くなるし、政治的駆け引きの場では連戦連敗になる事は 間違いないだろう。 また、ユーザー評価もOSの対応次第、つまり他力本願になってしまうのである。 (64bit系命令セットの件でのintelの地位低下は案外このようなところから 来ているのかもしれない。)

要するに、クライアント用マルチコアCPUの命運を握っているのは、 intelではなくMicrosoftなのだと思う。

16bitコードを多く含むOSが中心の時代に出現した32bit特化CPU「PentiumPRO」の悲運。 この悲劇のCPUと、今後出現するマルチコアCPUの姿がだぶって見えるのは、 うがちすぎであろうか?



1)
ちなみに、Net-Burstはマニア層には非常に評判が悪い。

一時期「クロック神話」というのが話題になったが、マニア層では「クロック神話」 どころか、その反動で「逆クロック神話」があるみたいだ。 この世界では高クロック力技系CPUはダメCPUとして魔女狩りにあうのである。

たるさん自身は高クロック・高IPC同等派で、 高クロック系CPUと高IPC系CPUの評価は互角なのだけど、 そんなたるさんでさえintel教信者と誤解されてしまうほど 逆クロック神話はマニア層に根強い。

パソコン好きの話を聞いていると、 「クロック神話なんで今時本当にあるの?」なんて思えてしまうのである。

−補足−
最初の表現では、Windows95があたかも完全に16bit-OSのように読めてしまうことに 気づき、一部表現を訂正。 気づいたときには「ご指摘メール殺到か?」と思ったのだが、 幸いにしてメールボックスにはご指摘メールは無かった。 当サイトの読者は紳士が多いらしく、 行間から本人の意図するところをくみ取っていただけたらしい。

本人の意図するところは「32bit-OSを標榜しておきながら、 内部に16bitコードをたくさん含んでいるためPentiumPROでは動作が遅かった。」と 言いたかった訳である。