コンピュータアーキテクチャとは何でしょう? コンピュータアーキテクチャ。アプリとか、 何か人のやりたい何かをとってこようとします。 例えば スプレッドシート、ビデオゲームを遊ぶ、 音楽を再生する、そしてそれをどのように 物理にマップするか知りたい。 ここで物理とはどういう意味で使っているか? 物理とは、我々は粒子が存在し、 跳ね回って、相互作用し、光子も飛び跳ねている世界にいる。 そして我々はどうにかして人々のやりたい事を、 物理で出来る事に変換する。 そこで問題になる事の一つは、その変換は とても大きなギャップの間の物だという事です。 どうやってアプリケーションから直接に物理へ 行けるというのでしょう? あなたの回りには物理が世界中を跳ね回っている。 あなたは機械的なシステムも持っている。 そしてあるレベルの抽象化が無ければ、アプリケーションから直接物理に行くのは 極めて難しい。 今や、より広い意味で、コンピュータアーキテクチャが やろうとしている事は、抽象レイヤを実装レイヤに 追いつかせる事です。 それがこのギャップを橋渡しするのに 必要なのです。 で、我々はここにたくさんの異なったレイヤを 構築していく。 そしてどんどん抽象レイヤをより小さくしていく事で、 これらの問題の一部分を解決していき、 ここにある真ん中の物達は変更しなくて良いようにしていきます。ただ一つずつ、です。 物理やアプリケーションがちょっと変わったとしましょう。その時も 今までやってきた多くの仕事を いかすことができる つまりコンピュータアーキテクチャとは それらの階層を学習し、 どの様に物理的な事に折り合いをつけ 人々が求めるアプリケーションに変えていく事です ここで、以下の事を指摘しておきたいと思います。 自然界では、アプリケーションから物理に直接ジャンプするのは極めて困難ですが、 ちょっとは例もあります。 ここで実際に紹介したい例としては コンパスがあります。 コンパスは素晴らしい小さなデバイスで 物理を直接アプリケーションにつなげています。 しかしそれ以外にはあまり例はありません。 本はこの例に用いてOKと思いますが、 それ以外のほとんどのケースで人々は多くの抽象化レイヤーを構築している。 そしてここで指摘しておきたいもう一つのポイントとしては、製造技術を 効率的に使いたい、という事です。 つまり、もし物理が変化したら、 または、より小さなトランジスタに移ったら、または例えば シリコンからヒ化ガリウムに移ったら、その他なんらかの実装テクノロジが変化したら、 この一番下のレイヤが変わる。 しかしその時も、何年もの期間かけてこれまでやってきた たくさんの仕事は、再利用出来る。 では今日のコンピューティングシステムの抽象化レイヤーを 見てみましょう。 ここから始めます。物理。 我々は基礎には物理法則がある。粒子がどう相互作用するか。そして上にあがると、 デバイス。 デバイスとは何を意味してるのでしょう? トランジスタがあって、異なる種類のトランジスタを作れる。 MOSFET、BJT、別の種類のDET、そして回路を作り始め、 そこからさらに大きな回路を作り、そこからゲートを作る。 そしてゲートが、RTL、またはRegister Transfer Languageを作る。それが verilogでコーディングする物です。 そして我々がこのコースで対象とする所に入る。 それは異なる種類のアーキテクチャです。 つまり、マイクロアーキテクチャがあります。これが実行時に動くもので、チップの実際の実装を形作ります。 そしてその上に、命令セットアーキテクチャがあります。 それからある程度の移植性が得られます。 そしてオペレーティングシステムやVM、プログラム言語、 そしてアルゴリズムに辿り着きます。 とうとうアプリケーションプログラマが座っている アルゴリズムへと辿り着きました。 だからこのコース、コンピュータアーキテクチャでは、 この真ん中の3つのレイヤに集中したいと思います。 つまり、命令セットアーキテクチャ、これを私は時に大文字のAを使ってコンピュータアーキテクチャと呼びますが、 それからマイクロアーキテクチャ。これは時には コンピュータシステムの構成と呼ぶ人もいます。 そしてRegister Transfer Language。 ここでも抽象レイヤーの上と下に 少しづつオーバーラップします。 だから少しだけOSの問題とVMの問題についても 議論します。 そして技術とゲートがどうコンピューティングシステムに 影響を与えたのか議論します。 コンピュータアーキテクチャの重要なポイントとしては、絶えず変化している、という事です。 何故なら異なる制約と異なるアプリケーションが変化しているから。 人々は新しいアプリケーションを思いつく。 新しい方法や違ったアプリケーションを思いつく。 今私はスマートフォンが欲しい。 それは二十年前には無かった。 そしてこれが異なった要求を下に押し付けて、これらの異なった要求が 実際どうアーキテクチャを変更すべきか示唆する。 例えばもしあなたがたくさんの動画処理をしたければ、実際に あなたのコンピュータのアーキテクチャに影響を与えて、動画処理の為の特別な命令を 追加する。 同様に、技術的な制約が押し上げてきます。 トランジスタを小さくすればするほど、、、ここでより小さいを より早いと言いましょう。 でも配線は遅くなる。それは あなたのコンピュータアーキテクチャに影響を与える。 そして何度も、新しいテクノロジが 新しいアーキテクチャを可能にしてきた。 どう意味でしょうか? ある日突然トランジスタの大きな変化に遭遇し、 二倍の数のトランジスタが得られました。 今やアーキテクチャとマイクロアーキテクチャのうち、 それまで意味が無かった物が意味を持つようになります。何故なら たとえばもっとたくさんの計算を一つのチップで出来るようになるからです。 そして、かこが面白いところですが、コンピュータアーキテクチャは 真空で終わる訳では無い。 だからコンピュータアーキテクチャが この抽象レイヤのスタックの上や下にフィードバックを提供する。 それはフィードバックを提供し、それが実際の研究の方向性にも影響を与え、 そして将来の研究の方向性にも影響を与え、 そして実現可能な異なる種類のアプリケーションにも影響を与える。 これらは真空中で起きるのでは無い。 コンピュータアーキテクチャは、この抽象レイヤーの とても重要な場所に居座っている。 何故なら押し上げたり押し下げたり出来て、 与えられた物に対してただ働くのではない。 技術的な観点からすれば、ですが。 ただそれには二、三年はかかる。 ではこのクラスは何についての物か、もう少し話しましょう。しかしそれをちょっとだけ 歴史の観点を加えて話し、ここプリンストンとのつながりも 付け加えておきましょう。 我々がコンピュータについて語り始めたのは、 40年代後半から 50年代あたりでした。 これが実際のIAS、またはInstitute for Advanced Study Machine の写真です。それはInstitution of Advaned Studyの中に作られた。 それはこの教室から1.5マイル位離れた場所です。 それはジョン.フォン.ノイマンによって設計された。 そしてそれはちょっとだけここに洞察を与えた。 それは1952年にはじめてPrincetonに移動された。 実際は40年代後半から始まってたんですが、実際に動くようになるの二、三年かかった。 面白い事としては、この機械は 真空管で出来てました。 皆はこんにちだとトランジスタを考える。 トランジスタ以前は電球に見える小さなガラス管があり、 その中にはオンオフできるスイッチがありました。 今日のトランジスタとよく似たアイデアで、 今では使われなくなったガラス管と小さなトランスミッターによる 陰極線管が使われていました。 そしてその中には開いたり閉じたり出来るゲートが ありました。 つまり人々はトランジスタのずっと前から コンピュータを作っていたし、 コンピュータのアーキテクチャについても、 トランジスタのずっと前から考えていました。 さらに言うと、コンピュータアーキテクチャや この種の技術について、真空管よりも前ですら、考えていたのです。 電気工学的なシステムがありました。 良い例としては電話のシステムに もともとあった物です。 それは、これらのクールな電気工学的なスイッチを 持っていた。 古い回転式の電話を取って、 回転させて離す。チッチッチッチッチ それが実際にしてるのは、 信号を送る事で、それがリレーシステムの中の小さな機械的な腕を回して 人々は電気機械的なリレーからコンピュータを作りあげていた。 トランジスタと同じようなアイデアの 回したり変えたり出来るスイッチを手に入れた。 そしてそれ以前にすら、人々は機械的なシステムを作っていた。 例えば機械的な加算機がある。 そして今では、もちろん、トランジスタがある。 50年代にもコンピューティングがありました。もしそこから今日に一気に進むと、 コンピュータはとても違って見えるでしょう。 ここにある図は、知っての通り、こいつは 部屋の大きさがあった。 とても大きなテレビの規模の。人の大きさは この図の大きさです。 普通のサイズの部屋と言えますが、それでも 部屋のサイズです。 でもこんにちでは、たくさんの異なるアプリケーションがある。 そしてコンピューティングも違って見えます。 我々には、言わば小さなシステムのコンピューティングがある。 小さなセンサーネットワークがあり、ちっちゃなセンサーノードが 分散してる。 ファンシーなカメラもある。 スマートフォンも、モバイルオーディオプレイヤーやiPodsもある。 ラップトップもある。この私のこれのような。 自動運転の車もある。大きなサーバーもあり、 Xboxもある。今や様々な見た目のコンピューティングシステムがある。 この技術、コンピュータアーキテクチャの影響は とても、とても広い。 ルーターや自律無人飛行機といったものさえ目にします。 GPSがあります。これは今日では腕にまける位 小さなコンピュータで、あなたがどこにいるかを正確に教えてくれる。 E-books、タブレット、セットトップボックス、その他リストはどんどん続きます。 ここで見せたい事としては、コンピュータアーキテクチャはとても豊かな歴史を持っている、という事です。 学んでいる訳では無い。 人々はまだそこにいて、次の世代のコンピュータアーキテクチャの為の そして今日とも非常に関連が深い。 つまり我々は、すでに誰も気にしないような事を 学んでいるのではない。 人々はまだそこにいて、つぎの世代のコンピュータアーキテクチャに 辿り着く為に準備をしている。 人々は、いえ、あなたはかつて、より速いデスクトップコンピュータを望んでいた。 今日ではそれはそこまで重要では無くなったなもしれない。 代わりに人々が望むのは、より速い スマートフォン。 音声認識を有効化したい。 科学アプリケーションで、モデルを作り とても複雑で以前は出来なかったような健康システムを 望んでいる。 つまりそれはまだどんどん続いている。 今日ととても関連が深い。 そしてそれはとても、とても豊富な歴史を持っている。 このコースでも歴史について少しだけ話します。 主に技術の歴史を。 たまにコンピュータアーキテクチャの授業を教えると 歴史をもっと強調する人がいます。 このクラスでは歴史も軽く触れますが、より集中するのは技術的な 考察についてです。 これはヘネパタ、またはA Quantitative Approachからの図ですが このグラフが言おうとしている事は コンピュータアーキテクチャにとってとても基礎的な事で、 それが我々の産業をドライブしている要素でもあります。 ここで見ているのは、異なるプロセッサのデザインを 対数でプロットした物です。 これは10、100、1000。 これは対数グラフで、パフォーマンスと年に対するものです。これを見てみると、このプロットは おおむね直線に見えると思います。そして対数グラフで直線は パフォーマンスの指数的な増大ということです。 つまり、コンピューティングは指数的に速くなっていると見て取れます。 そしてこのことが、私たちの産業に起こっていることの原動力になっていて、 なぜコンピュータアーキテクチャがそれほど重要な理由にもなっています。 またここで言いたいのですが、この指数的な増大は2つのことから来ています。 コンピュータアーキテクトだけからではありません。ここに座り、 「我々が全部やった」と言えたらいいのですが。違います。無視できない割合は テクノロジーが改善されたことによるのです。 それの意味する所は、下のレイヤーの事であり、実装技術の事でもあります。 トランジスタ技術のような。 そしてそのうちの幾つかは、より良いコンピュータアーキテクチャから 得られた物です。 そしてここで本当に重要な点を指摘すると、 たとえどんどん良いトランジスタが得られても、 このグラフを見ると、これまでもいくつもの時代で あなたのトランジスタは増えた訳ですが、それらのトランジスタが必ずしも 指数的に速くなった訳では無い。 だからコンピュータアーキテクチャがやらなくてはいけない事は、 バケツいっぱいのトランジスタや、それがさらに何杯にもなった時に、 それらをどうより速いパフォーマンスに結びつけるか、その方法を探し出す事です。 そしてこれはしばしば ムーアの法則と言われている。 その言葉を聞いた事があるかもしれませんが、 それは、我々が挑戦してる事でもありますが、Mooreの、いやGordon Mooreは18ヶ月から二年ごとに、 同じお金で二倍のトランジスタを買えるようになる、 といいました。 それがオリジナルの発言です。 人々はちょっと変更して、今は皆さんのコンピュータは毎年二倍速くなる、 としています。 でもそれはGordon Mooreがもともと言った事とは違う。 彼は同じ金額で二倍のトランジスタが買える、と 言ったのです。 人々はたまにこれを、毎年チップに載ってるトランジスタが二倍になる、と 解釈した。 それは彼が言った事と一致してる訳では無いが、 十分近い近似ではあります。 そして私はここにグラフがありませんが、かつて、 コンピューティング全般の全体を通して見ると、 それはずーっとトランジスタベースの技術ではあるけれど、 さらに昔に戻ると、それ以外の技術をプロットする事になります。 真空管やリレーといった。 しかも、それらもこのグラフに良くフィットする。 ここを続けてここまで下がると、真空管が出てくる。 それもこの指数関数的に増える曲線に乗る。 OK。ではこの曲線にある2つの変曲点を見てみたいと 思います。 一つ目はここ。傾きが少し変わってるのが分かると 思います。 ここでは何が起きたでしょう? これが縮小命令セットコンピューター、いわゆるRISCの登場です。 だから最初のRISCの登場で ちょっと折れて上がってる。 もう一つ気付くのは、このグラフはここで少し倒れている。 そしてこの事について、このコースではたくさん話して行く事になる。何が起きて、 どうしてこうなったか? ここでは何が起きたでしょう? シーケンシャルなパフォーマンス、これは一つのプログラムのパフォーマンスで、 これは指数関数的に速くなった。 でも、これは誰に聞くかによる所で良く分からないけれど、 私は2005という数字を使うのが好きだけど、 2003から2007の間のどこかで、シーケンシャルプロセッサのパフォーマンスは 問題がではじめた。 しかしあなたのプロセッサの全体的なパフォーマンスは 今日まで連続的に増え続けている。 起こった事は、一つのチップにマルチコアの プロセッサを載せなくてはいけなくなったという事です。 そして希望する所としては、このグラフはマルチコアでここに連続的に 続く事です。もし我々のプログラムを効率的に並列化する方法を見つけ出せば、ですが。さもないと、 シーケンシャルなパフォーマンスは先細りしてますから。 何故なら、コンピュータ業界やコンピュータアーキテクチャにとっては、本当に困った事なのです、 突然コンピューターが速くなるのをやめて、誰も新しいコンピュータのチップを 買わなくなったら。