イベント / EVENT

平成28年度 第2回 Q&A

第2回 2016年 8月25日(木)

コンピュータはどうやって動くのか?
五島 正裕 (国立情報学研究所 アーキテクチャ科学研究系 教授)

講演当日に頂いたご質問への回答(全11件)

※回答が可能な質問のみ掲載しています。

コンピュータの仕組みについて

リレーでコンピューターは作られますか。

できます。ただし、現在の社会で実用性のあるものを作るのは極めて困難です。たとえば、リレーが1個10円だとしても、10万個使うと100万円になってしまいます。一方、現在の半導体トランジスタは、1個あたりにすると 0.00001円 程度になります。

映画の「エニグマ」に出てきた装置はスイッチですか?リレー式ですか?
文字を入れると〔暗号文〕→文字が出てくる〔平文〕

機械式です。ギアとかローターとかでできています。Wikipedia に結構詳しく書かれてますね。
エニグマの延長線上では難しいですが、ギアやローターとかでも、スイッチとして扱えば、現代風のコンピュータを作ることはできます。ただし、リレー式と比べても格段に難易度が上がります。リレーより更に大きくて遅いということもありますが、問題は設計の自由度でしょう。電気と比べて機械は信号の伝達の自由度が低いので、設計が非常に困難になると思います。同じ機械式でも、空気圧・水圧をパイプで伝達する方式などにすれば、設計は容易になります。

CPUを作る(設計)時の難しさについて教えてください。

正直に言うと何が難しいのか分かりませんw
想像ですが、プログラムと CPU(プロセッサ)の似て非なるところが混乱の元になっているのではないかと。プロセッサもプログラムも処理に関する何かなのですが、プロセッサはプログラムを実行する「もの」で、装置ですが;プログラムはプロセッサによって実行される「こと」で、物理的実体はありません。プログラムを書く気分でプロセッサを設計しようとすると、混乱してしまうのかもしれません。逆に、プログラミングより先にハードウェア設計を経験した人の中には、ハードウェアは設計できるけどプログラムは書けない という人も、ごく稀にですがいます。
でも、両方できる人は、特にこの違いを意識しているようには見えないんですよね。自分も何が違うのか本当には分かっていません。謎です。

命令セット・アーキテクチャはなぜ様々な種類があるのですか?互換性がないのは不便そうです。何か一つに統一できないのはなぜですか。

技術的には、命令セット・アーキテクチャの良し悪しによってプログラムのサイズや実行の効率が変わるためです。各社が競ってよりよいと思う命令セットを開発した結果、それらのうちの成功したいくつかが生き残っています。ただし現在では、命令セットは決定的な要因ではありません。
社会的には、命令セットは囲い込みのツールとなるためです。一旦、一つの命令セットが成功すると、異なるものを市場から排除できるので、他社には同じ命令セットのコンピュータを作らせないように努力するようになります。成功した命令セットは、その会社にとっての重要な資産になるので、おいそれと統一することはできません。「統一されていなくて不便なので、日本語は全面禁止にしてください」と言われても、「はいそうですか」という訳にはいきません。 もし統一されるとしたら、どれか一つによってその他が淘汰されてしまった場合だけでしょう(実際には、よりニッチな市場を求めて細々と生き残ることが多いかも?)。
一方で、命令セットが統一されていないことの不便さは我慢できないほどではありません。ソース・コードがあれば再コンパイルするだけですから。現在、OS には、Windows、MacOS、Linux、Android などがあって互換性がありませんが、その方がよほど不便かもしれません。特に、Windows と MacOS (搭載 PC)は、現在は同じプロセッサですので、命令セット・レベルでの互換性はありますが、OS レベルでの互換性はありません。
一言で言うと、「たかが命令セット、されど命令セット」です。

スパコンのプログラミングとの違いについて教えてください。

普通のプログラミングと一番違うところは、並列プログラミング (concurrent programming, parallel programming) にあるかもしれません。並列プログラミングとは、たくさんのコア(プロセッサ)が同時に働けるようにプログラミングすることで、普通のプログラミングの難しさに加えて、コア間の通信や同期(他のコアの進み具合と歩調を合わせること)についても考慮する必要があります。何十年もの研究にもかかわらず、いまだ決定打となるような方法は見つかっていません。スパコン・プログラマは、日々 並列バグと闘っています。

研究について

普段どのような研究をなさっているのでしょうか。

今回の話で言うと、以下のようになります。普通に作ると、八面十六臂のコンピュータは四面八臂のコンピュータの8倍(= 23)くらい大きくなってしまいます。すると、一面十六臂のコンピュータの方が安く作れるので、そちらに流れて行ってしまいがちですが、プログラミングが難しくなってしまいます。そのようなコンピュータでは、長い時間をかけてチューニングを行わないと、満足な性能を出すことができません。そこで我々は、8倍を2倍強くらいに抑える方法について研究しています。そのくらいにできれば、プログラミングの容易さと最大性能のどちらを取るかといったジレンマからユーザを(人類をw)解放することができます。*より具体的には7をご覧ください。

研究紹介の中にある「マネージ部門の再編することで、動作速度を維持しながら、発熱をおさえることが可能になりそう」というのは、もう少し具体的に言うと何をすればできるということでしょうか。

たとえば、オンディマンドで何度も繰り返される処理があった場合に、再利用が容易な形式に予め変換しておくことが考えられます。キャッシュ・メモリはその最も単純な例で、毎回毎回主記憶までデータを取りにいくことを省略することができます。プロセッサの内部にはそのような考え方を応用することが可能な部分がいくつかあります。もちろん、どのようにすれば応用できるかは、部分ごとに異なっていて、まったく自明ではありません。そこが鍵です。

ポストKにはそういう仕組みを組み込むことは考えられているのでしょうか。

秘密ですw

ムーアの法則が限界に達しつつあるなか、将来のコンピュータはどうなるのでしょうか。(量子コンピュータという単語を耳にしますが)

分かりませんw
個人的には、ムーアの法則の終焉のようなものは特にコンピュータに限った話ではなかろうと思っています。自動車も航空機も、ごく初期には指数関数的な発展を遂げた時期があっだだろうと思います。例えば、ライトフライヤー1号 (1903年) から最初のジェット機 (1939年) までは 36年しか経っておらず、その後、物理的な限界に近いところで 80年も漸進的な進歩をし続けています。自動車のエンジンとか、理論効率に近いところで研究されていて、頭が下がります。コンピュータだけが特別だと思われるのは、単に今が遷移の時期にあたるからではないでしょうか?
個人的には、あまり気にしていません。「リチウム合金より軽い金属材料はない」と言われた機械屋さんと同じ気分かも。「そう? じゃぁそれで作るよ」と。
(少なくとも今考えられている)量子コンピュータは、今あるコンピュータとは全然別の計算装置だと考えてよく、ムーアの法則の限界といった文脈に現れるものとは考えられてはいません。「ポスト・ムーア」とか「モア・ザン・ムーア」とかいった文脈で現れるのは、三次元実装とかです。量子デバイス(量子コンピュータとは違います)とか分子トランジスタとかカーボン・ナノチューブとかも以前は言われていましたが、最近はあまり聞きませんね。

大学、大学院のカリキュラムについて

電子回路やディジタル回路の学習は必要ですか?計算機アーキテクチャ以降だけを教えれば良いのではないでしょうか?→アセンブリやメモリスタックはサイバーセキュリティ分野では会社で使います。

どのような人材を育てたいかによって、何をどこまで教えるべきかは変化すると思います。
ただし、電子回路、ディジタル回路、計算機アーキテクチャの途中で切るのはあまりよい考えとは思いません。ソフトウェアより上の層を主に学習するコースとして、抽象的・仮想的な計算機アーキテクチャから教えるのはアリだと思います。参考文献に示した、Computer Systems -- A Programmer's Perspective -- は、まさにそのような目的のために書かれた教科書です。システムエンジニア、カスタマーエンジニアやプログラマなどを育てるには、それで十分だと思います。
一方で、ソフトウェアより下の層を担う人材には、電子回路、ディジタル回路、計算機アーキテクチャは必須です。またこれらは、ソフトウェアより上の層でも、研究・開発のためには基礎知識として重要であると思います。
したがって、大学のカリキュラム設計としては、前者と後者を ― 例えば、「情報メディア学科」と「情報システム学科」とか? ― に分けることが果たしてよいのか疑問です。

コンピュータサイエンスとコンピュータエンジニアリングは日本では、まだ未分化でしょうか?UCBとかCMUはどうなのでしょう?

エンジニアリング成分を持たない純然たるサイエンスとしてコンピュータサイエンスをやっている人は、世界的にも少数かと思います。日本でより未分化だと思われるのは、電気・電子工学 (EE) とコンピュータサイエンス (CS、コンピュータエンジニアリングを含む) ではないでしょうか。
EE と CS の距離感は、大学・学部によって大きく異なります。

shimin 2016-qa_2 page2361

注目コンテンツ / SPECIAL