熱血挑戦者のブログ

++++熱血挑戦者が思ったことを書く不定期更新ブログです++++

全体表示

[ リスト ]


15erの熱血です。この記事では東大理情のカリキュラムが(CPU実験から見ると)良くできていると思った話を軽く書きます。僕が個人的に続けてきた講義感想録の続きでもあります。

どちらかと言うとISの方はもう充分ご存知の内容だと思います。想定読者層は進振り前の前期教養1,2年生です。

最終更新: 2015/Dec/02




東大理情(IS)のカリキュラムがどういう風になっているかは、たとえば学科紹介パンフレットの図を見ると分かります。この図では各講義の連続性が分かりやすく表示されているのですが、正直僕はこの連続性がいかに具体的なものであるかを学部2年夏の進振り前にあまり分かっていませんでした。だからCPU実験をやりながら感じたカリキュラムの一貫性について書きます。

CPU実験では単にFPGA上にCPUを作るだけでなく、OCamlというプログラミング言語のsubsetであるところのmin-caml言語の自作アーキテクチャ向けコンパイラを作ったり、三角関数などの数値計算を要する関数を自前実装したり、自作アーキテクチャのシミュレータを作ったり、I/Oまわりやアセンブラなどを更に作ったりと、色々とすることがあります。大体4人くらいの班でこれらのジョブを各人に割り振って(コア係、コンパイラ係、シミュレータ係、FPu係)、自前アーキテクチャを作ることになります。

そんなことを今すぐ「やれ」と言われてもできないので、ISのカリキュラムでは段階的にこれらの技術を学べます。




2年後期には「ハードウェア構成法」という講義があります。先生が変わっていなければこれは小林先生の講義だと思います。なかなかディープな講義です。そして、3年生になってから「今受けたい」と言う人も多いほど、前提知識が少ない人には苦しい講義だとも思います。ISのハードウェア系の講義だと一番物理層・物性に近いことを習った講義でもありました。

また2年後期には「計算機システム」という、コンピュータの物理的な仕組みからアプリケーションレイヤーでの仕組みまで、コンピュータがどのように動いているのかを網羅的に扱う講義もあります。こちらも前提知識が少ない人には多少苦しい講義になりますが、逆に言うとここで叩きこまれておくと後が楽です。

この「ハードウェア構成法」と「計算機システム」は、そのまま3年前期の「ハードウェア実験」と「計算機構成法」という講義に内容が直結しています。

「ハードウェア実験」は実際にデジタル素子を使った電気回路実験から始まります。これは電気回路の特性を知るための前準備みたいなもので、本番はその後のFPGA実習にあります。FPGAとは自分でデジタル回路をプログラムできる電気回路のことで、HDL(ハードウェア記述言語)と呼ばれるプログラミング言語で仕様を決定し、そこからデジタル回路を合成してFPGAに書き込むことで回路を作り、その特性を調べるといった実験が可能になります。「ハードウェア実験」ではFPGAを使って、いくつかのデジタル回路を作ることになります。ここで作る回路はそのままCPU実験の基本となるような回路ばかりです。つまりこの講義はCPU実験に直結していると言えます。

「計算機構成法」では「計算機システム」では深堀されなかったCPUの仕組みについて詳細に語られます。ぶっちゃけるとカリキュラム的にはこの講義が無いとCPUを作るのは厳しいでしょう。というわけでこの講義もCPU実験に直結します。自習したい人はいわゆる「パタヘネ」「ヘネパタ」という本があるにはあります。この講義を担当なさっているhrk先生がもうすぐご退官予定のため、もしかすると後数年でこの講義の性質が変わるのかもしれません。でもそんなこと言うとCPU実験そのものの存続さえ危ぶまれてしまうので特に考えないこととします。


2年後期には他にも「アルゴリズムとデータ構造」という名が体を表す講義があります。アルゴリズムとはコンピュータで計算をするための一種の決まりきったやり方のことです。そしてデータ構造とは、計算するためのアルゴリズムを簡単にするための技法と言ってもさほど間違いではないでしょう。この講義で習うこれらの概念はソフトウェア的な意味での情報科学全ての基礎になっていると言っても過言ではありません。そういう意味で、この講義は3年後期の「連続系アルゴリズム」に弱く接続しています。

3年後期の「連続系アルゴリズム」ではいわゆる「数値計算」と呼ばれる分野を網羅的に扱います。浮動小数点数計算の誤差についての議論から始まって、数値微分・数値積分や補完多項式などの話題があります。僕ははじめこの講義はCPU実験に関係ないと思っていたのですが、関係あります。CPU実験でレイトレするために数値計算が必要なのです。FPU係の人やコンパイラ係の人(ライブラリを書く人)は特に関係するでしょう。


コンパイラ係がコンパイラを書くための知識は、2年後期「形式言語理論」、3年前期「言語処理系論」および「関数・論理型プログラミング実験」の知識が使われます。抽象的な意味での(形式的、数学的な意味での)「言語」を扱う「形式言語理論」の知識の一部が「言語処理系論」で必要になります。「言語処理系論」では人間が書いたプログラムのソースコードをコンパイラが扱いやすい形にする字句解析・構文解析の知識から始まり、それらを元に機械語を生成するための様々な手法について学びます。実際に「関数・論理型プログラミング実験」の方ではインタプリタを作ったりもします。これらの知識と、CPU実験(コンパイラ実験)で習う手法を元にコンパイラを書くことになります。

「言語処理系論」の話をしたのでついでに話しておくと、コンパイラの最適化技術は「言語処理系論」で習うものでは少し足りないので、それらをある意味補ってくれているのが3年前期「離散数学」「離散数学演習」であったり3年後期の「計算量理論」「計算量演習」であったりすると考えることもできます。「離散数学」で習うグラフ理論の基礎や線形計画問題の扱い方は最適化のための手法として有効です。コンパイラで扱う問題にはNP困難な問題が結構あるので、「計算量理論」で習う近似アルゴリズムの話も多少関係してくる所でしょう。


ここまでシミュレータについて触れてきませんでしたが、じゃあシミュレータ係は楽なの?と言われると、一概にはそうも言えません。CPUのシミュレータを書くためにはそもそもそのアーキテクチャの仕様についての理解が必要なので、ハードウェアの知識が必要です。またCPU実験で使うレイトレーシングのプログラムは普通に動かしてもそれなりに時間がかかるものなので、シミュレータの高速化には開発速度を高めるという充分な意味があります。高速化のためには2年後期「システムプログラミング実験」で習うような手法や、そもそも一般の実験で必要とされるようなプログラミング技術を持っているべきでしょう。また、Out of Orderという実装をコア係がする場合は、CPUの1クロックごとのシミュレーションをするCycle Accurateなシミュレータがあると便利なのですが、この実装はコアを1つ実装するのと同じくらい大変です。




ISの講義はここで紹介した以外にも存在します。それらの講義はCPU実験と直接的な関わりは無いかもしれません。でもたとえば14erの方々の中には自作アーキテクチャの上にOSを実装した班があったりと、余興の方にそういった知識は用いることができます。自前計算機を作るんですから何でもできますね。

というわけで、以上ISのカリキュラムを追いながら、どういった知識がCPU実験で必要で、活用されているのかを書きました。ISに来ようか迷っている方や、ISじゃないけどCPU実験をしてみたい方の参考になれば幸いです。

この記事に

閉じる コメント(4)

はじめまして、記事とても興味深く拝見しました!
CPUの実験、自作に興味があります。
そこで質問なのですが、CPU実験はIS以外の学部(例えば工学部や物理学科など)でも履修できるのでしょうか?
また、できないとしたら個人で同じようなカリキュラムをこなすことは厳しいでしょうか?
多忙かとは思いますが、お返事頂けると嬉しいです。

2016/2/16(火) 午前 1:22 [ bag*zu*go* ] 返信する

顔アイコン

> bag*zu*go* さん
長らくお待たせして申し訳ありません(気づいておりませんでした)。
CPU実験ですが、2015年度までのカリキュラムでは制度上他学科・他学部でも履修できる形になっていたのではないかと思います(ただし実際に見たことがあるわけではありません)。
しかし、2016年度のカリキュラムでは情報科学科生のみという限定がついてしまったので、いくらか特例でないと他学科の方が履修することは難しいのではないかと思います。
とはいえ情報科学科の制度は何だかんだ学生に優しいので、ひとまず学科長の先生や事務の方にご相談なさると良いと思います。

2016/6/22(水) 午後 2:17 熱血挑戦者 返信する

顔アイコン

個人で同じようなカリキュラムをこなすことについてですが、コンパイラ実験とプロセッサ実験に分けて返信させていただこうと思います。

・まずコンパイラ自作についてですが、これは個人でもできます。コンパイラ実験では、esumii先生の公開なさっているmin-camlコンパイラの仕組みを知り、そして自作CPU用にカスタイマイズしたり、それとは別に適当なアーキテクチャ向けに発展的な機能を付け加えたりするというのが内容になっています。ですのでこれは個人で可能です。どのような改造があるかは、CPU実験関連のサイトに色々書いてある気がするので割愛いたします。

2016/6/25(土) 午後 9:31 熱血挑戦者 返信する

顔アイコン

・CPU自作の方(プロセッサ実験)ですが、これについては2箇所難所があって、FPGAを入手できるか、HDLのCADを入手できるか、という所です。FPGA自体の入手は、スペックを気にしなければ1万円ほどでも可能ですが、その上でどの程度のCPUが作れるのか僕は知りません(それはそれで面白そうですが :)。また、VHDL/Verilog HDL/System Verilog等のHDLをFPGA用にシンセサイズするときに必要なコンパイラは、2015年度はXilinxのISE、2016年度はVivadoを使っています。これらはフリー版も存在しますが、ライセンス無しでどこまで合成可能なのか僕は知りません。情報科学科では学科としてライセンスを購入し、ネットワーク経由で認証ができるようになっていました。逆に言うとこの2点が解決できるなら、プロセッサ実験の方につきましても同様の実験を行うことが可能なのではないかと思います。

2016/6/25(土) 午後 9:32 熱血挑戦者 返信する

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(0)


.


みんなの更新記事