tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

「技術の未来互換性」 にインスパイアされたもの

元ネタ 技術の未来互換性 - レジデント初期研修用資料

今年発表されたマルチコアCPUは、一度に64個のスレッドを動かせるらしい。1CPU に 8コア。1コアあたり8スレッド同時実行で 64スレッド。

一度に計算できる量をここまで多くできると、メモリアクセスをほとんど限界に近いところまで、かなり有効に使うことができる。まだカタログスペックしか見たことがないけれど、そろそろ本当に「チューニングの要らない」世界が見えてきた気がする。

10年前の夢

メモリは常に不足していて、帯域は大きいものでも1066 MB/s ぐらいしかない狭い空間。だからマルチコアみたいなやりかたで性能を上げるのは難しくて、当時の技術では夢のまた夢。メモリを増設する間にもアプリケーションはどんどんメモリを使って、「デッドロック」を起こしたような、不自由な状態。スワップアウトみたいなボトルネックの診断は、「デバッガ」を駆使して論じる世界だから、計算性能も全然足りなかった。

要求される技術水準が高すぎて、自分たちコンピュータ屋は、ユーザの夢を馬鹿にしてた。技術がどんなに進歩したところで、マルチスレッド処理だけはどうやってもむりだろ、なんて。

クロックアップ処理は確実な性能向上が得られるけれど、メモリアクセスをFSBにあわせないといけない時点で、アクセス待ちから逃れられない。「マルチコアCPU」は、もしもそれが実現すれば、メモリ待ちのない計算が実現できるから、アメリカなんかではすごい予算を投じて、大規模な研究をしていたけれど、当時はまだ、実用に足る性能は上がってこなかった。

計算を早くする

CPUコアは、実行ユニットが命令キャッシュの内容を実行すると、1つの処理ができる。

自分たちが大学生だったころ、1CPU の性能は 1GHz を超えていたけど、1GHz という性能は、すでにメモリにとっては早すぎた。

CPU は、結構無理をしている部品。

CPUを構成するためのコアは、ちょっとした部品くらいの大きさがある。ヒートシンクが掛かっているから普段は見えないけれど、小さな回路の固まりが、すごい勢いで電気を流す。あれが回路に流れきらなかったらもちろんリークするし、熱量だって大きいから、放熱用のファンも結構頻繁に回る。

CPUの計算速度は、だから回路部分が上限を決めていて、今以上に大きくするのは難しい。改良すれば、もちろんもっと大きくなるんだろうけど、下手すると 100mm平方しかない回路の固まりが 20V とか、もしも実現したら相当危ない。

「ダイサイズを大きくする」やりかたを回避するために、技術者は2つに別れた。CPUを最初から設計し直して、「クロックをあげやすいつくりのCPU」を設計しなおすやりかたと、クロックスピードを上げる代わりに、コアをいっぱい並べて、1クロックでたくさんの命令を処理するやり方と。

理想的な、賢いやりかたと、力ずくの阿呆なやりかた。
阿呆が勝った。

Pentium 4

インテルという会社が作ったのは、クロックスピードを上げやすいCPU。

RDRAMの使用をチップセットに強要して、強力なメモリサブシステムを使ってクロックの立ち上げと立ち下げを利用する。R-TYPEの反射レーザーみたいな動き。メモリシステムがクロックに遅れる要素が一切無いから、「周波数」はどこまでも上がる。

たしか発売されたときから2GHzのクロック周波数が実現できていて、今では1秒間に3800000000周期、3.8GHz を達成しているはず。

マルチコアのCPUは、1秒間にせいぜい1000000000周期。高性能CPUの開発初期の時点で、すでに圧倒的なスピード差がついていたし、Pentium 4 の速度には、理論上上限が存在しないはずだから、未来はこちらにあると思ってた。

でもどういうわけだかPrescottは普及しなくて、日本でもせいぜい30モデルぐらいしか販売されていない。技術的にも進歩が無くて、発熱がすごくて、10年前の暖房器具と同程度。

技術的にはこっちのほうが画期的に見えたのに、なぜだかゴールにたどり着けなかった。

並べるやりかた

CPUのコアを2つに増やせば、1クロックの間に2回の計算ができる。4つ並べれば、同じ計算をするのに、要する時間は1/4 で済む。クロック数を上げられないから、1 クロックあたりの「計算速度」は増やせないけれど、マルチコアCPUはこんなやりかた。

マルチコアCPUというのは、専門の先生に言わせれば、今までのCPUの延長線上で考えてはいけない、全く違った思想の元に開発された機械なのだそうだけれど、発想はやっぱり素朴に見えた。

技術者の人たちは頑張って、3年ぐらい前の時点で、2コアのマルチコアCPUが普及し始めて、大学の計算センターでは、当時の最高峰で4スレッドのCPUが入ってた。

近くのデータセンターが 32スレッド入れたなんて話題になって、「すごく速いらしい」なんてサーバルームでうわさをしていたのが、今から2年ぐらい前。

どこで「うちゅうのほうそくがみだれる!」が発動したのか分からないけれど、今年は一気に64スレッド。ここに来てついに、1CPUあたり10Gflopsが見えるようになってきた。

ウサギと亀の話

過去との差別化を重視する、「ジャンプ」を思考する進歩のやりかたと、進歩の継続性を重視する、漸進的に進歩を積み重ねて、結果としてそれが、過去と決別した技術に結実するようなやりかたと。

スケーラビリティを実現するときに、真っ先に問題となる速さについては、Pentium 4 が最初から正解を出していたけれど、このCPUは発熱が大きかった。問題の本質はあくまでも速さだったから、発熱量についてはきっと、バージョンアップで画期的によくなるんだろうと思っていたけれど、変わらなかった。

64スレッドのマルチコアCPUが出てもなお、「最速」の座は相変わらずPentium 4なんだけれど、今はもう、「そこそこ早い」ことが当たり前になりつつあって、「そこそこ」と「すごく速い」との差は減った。Pentium 4 は発熱量の多さばかりが際だって、昔いたサーバルームには実物があったんだけれど、誰も使わなくなってしまった。

スケーラビリティという言葉が、何かヒントになるのかもしれない。

マルチコアCPUを選択した技術者の人たちは、2スレッドが4スレッド、4スレッドが32スレッドとゆっくりした歩みを続けてきたのに、気がついたら64スレッド。どこで飛躍があったのかわからないけれど、ずるずるとした、ゆっくりした歩みに見えたその進歩は、いつの間にか Pentium 4 を追い越していた。

当時最も正解に近そうだった技術は廃れて、素人目には頭の悪い、力ずくのやりかたは、そのまま5年力ずくで進み続けて、力ずくで「正解」をもぎ取ろうとしているように見える。

Pentium 4 の発熱量低減が、技術的に難しかったのかもしれない。あるいはまた、2スレッド、4スレッド、という、倍々ゲームで数字が増えていく「進歩」というのはすごく分かりやすくて、開発予算が付きやすいとか、ユーザに進歩を訴えやすいとか、技術の外側に、なにか勝因があったのかもしれない。

進歩のしかたが、何か「ジャンプ」を思わせるやりかたは、天井がすぐそこにあって、案外「次の一手」が見つけにくくて、ずるずる進むやりかた、改良する余地が見えやすくて、ずるずる進んだ先にあるものがよく見えるやりかたのほうが、どこかで「量が質に転化する」瞬間をむかえやすいのかもしれない。

乗っかるべき技術には、何か一般解みたいなものがつくれるんだろうか ?
(おしまい)