2009/10/31

Happy Halloween!

竹井です、こんばんは。今日も特に中身のないエントリを書きます。

ご存知、今日はハロウィンの日。年に一度、死者の魂が生者の許へと訪れる日です。あぁ、日本でいうおお盆の西洋版ですかね。バイトが終わった後、渋谷へと繰り出したのですが、なかなか面白い(笑) 渋谷って本当に夜も決して眠ることがない町ですけど、今晩の賑やかさは特段すごかったです。もともと外国人もそこそこいる渋谷。ハロウィンとなるともう道行く人が思い思いの格好をしていましたよ。

trick or treat

うーん、少なくとも今日僕が目撃したのは・・・

  • 妖精の羽を背中につけた人
  • 骸骨を体にまとう人
  • カボチャ頭
  • 死神
  • 頭からシーツらしき白い布をかぶって、目と口だけ穴あいてる人
  • 顔をドーランで白塗りして、口裂け男
  • オオカミ、馬、トラ、ほか動物系の被り物
  • 体の右半分が真っ黒、左半分が真っ白な人
  • スキン ヘッドに軍服姿
  • メイドと執事
  • 猫耳、犬耳、兎耳!
  • ピカチュウ
  • ボーリングのピンの格好になった人
  • なぜかメイド連れのバットマン・・・、の後を小走りで追いかけるニンフたち
  • サンタクロース!?
  • その他、色々

さすがに銀座線から白装束が降りりてきたときはドキッとしましたよ。それにしても最近のハロウィンは仮装というよりかはコスプレみたいな人も結構いますねぇ。あぁ、願わくば、渋谷にコスプレした理情生だとか、IS 関係者とかがいないことを願うばかり・・・ははは(←力なき笑い)

HALLOWEEN ハチ公前広場

にしてもやっぱり人間、お祭りになると暴走するのでしょうか。それか、月の狂気にやられたか・・・。そういえば明後日 (11/2) は満月、中秋の名月の次の満月だから、後の月。ここんところ、雲の切れ目から控えめにのぞかせる月の面が非常にきれいです。この間の火曜日、あまりにも月がきれいで思わずキャンパス内で写真を撮っていたら、警備員さんに怪しまれたのか、声かけられました・・・。月曜が台風のせいで終日雨、きっとそのおかげで空気が澄んでたんでしょうかね。その日、沈み際の月が赤々と見えました。あ、木星も見えましたね。


最後にハロウィーンに話を戻して・・・。えと、ハロウィーン自体は今日だけなんですけど、ディズニーのお祭りは 11/3 (火) の文化の日までやってるみたいです。先月、ディズニーシーに行ってきたんですが、なかなか素敵でした。TDS のほうではハロウィーンをやるのは今年が初めてらしかったのですが、ショーのクオリティは非常に高かったので、僕は気に入りましたよ。特設ステージでやってるミステリアス マスカレード、是が非でもお勧めします(笑) ではでは。

2009/10/29

献血

最近、部活とかでプライベートがけっこう忙しく、先週後半からまるまる 1 週間、仕事の進捗状況がまったく芳しくない竹井です。先週水曜日以降、自分のタスクをこなした覚えがない・・・ヤバい。班長失格、即刻クビとかはゴメンです。まぁ冗談置いといて、今日は CPU 実験とまーーーーったく関係のないことを書きます。献血のことです。

献血カード

実は、先週金曜日の午後、本郷から駒場へ移動する途中、銀座に寄って献血してきたんです。僕自身はかなりしょっちゅう、2 週間に 1 度のペースで献血していて、看護師さんの中にはすっかり僕のことを覚えてくださっている方もいらっしゃるみたいで・・・、この間も献血中いろいろ話してきました。それによると、この時期なんかは風邪をひいちゃって咳止めなどを服薬しているという理由とかで、献血の事前検査で断らざるを得ないことが多いんだそうです。たしかに街頭でもマスクをしていたり、咳していたりする人も増えたかもしれないですねー

それで「はたちの献血」みたいなキャンペーン広告をたまに見ますけど、ここ近年は献血に協力している人が減っているんだそうです。病院で使われる輸血用の血液製剤は需要が尽きることはないのに、ドナーが以前よりも減っているらしくて、大変なんだそうですよ。ちなみに、僕の記憶が正しければ、たしか一番輸血の理由で多いのが交通事故だそうで、たしか需要のうちの 40% くらいだったと思います (違ったかな?)。案外、他人事とは思えないようなところで輸血が必要になるシチュエーションがあるみたいです。

まぁそうはいっても、なかなか献血なんて足を運びにくいなんて思ってる人もいるかと。「血液が薄いからダメ」とか、「献血って痛い」とか (あ、確かに針は普通の注射針より太いですけど・・・)、まぁそう思ってる人もたくさんいると思います。けど、それでも! こんなメリットがありますよ:

  • ちょっとだけど、あったかい飲み物とおやつにありつける。
  • 血液検査をしてくれるから、コレステロールとかの値を知らせてくれる。
  • ほんのちょっとばかり、誰かの命を陰ながら支えられた気になれる。

僕が初めて献血をしたのは大学 1 年ときの冬 1 月、そういえば雨の日だった・・・。キャンパスに来ていた献血カーでやったのを覚えています。あれから実はこの間でやっと 10 回目になったんです。

10 回献血記念の感謝状

あぁ、これからも誰か困ってる人を助けられれば・・・1 人でも多くの人が笑顔になればいいな。

はんだ

こんにちは、党員こと岡原です。
党員といっても、お人形さんお嫁さんには入りません。
頭が悪いので、手を動かすことを担当しています。

今回ははんだを紹介します。
作るのはデバッグ回路を作るための作業となります。
大学の学生端末室、通称「地下」には作業機器はすべて揃っています。
回路図を考えれば誰にでもできます。

...以上です、ではつまらないので、「はんだ」のオレ流を紹介しておしまいにしましょう。

  • イメージは「はんだ」を「つける」ではなく、「流し込む」。
  • 「はんだこて」は必ず毎回きれいな状態で使うこと。
  • 「はんだ」は少ないぐらいがちょうどいい。
  • 「はんだ」をつける前に十分に回路を温める。
  • 「はんだ」をつけても「はんだこて」をすぐに離さない。

あずさんとツーショット

2009/10/27

ハードウェアのお仕事 その2

こんばんは。team C# の花元です。今日はハードウェア班の仕事の中で最もハードウェアっぽい仕事、拡張基盤の作成についてお話したいと思います。

CPU 実験で作る CPU ですが、当然のことながら初めから完全に動作することはまずありません。そこでデバッグ(間違い探し)をしたいのですが、ソフトウェアと違って便利なデバッグ ツールが無いので、自分たちで作る必要があります。team C# ではとりあえず CPU 内部の記憶装置の内容を LED で表示させるデバッグ ツールを作ることにしました。

ところが私たち理学部情報科学科の人間は理学部の名前の通りそのような実際的な知識がほとんどありません。電圧は? 回路図は? 抵抗は? LED は? 電気電子工学科の友達がうらやましくなる瞬間です。三人寄ればということで「team ksk」「くい☆たん」との 3 班で協力して 3 つ作る作戦に出ました。

秋葉原といったらもはや “萌え” の街になってしまった感がありますが、電子部品といったらやはり秋葉原です。秋葉原で部品を買って…ここからが問題でした。半田付けです。半田付けなんてほとんどやったことの無い私たちは、本当に苦戦しました。1 人が火傷する始末。仕方が無いのでゆとり世代の電子工作、ブレッドボードを使おうと思っていたところ、我らが team C# には半田付け一筋 30 年(自称)のテクニシャンがいることが発覚したので彼に頼むことが出来ました。チーム作業の醍醐味ですね。

半田付けのテクニシャン、岡原さん 完成品、整然と並ぶ 7 セグ LED

そして完成。これで動作…しませんでした。一瞬だけ LED が光ってすぐに消えるという現象に悩まされたのです。こういうとき、ソフトウェアならプログラムの間違いしか考えられませんが、ハードウェアだと僕が書いたプログラムが悪いのか、僕が書いた回路図に間違いがあったのか、彼の半田付けがおかしかったのか中々判別が出来ません。ハードウェアの難しいところです。1 時間くらい試行錯誤した結果、悪いのは電源だということが分かりました。これは意外でした。過去には基盤を冷やすとうまく動作した例なんかもあったりして、本当に何が原因か分からないのがハードウェアの難しさだとよく分かりました

仕事終わって IDOLM@STER に興じてる岡原さん、発狂中 team ksk の拡張基板。今週中にこれでテトリスさせるらしい

そうそう、電源といえば最近情報科学科ではパソコンが突然動かなくなるという現象が発生して、これも原因は電源でした。問題の AC アダプタを刺すとパソコンが壊れる始末で大騒ぎでしたよ。

電源は本当に大切です。スペックには現れませんが、パソコンを買うとき電源の質にもちょっと目を向けてみると良いかもしれませんね。

2009/10/21

コンパイラのお仕事 その2

こんにちは、Team C# の竹井です。なんかだんだんこの日記もカオスな感じになってきたのは気のせいだと信じたいですけど・・・。

はいそれで前回は、コンパイラというのはどんなものなのかについて簡単に説明したんですが、今日は実際にどのような処理を経てコンパイルが行われるかについて、具体的に少し踏み込んで説明します。プログラミング言語の種類やコンパイラの製作者によって少しずつ処理内容や順番がもちろん変わってくるのですが、大まかには次のような流れを経ます。

やー、こうみるとコンパイラというのは本当にたくさんの仕事をこなしています、一つ一つが立派な Wikipedia の項目になってしまうほど・・・。大まかに二分して、中間コード生成までをフロントエンド部と呼び、それ以降をバックエンド部と呼ぶこともあります。ちょっとこの blog では詳細を全部書ききれるほど体力があるか自信ないのですが、それでも僕自身がやってる仕事を追いかけながら、少しずつ解説出来ればいいなぁと思っています。ちなみにうちの班 Team C# のコンパイラは、バックエンド部の開発をちょうど今日明日から開始します。

それで今回のエントリでは、最初の字句解析構文解析について説明しようと思います。この 2 つの処理、あわせて文法解析といいますが、これは基本的に入力されたプログラムの表面上の意味を汲み取るというのが仕事です。たとえば簡単のために、次のようなプログラムを見てください (こーゆー意味のないプログラムを作るのって色々つらいんですけどー・・・)。

y = 10 + x;
if y > 3.14 then
  write("hello world");
else
  stop();

こういう人間が書いたプログラムを、字句解析のレベルでまずは単語ごとに分解していきます。たとえばこんな感じ:

[識別子 (y)] [イコール] [整数値 (10)] [プラス] [識別子 (x)] [セミコロン]
[IF キーワード] [識別子 (y)] [大なり] [浮動小数点値 (3.14)] [THEN キーワード]
  [識別子 (write)] [左括弧] [文字列 (hello world)] [右括弧] [セミコロン]
[ELSE キーワード]
  [識別子 (stop)] [左括弧] [右括弧] [セミコロン]

これって、勘がいい人だと気づくかもしれないんですが、高校のころにやった古文の文法解釈に似てるんですよね。名詞、助詞、動詞の連体形があって助動詞がナンタラカンタラ・・・、ひたすら苦労した覚えがありますよ。今になってみれば当然のような分析の手段だと思いますが、この方法はとっても強力です。話を戻すと、このようにして、人さまのコードをコンピュータが読めるデータに直していくんです。ちなみに、プログラム中のコメントはこの段階でカットされます。

さて、単語 (トークンと呼びます) ごとに分解されたプログラムは、次の構文解析の段階でより構造的なデータに置き換えられていきます。たとえば、1 + 1 のような並びが出てきたら、これは数式だとみなすことができます。そこで、先ほど字句解析でトークン列の中で [整数] [プラス] [整数][式] というような一つの別のトークンに置き換えていけばいけばいいはずです。具体的に、先ほど出したプログラムを解釈するためには、たとえば次のようなルールがあれば [プログラム] というトークンから派生したものだと見なせます。

[プログラム] ::= [文]*

[文] ::= [識別子] [イコール] [式] [セミコロン]
         [IF キーワード] [式] [THEN キーワード] [文] [ELSE キーワード] [文]
         [識別子] [左括弧] [パラメータ リスト]opt [右括弧] [セミコロン]

[式] ::= [リテラル]
         [識別子]
         [式] [プラス] [式]
         [式] [大なり] [式]

[パラメータ リスト] ::= [パラメータ リスト] [カンマ] [式]
                        [式]

[リテラル] ::= [整数値]
               [浮動小数点値]
               [文字列]

トークン右上の * は 0 回以上の繰り返しを示し、右下の opt は任意であることを示します。

このようにして、字句解析を通ってトークン列になったプログラムは、構文解析を通して一つのトークンに集約されます。ちょっと専門用語を使うと、上のような「あるトークンは別のトークン列の並びである」というルールを生成規則、逆にトークン列を見て派生元となるトークンへ戻す作業を還元、そして派生のおおもとになるトークンを開始記号 (この例では [プログラム])、といいます。言語学的にはこのような構造を持つ文法を文脈自由文法といい、僕の知る限りすべてのプログラミング言語の文法はすべて、この文法クラスに入ります。ちなみに、先ほどのようなトークン (言語学的には終端記号、非終端記号という呼び方をします) を開始記号に還元するアルゴリズムとしては、いろんな方法がありますが、LALR 法という手法が一番使われてます (詳細は省きます)。ちょっと詳しくなりすぎましたね、構文解析をすると、次のようなツリー構造のプログラムが得られます。

(Program
  (Sentence
    (Assignment
      (Identifier y)
      (Add
        (Int 10)
        (Identifier x))))
  (Sentence
    (If
      (Greater
        (Identifier y)
        (Float 3.14))
      (Function
        (Identifier write)
        (Parameters
          (String "hello world")))
      (Function
        (Identifier stop)))))

このようなツリー構造のデータにした後、ここからさまざまな分析を行って、プログラムを機械が実行しやすい方法に変換していきます。僕のお仕事紹介、次回はいつになるかわかりませんが、たぶん次は型チェックとかについて説明出来たらと思ってます。

(後世の理情生でこの日記を読むような奇特な人へ) この記事の前半に出てくる文脈自由文法という概念については、4 学期の形式言語理論の授業で習います。最初にオートマトンについて勉強しますが、そのあと正規文法とよばれる一番簡単な文法クラスについて学び、そののちオートマトンを利用した正規文法の受理方法を学びます。そして、文脈自由文法が導入され、チョムスキー標準形という特殊な形式での表記と正規表現との関係などまでを最終的に学びます (したがって文脈自由文法もオートマトンで受理できます)。正規文法と文脈自由文法はチョムスキー階層では下位のレベルに属し、上位には文脈依存文法 (生成規則の左辺が複数の記号からなる) などがあります。また、後半に出てくる文脈自由文法の解析方法については、言語処理系論という 3 年夏の授業で、LL 法, LR 法, SLR 法を学んでから、最終的に LALR 法を学びます。そのほか同じく 3 年夏の Prolog 演習で、チョムスキー標準形の文脈自由文法についてのみ対応できる CYK アルゴリズムの実装を行います。参考まで。

おまけ、今日の僕、たぶんまじめに仕事してます。そういえば僕が登場したのは初めてかなー・・・、僕がいつもカメラ持ってるから、撮られることがほとんどないんですよね。別にいつもこんなスタイルなわけぢゃないです。

僕に論理は要らない

どうしてこんなことになってしまったのか、僕にも分かりません。どうしてこんなことになってしまったのか…

僕と彼女の出会いは大学三年の春で、それはとても衝撃的でした。人間、初対面ならなるべく愛想良く接しようとするはずです。でも彼女は最初から愛想が悪かったですね。何しろ身に着けているものが彼女の要求と少し違うだけで、彼女は一切口を利いてくれなくなるんですから。仕方ないので、僕は既に持っている新しいものを捨てて、わざわざお古を身に着ける羽目になってしまいました。仕方ないんです。だって初対面なのに気を悪くさせる訳にはいかないでしょう?

彼女は論理さえ正しければ、とても素直な人でした。でも、僕には彼女の言うところの "論理" が全く分かりませんでした。さらに悪いことに、彼女は論理が正しくないと手がつけられないほど怒るんです。気に食わないことがあるのなら一回だけ言ってくれれば僕は直すよう努力するのに、彼女は何度も、ひどい時には何万行にも渡って僕の論理を非難してきました。初めは僕が悪いんだ、僕のやり方が悪いんだと思っていましたが…。

そのうち彼女に深く不信感を抱くようになったのは、彼女は実際に行動に移すまで何も言ってくれないことに気づいたときでした。僕は事前に「こういうことがしたい」と彼女に伝えているのだから、それが嫌なら「そんなことしないで」と言ってくれればいいんです。でも彼女はそうはしてくれませんでした。

僕と彼女の間の溝は深くなる一方でした。確かに、論理さえ正しければ彼女は素直でした。でも、どうしても僕には彼女の言うところの"論理"が分からないのです。第一、恋愛に論理なんて必要ないと思いませんか?

そして、僕は目的を達成した次の瞬間、彼女を…。

Team C# の花元でした。

悟りに近づく LiLFeS 入門 (インストール編)

また出てきた Team C# の新井です。今日は度々ネタにされる LiLFeS について書こうと思います。簡単に言うと LiLFeS は「Prolog みたいなもの」で、論理型言語の一種です。東大の研究室で開発されました。

第一回ということで、まずはインストール編です。学科で貸与されるノートパソコンには最初から Ubuntu が入っているため、Ubuntu(Debian でも殆ど同じですが)へインストールするつもりで書きます。

~$ wget http://www-tsujii.is.s.u-tokyo.ac.jp/downloads/files/lilfes/liblilfes-1.3.8.tar.gz
~$ tar xzvf liblilfes-1.3.8.tar.gz
~$ cd liblilfes-1.3.8/
~/liblilfes-1.3.8$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
(略)
checking for sys/ioctl.h... yes
checking util.h usability... no
checking util.h presence... no
checking for util.h... no
checking FlexLexer.h usability... no
checking FlexLexer.h presence... no
checking for FlexLexer.h... no
configure: error: Cannot find FlexLexer.h (distributed with flex 2.5.4a)
おっと、flex が必要だったようです。
~/liblilfes-1.3.8$ sudo aptitude install flex
~/liblilfes-1.3.8$ ./configure
~/liblilfes-1.3.8$ make
(略)
code.cpp:44: warning: deprecated conversion from string constant to 'char*'
code.cpp:45: warning: deprecated conversion from string constant to 'char*'
code.cpp:46: warning: deprecated conversion from string constant to 'char*'
code.cpp:47: warning: deprecated conversion from string constant to 'char*'
code.cpp:48: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
code.cpp:655: warning: deprecated conversion from string constant to 'char*'
(以下引き続き warning)
大量の warning に負けないでもう少し
~/liblilfes-1.3.8$ sudo make install
これでインストール完了です。 お決まりの Hello, world! を走らせてみましょう。
~/liblilfes-1.3.8$ lilfes
LiLFeS 1.3.8    [PROFILE] [REGEX]
Copyright (c) 1997-2006, Takaki Makino and Tsujii lab., Tokyo Univ.
> ?- print("Hello, world!").
セグメンテーション違反です
~/liblilfes-1.3.8$

(゚д゚ )

( ゚д゚ )


?- halt. でLiLFeSインタプリタを終了できます。

~/liblilfes-1.3.8$ lilfes
LiLFeS 1.3.8    [PROFILE] [REGEX]
Copyright (c) 1997-2006, Takaki Makino and Tsujii lab., Tokyo Univ.
> ?- halt.
セグメンテーション違反です
~/liblilfes-1.3.8$


確かに終了した

初回授業のあと地下へ行ってみんなでインストールして爆笑





とここでネタばらし!
実は flex パッケージではなく flex-old パッケージが必要だったのです。

地下の人が気づいて既に動かせてはいましたが、TA から連絡が来たのは数日後でしたね!

~/liblilfes-1.3.8$ sudo aptitude purge flex ← configure 辺りで指定すれば必要なかったかも
~/liblilfes-1.3.8$ sudo aptitude install flex-old
~/liblilfes-1.3.8$ ./configure
~/liblilfes-1.3.8$ make
~/liblilfes-1.3.8$ sudo make install

続きはきっと班員の誰かが書くので請うご期待

RT 動いたらしいー

こんばんは、Team C# の竹井です。この blog も書くのに協力してくれる人が増えてくれて、ちょっとずつ盛り上がってきました。ひとつ前ではチーム ksk の iwi さんこと秋葉くんがおめでたい記事を書いてくれたので、ちと補足。

実は、彼らのチームって今年の代のゴールデン メンバが集まったようなチームで、実力レベルは最高水準。僕ら Team C# にとっては、非常にいい目標です。もちろん彼らだって僕らだってトップは目指しているのですが、お互いに秘密主義なわけじゃないので、技術供与みたいなこともありますよ。

まぁ、それで本題。昨日、彼らが何をやったかをもう一度簡単にさらっておくと、最終的に動作させる実験基板上にチーム内で作った CPU の回路を焼き付けて、それでレイ トレーシングというプログラムをその CPU で実行して画像を得られたというのが、実際の成果です。で、これがどのくらい素晴らしいかというと・・・ふつう、基板で実際に動かす前に回路が正しいかどうかの検証をするために、回路と同じ動きをするシミュレータをソフトウェアで作成します。そこでレイトレーシングが動くのが、たいていの班ではだいたい 10 月末ごろ (?) らしく、それが終わった後にやっと基板で動くのが 11 月とか 12 月です。それを、彼らは実験はじまって 3 週間たたずそこまでやり遂げたので、驚異的な速度です。

動かす直前、すごい人だかり 終わった! 339 秒
出力画像

上の写真が、まさに昨日のその瞬間。動かすときには、学科の人間の半分が集まってすごい人だかり。誰にとっても、なかなかない興奮だったんですね。その次の写真が、基板との通信を行うプログラム。終了したあとの画像ですが、339.625 秒という文字が出てます。初回のトライでこの速度っていうのも、歴代の記録を見てもなかなか速いんだそうですよ。それで、実際に基板が生成した画像を開いたのが最後の写真。床の表示が白くなっていますが、正しくはタイルになります。彼らに聞いたら、浮動小数点の切り捨て処理を行うfloor 関数の動作に不具合があって、そのせいで床のタイルのテクスチャが張れなかったということらしいです。床だけに床関数の問題だそうで。でも、結局そのあとすぐ直ったみたいです。

シミュレータでの描画

ちなみに高解像度だとこんな感じの画像が出てくるんです。うちの班の話に戻ると、先週の土曜にシミュレータで ksk 班が画像を出すのに成功したという話を聞いて「うちの班も負けてられん」ってことで、コンパイラ係の僕が発奮しまして、月曜の午後 3 時半 (だから実は彼らが基板上で動かす直前の話) に画像だけは出るようになったんです。おもに、コンパイル処理の途中で得られる中間言語を、C# 風にフォーマットしなおして、それを実行しただけなんですけどね・・・。結局、今日の第 2 回目の進捗報告会では早々と 2 班が画像を出すという例年にない爆速っぷりだったのでした。

あぁ、早く僕らも基板上で動く日が来るといいなぁ・・・ (現時点ではひとえに僕の働きにかかってるんですが)

2009/10/20

レイトレーシング動作

Ray Trace 実行結果

こんにちは、はじめまして。チーム ksk の秋葉です。ここはチーム C# の CPU 実験日記ですが、竹井が他の班の人にも記事を書いてほしいと言っていたので、記事を書くことにしました。

昨日 (10/19) 我々の班はついに、作成した CPU 上で課題であるレイトレーシングのプログラムを正しく実行することができました。

レイトレーシングが正しく動作した際には非常に感動しました。動作に至るまでに開発しなければならないものは多岐に渡り、その全てが揃うことはもちろん、その全てが正常に動作しなければ正しい画像は出力されません。班員で力を合わせ、分担して開発し、組み合わせ、そして皆でデバッグを行いました。

我々の目標は、新記録の樹立です。CPU 実験では、最終的なレイトレーシングの実行時間でコンテストが行われ、記録が残ります。正常動作する CPU の完成がその挑戦のスタート位置だと考え、早期の完成を目指しました。

なお、昨日はじめて動かした際の記録は 338.985 秒でした。その後、班員が色々な最適化を施し、1 日で上の画像の通り 191.055 秒となりました。ちなみに、去年の最高記録は 10 分程度らしく、既に去年の最高記録を破っているそうです。

しかし、過去の公式最高記録は 18.407 秒、そして非公式記録は 8.983 秒です。なかなか目標は手ごわいです。そして、6 秒を切れば前学期の TA がお寿司を奢ってくれることになっています。

今日のミーティングで、さっそく次期 CPU の命令セットが大まかに決まりました。これからも気を抜かず頑張っていこうと思うので、よろしくお願いします。

2009/10/19

チームの進捗管理

こんばんは、竹井です。この間、生協購買部に夕飯を買いに行ったら、おいしそうなエピがあったので買ったんですよ。そしたら、レジで 200 円のパンが値段の打ち間違いで 20,000 円になって、あやうく破産するところでした(笑) いつも支払いは学生証を使ったクレジット決済 (僕らはポスペとかって呼んでます) で、月々の上限額が 3 万だから先にもしピッとかってやってたら今月の残りは夕食にありつけないとこだった・・・。はい、今日はチームの進捗管理方法について紹介します。

おなじみの今日何をする?
こうみると・・・この日は僕ひとり

まずはチーム管理の必要性について。この間、ガント チャートのことを書きましたが、実は結構この図は便利で、各作業の優先順位を考えながら、何も割り当てられていないメンバに対してうまい具合に仕事をディスパッチ出来るんです。まぁ詳しい話は省きますけど、うまく活用すると結構便利です。ほかに、タスクの依存関係をグラフ (マイルストーンをノード、タスクをコスト付きエッジにする) に起こして作る PERT 図というものを用いたクリティカル パス分析をすることで、タスク グループの最短完遂時間や、作業のボトルネック箇所を特定することができます。が、ここまでやってるチームはなっしんぐ。

それで、たいていの班では各自でサーバを独自に用意しており、その上に Wiki を用意して各人の仕事のメモを作ったり、ソース管理ソフトウェアを使ったりしているみたいです。うちの班でも、他班と変わらずサーバを地下室に用意し、そこに共用の管理システムを立てることにしました。それが先週の 10/11 (日)、家から 4 台のサーバ、3 台のラップトップ、液晶ディスプレイに Xbox 360 などなどをはるばる担いできたので死ぬほど大変でした・・・ウソです、車で搬入しました。結局、この日は泊まりでサーバのセットアップなどをやって、いろいろ大変でした。

搬入のとき  結局、こうなった

まぁ残念ながら、まだインストール後、エラー表示しか出ていなくてチーム管理サイトが出来ていないんですが、もうそろそろで立つことでしょう、今度できたらまた紹介するかもです。

ハードウェアのお仕事 その1

こんにちは。基盤係の花元です。前回お話したとおり理情では平日でも基本的に 2 限しか講義が無いため、生活リズムが崩壊しがちです。先日午前 3 時ぐらいになんとなーく大学に行きたくなって自転車で大学に向かっていったら職務質問を受けました。

「君、家に帰る途中?」
「はい…(あ、でも防犯登録している場所と方向が逆だ…)いや、大学に向かう途中です」
「それは大変ですね(笑)」

と、ちょっとだけ疑いの目を向けられた反応が返ってきてしまいました。

とまあそんなことはさておき、今回はハードウェアはどんなことをするのか説明したいと思います。ハードウェアは何をするかというと、コンパイラが生成してくれた言語を忠実に実行します。それだけです。ところがただ実行するだけでもさまざまな特徴が出てくるんですね。特に私たち Team C# が今回作る VLIW アーキテクチャは結構特殊なアーキテクチャです。

VLIW とは Very Long Instruction Word、現代語訳するとめっちゃ長い命令語です。短い命令語だと「掃除して」「洗濯して」「料理して」と小分けしてハードウェアに伝えないといけない所を VLIW なら「掃除しながら洗濯もしながら料理しといてーな」と一度に命令することが出来ます。

「えーすごいじゃん。じゃあ何で VLIW は今 popular じゃないの?」と思うかもしれません。実は VLIW にすると命令を出すほうが大変になるんです。例えば「洗濯しながら洗濯物もたたみながら洗濯物をタンスにしまってーな」なんて命令を出しちゃうと、ハードウェア君は何も考えずに洗濯する前の洗濯物をたたみ、洗濯もしていなければたたんですらいない洗濯物をタンスにしまってしまうのです。これでは困りますね。そこで、コンパイラはこのような命令(依存関係のある命令と言います)を出さないようにしつつ、出来るだけ効率よく(この例では)家事をこなせるように命令してあげないといけないのです。

というわけで VLIW アーキテクチャを作る我らが C# 班では

  1. コンパイラはとても頭のよい司令官になること大切
  2. 基盤は上官様の指令を何も考えずにとにかく速く従うことが大切

になります。両方大切ですがコンパイラ係が特に大切ですね。頑張れ竹井君!

真・地下カルチャー

ここでは初めてお目にかかります。新井です。C# 班ではシミュレータ係をやってます。

シミュレータというのは CPU 実験で作成するハードウェアのシミュレータのことで、主にコンパイラの動作確認や高速化のための情報収集に使われます。CPU 実験を構成する要素としては真っ先に完成しなければならないソフトウェアです。

最初はコンパイラ係が楽しそうだなーと思っていたのですが、いろいろあるんですよ。

  1. ハードウェア係はやりたくない
  2. 冬コミに申し込んでいる
  3. シミュレータ係とは最初に働いて後の方は適当に遊撃する係である

→シミュレータ係しか選択肢に残らない
冬コミが重いですね。でも今年の夏は落ちてて、で今年の冬を見送ると来年の夏はまた院試と被るんです。うおおおお…

さて、そんなことより!
このブログ見てると理学部情報科学科がよくあるアカデミックな大学ライフーなところに見えると思います *1 が実態はちょっと違う。秋葉原という土地もそうですがこの相関はなんなんでしょうね。

(三次元の)女子供は、すっこんでろ。※ただし幼女を除く

そういうところです。ガチムチな方向ではありません。ちなみに自分は先輩や姉のほうが好きです。
もちろん全員ではないんですよ。今までここを編集していた竹井君と花元君は猫被ってたわけではなくふつーの人です *2。自分の知る限りでは。
しかし隣の席の人がプロデューサーだったり、彼女持ち(DS の中に)だったり、その人が名前言うだけでとりあえず眼鏡キャラであることが分かったり、いやあ、実に、楽しい。

そういうわけで自分は地下と CPU 実験の痛いニュース担当として今後も何か書くかもしれません。どうぞよろしくお願いします。

*1 異論は認める。
*2 異論は認める。

2009/10/15

地下カルチャー

こんにちは、地下室から愛を送る竹井と花元です。昨日は夜に雹が降り出して、本気でうひょー状態でしたが、まぁ何とか脳みそに穴開かずに生きてます。そういえばコマバックした際、ハードウェア構成法で CPU 実験の宣伝をさりげなく・・・したつもりだったんですが、小林先生がずっと黒板に残してたので、たぶんだいぶ宣伝になってたかと(笑) まぁいいや、今日は地下民 (注: ちかたみ、理情生のこと) が話す言語についてご紹介します。

ハードウェア構成法の授業

とりあえず、まずは Session #1

12 時ごろ、8 人くらいでつるんで中央食堂へ。「やべー席が超絶フラグメンテーション起こしてて、alloc できないし・・・誰がデフラグしろよ」「俺、特権モード発動でちょっと realloc してくるし。さき食券買ってろ」「んにゃ僕は赤門ラーメンにします、辛いの苦手だけど笑」「じゃぁ俺も」etc. というわけで過半数赤門ラーメン。「やっぱ飯の決定は時間的局所性があるな」

日本語訳します。

「やべー席がかなりバラバラで、まとまって座れる場所ないし・・・誰か詰めてもらいに行けよ」「俺、ちょっと頼んで席空けてもらいにいくわ、さき食券買ってろ」 (中略) 「やっぱみんなで行くと飯が同じもんになるなぁ」

まぁ結構、日常的にこんな会話が飛び交うあたり、この時点でなかなかカオスなのはお分かりかと。この文章を書いてて、横で友達が爆笑してました、「改めて考えると異常だな」と。続いて Session #2

麺類の列はいつもかなり並んでます。「やばいマルチ クロックすぎる。キャッシュ実装すべき」「んー、どう見てもパイプラインがストールしてるよなぁ、、、」ここで後ろに並んでた人のほうが先にできてしまいました、残念。「んが、うちらの時間かかってるなぁ」「アウトオブオーダー実行とか理不尽すぐる・・・、キャッシュミスのペナルティはでかいなぁ」

そうなんです、食堂の麺類はなぜかいつも混んでるんです。昼の一番混んでる時間に行こうものなら 10 分は並びますよ。この時期、修学旅行生が多いですし。うちの大学の生協で食べるのは一種の験担ぎなんでしょうかね。まぁ、とりあえず日本語に訳します。

「やばい麺類は時間がかかりすぎる。ストックを作っとくべき」「んー、どう見ても麺ゆで機が遅くて調理が滞ってるよなぁ、、、」 (中略) 「後の人の注文が先に出てくるとか理不尽すぐる・・・マイナーなもん頼んだ時って本当に遅いなぁ」

xyx さんつづいて Session #3 理情生はよく twitter を使ってるんですけど、けっこうその中からも面白い (?) 発言がぽろぽろ出てきます。こんな感じ:

あだまいだい...
いたいのいたいのとんでいけー > /dev/nullに
by xyx

地下民ならではの言い方ですね。/dev/null っていうのは特殊なファイルで、書きこまれたデータをすべて捨てるというヤツ。つまり「痛いの痛いの~、どっか消えろー」って感じですよ。さて最後 Session #4、日本語に見えるのは気のせいです。

JAL で行って JR で帰ってくる。

えー日本語、、、に見えますが、日本語になってない気がします。JAL っていうのは Jump And Link という命令、JR っていうのは Jump Register という命令、それぞれ MIPS アーキテクチャの命令です。近頃、CPU 実験の設計のところで、ジャンプ命令を作るだのどーので、結構盛り上がってます。福岡出身の花元さんは今度の帰省、ヒコーキで行って電車で帰ってこよう、とのことです。ただ、沖縄行ったときにはあんまりにも遠くて JR がないので set jump とか別の方法で帰ってこなくちゃいけなさそうです。

さてまとめ。書きあがってからこのエントリ読んでて、まったくもって普通の人間には理解できない言語でしゃべってるみたいです。僕はまだ日本語に近い言語を使ってますが、すごい人数名の話す言語は翻訳が必要ですからね・・・

えー、このエントリを書くモチベーションを与えてくれた地下民のみなさん、そして監修してくれたみなさんに感謝します。本当にシュールな環境です、ありがとうございました。

2009/10/13

はじめての発表

竹井です。三連休、だから何という感じのお休みも、気づけば終わってました。そういえばがんばってコンパイラがりがり書いてたから、日曜の晩は地下に泊まって徹夜したんだった。いやー理情にいると、その授業時間の少なさと課題のキツさのせいで、

平日 = 朝、2 限がある日
休日 = 朝、2 限がない日

という感じになっちゃうんですよね。いたってシンプル。つまりは、いつも課題をぼちぼちやってるような状態。おかげでたいていの人は曜日感覚が飛びます。そんでさらに拍車をかけるのが、地下にいると外の景色が見える窓がないから、時間感覚までおかしくなってくる。この季節は、だんだん暗くなる時間帯が早くなっていますけど、それに気づかず、17 時半とかに、ふらっと外に買い物に出かけると、「お、もうこんなにまっくらっ!」って驚くこともあるくらいですよ。あぁ、学生控室が建物の屋上にガラス張りになってあれば、お日様も見えてもっと気持ちいいんだろうになぁ。

さて本題にうつって、今日ははじめての進捗発表の日でした。先週の同じコマ (火 3) で、実験講義で班組みについて TA が OK だして、正式にチーム結成になってから早一週間。どこの班も、まずは作る CPU のコンセプトを決めたり、誰が何の担当をするか割り振ったり、そしてこれからの予定をどうするか考えたり、なかなか忙しい週だったはずです。うちの班についても、だいたいの方向を決めて、さっそく長い冒険へと船出しました。ちなみに、この実験講義で行う発表では、班員から一人、もちまわりで発表者を選んで、その週にあった出来事を説明したり、今後のガント チャートを提示したりします。場合によっては TA から雲行きが怪しげなところを突っ込まれることもあるようです。うちの班では今週、とりあえず花元さんに班長権限で発表者の仕事を投げたのでした。以下、各班の状況。

  • Team C#
    うちの班は、トップ バッターで発表。進捗はそこそこ順調です。ガント チャートを作るという班長の重大責務だけはしそこないましたが、各班員がしてる仕事は把握してます。シミュレータは GUI 付きで超高機能だと、発表でもみんなからおおむね好評だった模様。新井さんがんばってます。ちなみにオンライン ヘルプ付き (Twitter でメッセージ流すだけだけど笑)。コンパイラはフロント エンド部分がほとんど出来上がりました。今週中に α 変換と K 正規化のコードを書きあげます。ちなみに開発言語が F#C#完全五度でハモります。基板係はがりがり FPU 書いてる人もいれば、ISA を策定している人もいれば、SRAM コントローラと格闘してる人もいます。
  • チーム ksk
    とりあえずこのチームは、進捗がヤバいです。爆速です。チーム名の「ksk」というのは、この班員のうちの一人のハンドル ネームで、みんなで「カソクさん」って呼んでます。彼はハードウェアが得意みたいですが、とりあえずみんなとはけた違いに FPGA をいじり倒していて、すでに命令キャッシュを搭載させて実基板上でフィボナッチ数列の計算ができたらしいです。うーんともかく速い。最後に、チームのガント チャートが発表されましたが、ほぼすべてのタスクが「終了」状態で、班長曰く「自分が一番おいてきぼりを食らってる」らしいです(笑) とりあえずこのチームは今年の理情生のゴールデン メンバが揃ってるので、強そうですよ。
  • もん班
    ここはここでなかなかユニークな班です。なにより、結成後に気づいたらしいのですが 3 人がハンターだそうです。今のところの目標は、CPU 実験で完動させることよりも、ゲームでオンライン進出することのほうみたい(笑)
  • AVR (仮) 班
    ここの班は、なにやらマイコンとかで使われるようなマイクロ コントローラ チップの AVR というのを参考にして開発を進めるらしいです。詳しいことは知らないのですが、このチップは 8 ビットの命令長をもっていて、それで最初にフィボナッチなどの基本的なものを動かせるようにしてから、命令を拡張するという戦略をとるらしいです。ただ僕の個人的な印象だと、実験課題であるプログラムのレイトレーシングだと、命令長が 16 ビットでもかなり厳しいのに、8 ビットでどうやって頑張ってしこしこプログラム書いていくのか、ちょっと疑問ですねぇ・・・線表みた限りも、進捗はあまり芳しくなさそうなので、正直言って少し心配かも。
  • くいたんっ
    麻雀野郎どものチームですかね、ここは。「くいたん」ってのはマンガの名前だそうなんですが、ともかくよくわからないこだわりがすごいです。まず最初のアーキテクチャ名が「タンヤオ」だったそうで、いろいろやっていたみたいなのですが、途中であまり美しくないということで「三色」アーキテクチャを作ったらしい。僕はポーカーしかやらないので麻雀の役はわからん、残念。それと、班員の中で「Windows 製品使用禁止令」が出てるらしくて、論理合成などで使う専用ツールも Linux 上に入れて頑張ってるらしいです。まぁいろいろ濃いメンバたちですよ。あ、ちなみに TA がいろいろ麻雀の役のことで突っ込んでました。もはやカオス(笑)
  • 崖っぷち
    はっきり言って、一番進捗がマズそうなチームなよう。もともと再履修者が過半数集まってるチームらしくて、単位さえもらえればいいんだそうな・・・。なんか気の毒ですけど。でもさっそく最初の週からメンバが音信不通 (?) になっているらしいです。はたして大丈夫かなぁ・・・。

はい、まぁそういうわけで、結構発表は盛り上がりました。やはり学生が教室の前に立って話すというのはすごく新鮮で面白いですね。それにそれぞれ個性があるから、すごくいろんなことが聴けますね。来週からはデジカメで発表の様子もウォッチしようと思います。ではでは。

2009/10/12

コンパイラのお仕事 その1

こんにちは、班長の竹井です。先週木曜の台風は大変でしたねぇ。僕の住む千葉では JR 京葉線やら地下鉄東西線まで止まったので、もはや陸の孤島、千葉共和国ってな状態でした。いずれにせよ午前中の授業は休講だったので、特に何もなかったですけど。それで、今日は少し、僕の担当しているコンパイラ係について少し紹介します。ちょっとマジメな記事になる予感。

そもそもコンパイラとは何かというと、人間が書いたコンピュータ プログラムを機械が理解できるデータに直すソフトのことです。たとえば、簡単な例でいえば、フィボナッチ数列の 10 番目を計算するプログラムを考えましょう。まずは C 言語で書いてみると、

x = 0, y = 1;
for (i = 0; i < 10; i++)
    z = x + y, x = y, y = z;

とかすれば、最終的にたぶん x に 10 番目 (11 かも?) のフィボナッチ数が入ります。ただし、このコード、コンピュータの頭脳である CPU では直接こんなものを解釈しているわけではないです。人間が書いているプログラムは高級言語と呼ばれていて、CPU が解釈できるような言語ではないのです。では、CPU が解釈するのはどのような言語かというと、だいたいこんな感じです:

    addu   $v0, $zero, $zero           # x = 0
    addiu  $t0, $zero, 1               # y = 1
    addiu  $t2, $zero, 10              # cnt = 10
fib:
    addu   $t1, $v0, $t0               # z = x + y
    addiu  $v0, $zero, $t0             # x = y
    addiu  $t0, $zero, $t1             # y = z
    addiu  $t2, $t2, -1                # cnt = cnt - 1

(わかる方のために注釈しておくと、今現在のところ班員の圧力でパタヘネをかなり参考にしているので、上のアセンブリは MIPS 準拠です) とりあえず、このような感じで、命令がずらっと並んだのがアセンブリと呼ばれている CPU が解釈できる言語です。このように、よりコンピュータが理解しやすい、裏を返すと人間様が使うような高度な機能がそぎ落とされている言語を低級言語と呼んでます。

それで、要はコンパイラは何をすればよいか大雑把にいうと、高級言語によって書かれたコンピュータ プログラムをもらって、それを CPU が理解できるような低級言語に直す、ただそれだけです。まぁそれだけといっても、だいぶいろんな処理があるんですけど。CPU 実験では、与えられる課題のプログラム コードは事前に配布されているので、そのコードを受け取って、自分たちの班で作る CPU が理解できるような機械語を吐くソフトを作ればいいことになります。

ちなみに、課題のコードは、O'Caml という言語で書かれています。だいたいこんな感じの調子です:

let rec newton x k =
    if abs_float (x *. x -. k) < 0.0001 then x
    else newton ((k /. x +. x) /. 2.) k
let sqrt x = newton 1.0 x
これは、ニュートン法という計算方法で、与えられた数の平方根を導出する関数 sqrt を定義しています。まぁ、こんな感じの O'Caml という言語のコンパイラを作る、っていうのがコンパイラ係の仕事ですね、結局のところ。

2009/10/11

CPU 実験以前

こんにちは。team C# の花元が今回担当します。CPU 実験というタイトルではありますが今回は CPU 実験にいたるまでの過程を書きたいと思います。

東大理情というと geek(凄い人)たちが跋扈しているというイメージがありますが(実際に半分ぐらいは合っています)僕は全くの初心者の状態で理情に入ってきました。専門課程が始まる前に先輩たちによる理情内定者の歓迎会があったのですが、そこで先輩に「好きなシェルは?」と聞かれて答えに窮したのを覚えています。(ちなみに簡単に言うとシェルとはプログラムを動かすためのプログラムのことです。)

さて、僕のような初心者(大体学科の 1/3 はほぼ初心者で入ってくるようです)が理情に入るとどうなるかというと、1 年で CPU を作れるまでの知識を身につけさせるために出される大量の課題に圧倒されます。さらに問題なのが「情報が少ない」

例えば、3 年夏学期にやるプログラミング言語に「LiLFeS」という言語があります。これは東大の研究室で研究用に開発された言語で恐らく理情出身の人しか知らない言語です。運の悪いことにこの言語は非常に癖が強く思ったとおりの挙動をしてくれません。ところが google で検索しても欲しい情報が全く出てこないのです。情報科学科に内定した学生がCPU実験までに学ぶ言語は C,Scheme,LiLFes,VHDL,OCaml ですが十分に情報があるのは C 言語ぐらいなものです。逆に言えば全くの初心者でも大きな disadvantage がある言語も C 言語ぐらいなので、僕は他の言語(主に LiLFeS)を頑張って C 言語は他の人にひたすら教えてもらうという作戦に出ました。先ほどあげた 5 つの言語ですがそれぞれ手続き型言語、関数型言語、論理型言語、ハードウェア記述言語と毛色が大きく違い、人によって得意不得意が出てくるので膨大な課題をこなすためにお互い得意な言語を教えあうという文化が自然と出来上がっていました。大学もそれを期待してこのようなカリキュラムにしているようです。

とまあ全くの初心者でも CPU 実験までの 1 年間で実験に対応できるだけの知識が(半ば強引に)手に入るようなカリキュラムになっています。そして後輩たちの歓迎会を開き、こう言うのです。「好きなシェルは?」なぜなら彼らもまた特別な存在だからです。

波形シミュレータ

2009/10/07

コマバック

竹井です。実はですね、東大にはコマバックという世にも不思議な現象があります。闇の強権力によって、本郷生が気づけば駒場キャンパスに返品されるという状況が発生してしまうんですね。僕みたいに 1,2 年生で努力しなかった出来そこないはほぼ確実にコマバックの対象になるわけですが。

ごめんなさい、まじめに解説します。東大では 2 年生まで原則としてすべての授業が駒場キャンパスで行われますが、3 年生からは大半の人が本郷キャンパスで授業を受けることになります。これは最初の 2 年で全学生が学問的教養を (まるで基礎体力のように) 等しく身につけるため、教養学部 前期課程に配置されるという都合で、2 年の夏に行われる進学振り分けという制度を経て、後期の専門課程にそれぞれの学生が進む進学先が決定されます。そして 2 年生の冬学期については、本郷に進む前にフライングで各学部の専門課程の授業が始まるわけで、例にもれずわれわれ理情生についても、C 言語や関数型言語の Scheme などの習得のほか、ハードウェアやソフトウェアの幅広い分野での基礎授業が開講されます。

しかしここで、残念ながら 2 年冬学期の授業単位を取得できずに 3 年生になって本郷に進んでしまうと、3 年冬学期に駒場キャンパスにわざわざ戻ってきて授業を再履修する必要があるんです。それが悪名高きコマバック。僕についても、数学などの選択必修科目が 6 単位分、回収する必要ありな状態なんですよね。必修科目は全部とれたのに、選択必修で得意でもないものを選ぶと、こんな風に成績が炎上するんです。

それで、昨日のエントリで書いた弥生 Go! についてです。お察しの通り、本郷で授業を受けながらコマバックするというのは果てしなく体力的にも精神的にもきついので (だって最短でもキャンパス間移動に 40 分はかかるからねぇ)、半ば裏技的に農学部に行ってきて選択必修分の単位を置き換えるという手段があります。それが弥生 Go! で、農学部が本郷キャンパス弥生地区というところにあるのが由来です。ちなみに理学部と農学部とでは、言問通り (ドーヴァー海峡とか呼ばれてますけど) にかかる陸橋を渡って、だいたい徒歩 10 分の距離にあります。駒場よりは近いです。この時期、ホントに銀杏くさいですが(笑)

にしてもコマバックなんて、本当に素敵なネーミングですよね。こんなに卑屈な響きがする名前を付けた人のセンスには敬服するしかない・・・。あぁ鬱。


ぼくのコマバック リスト:

曜限 科目名 開講 場所 時間割コード 備考
月3 応用動物科学概論 農学部 農1号館 8番教室 060200251 弥生 Go!
水3 ハードウェア構成法 理情 駒場1号館 112教室 単位取得済 復習のため。2 年生と一緒♪
水4 植物科学概論 理学部 生物学科 駒場1号館 113教室 0542003 出席と試験。けっこー楽しい
水5 無脊椎動物学 理学部 生物学科 駒場12号館 1222教室 0541001 出席と試験 or レポート

2009/10/06

ぼちぼち授業開始

こんにちは、C# チームより竹井です。そろそろ今週から本格的に授業が始まっていますね。今はまだ帰りの電車の中、今日はほとんど何もした覚えがないので(笑)、昨日月曜日の様子をお伝えします。

1 限にいちおう「情報科学演習II」といおうコマが入っているのですが、初回からいきなりアナウンスなしの休講 (!?) とかでびっくり。いや、上級生からそんなような話はいろいろ聞いていましたが、まさか事務から連絡なく本当に休みになるとは・・・。そういうわけで、マジメな約 10 人前後が朝の 8 時半に本郷集合しました (ちなみに、うちのチームはなんと全員いたんですよ! 真面目でしょ?)。そのあと 2 限は米澤先生の言語モデル論。言語に関する哲学的な話が半分で、興味ない人は夢の世界へトランスポートしていた様子。ちなみに以前、学生向けコミュニティの活動で先生にはお世話になったことがあります。なかなか温和な感じの人ですが、業績をみると本当にすごい先生です。そのあと、昼休みをはさんで 3 限は「弥生 Go!」・・・うん、一般の人はたぶん知らない内部用語ですが、たぶん次の記事あたりでご紹介します。授業自体は、動物応用科学概論という日本の田園風景などを社会システムおよび食の科学などの視点から分析するものでした。僕ら理情生にとってはなかなか新鮮な分野です。そののち、4 限の連続系アルゴリズムという授業はふたたび休講で、CPU 実験プロジェクト ミーティング。思えばこの日はあまりまだ仕事をしていなかった。

そういえば、ここには書いてませんでしたが、僕はチームの班長 兼 コンパイラ係という一番大変な責任を担いでいる人間です。そんなわけで、チームのかじ取りをしなくちゃ単位が来ないという一番冒険的なポジションにいたりします。班長の仕事の一つに、ガント チャート (線表) といってプロジェクトの進行状況を管理するダイアグラムを作成するなんてことがあります。先生の説明では「線表とは、企業とかでデスマったときとかに白板とかに張ってある情け容赦ない表」のことだそうですが。

うちの班の構成は、だいたいこんな感じ:

  • コンパイラ係: 竹井 (兼 班長)
  • シミュレータ係: 新井さん
  • 基板係: 花元さん、ほか 3 名
まぁ係なんてあまりアテにならんもんで、ほかにテスタとかドキュメンタとかいろいろ担当は作らなくちゃいけないんですけど。そうはいっても、ぼちぼち作業を始めなければ、何も進まないので、とりあえずホワイトボードを使って、毎日の目標を掲げることにしましたよん!

昼ごはん 今日何をする?

ちなみに今日の昼ごはん、ミートソースバーグとかいうのを買いました。理情生みんなでつるんで生協に行ったら、誰かがこれを選んだとたん、連鎖的にその場の人間がこれを取ったので、僕もこれをチャレンジ・・・、ん、まぁ値段相応な味かな、量を考えれば可も不可もつけられないか。

2009/10/04

チーム結成

こんばんは。初日で勢い余って連投です。われわれ、実は冬学期は先日 10/1 (木) から始まっていて、この日が実験講義の初日でした。今学期の時間割はこんな感じ:

  Mon Tue Wed Thu Fri
1 情報科学演習II        
2 言語モデル論 計算量理論 コンピュータネットワーク 知能システム論 情報科学演習II
3   情報科学実験II   情報科学実験II  
4 連続系アルゴリズム    
5 情報科学実験II      

「情報科学実験II」というところが、すべて実験のコマです。10/1 (木) の授業は、さすがに冬学期初日だけあって、学科の 30 人ほぼ全員がいました。その日の授業では、おもに CPU 実験の位置づけについての説明 (ひとつ前の投稿で書いたような) があって、そのあとは実際にコンパイラについての授業がありました。

そして授業が終わった後、チーム決めがありました。CPU 実験では、だいたい 5 人前後のチームに分かれて、各チームでそれぞれの基板を使って CPU を設計します。チーム内では、基本的に次のような係の人がいます。

  • コンパイラ係
    実験の課題として教員から与えられる O'Caml で書かれたプログラムを、チーム内で設計したアーキテクチャ上で動く機械語に変換するようなコンパイラを作る人。課題では、レイ トレーシングという 3 次元の光線追跡を行うプログラムが与えられます。毎年変わらないらしい。
  • 基板係
    実験では、FPGA という配線情報が書き換えられる特殊なチップが搭載された基板を利用します。この FPGA に書きこむ配線情報を、ハードウェア記述言語 (VHDL) を用いて設計する人間のこと。要は回路屋さんです。回路設計のほかに、コンピュータとシリアル通信を行うために、拡張基板上で実際にコンデンサなどのはんだ付けも行うらしいです。
  • シミュレータ係
    コンパイラ係と基板係の橋渡し役みたいな人間です。コンパイラ係が持ってきた機械語を実際の基板上で動かす前に、論理的な整合性がとれているかどうかをソフトウェア的に検証する人です。基板係が書いた配線をソフトウェアで書きなおして、コンパイルされた課題のプログラムが正しく動作するかどうかを確認します。
  • 班長
    あまり特殊な仕事があるわけじゃないですが、チームの進捗を管理する義務があります。最終発表は来年 3 月頭、すなわち 5 か月先までの長期的なスケジュールを考え、開発の日程を管理するプロマネ的存在です。また火曜日の実験のコマで、その週までにできた進捗報告もプレゼンテーションするらしいです。

そんなわけで、僕らの班はあっさりチームが決定されました。ほとんどが僕の趣味のせいです。もともと、C# を使ったコンパイラで Intel Itanium っぽい VLIW アーキテクチャの CPU を作る、と宣言していたので、方向性が一番固まっていましたから。結局、僕含めて集まったメンバは 6 人。チーム名はもちろん「Team C#」、いたってわかりやすい。

結局 10/1 この日は、われわれの地下控室から 4 年生を追放する日でもあったので、大掃除もしました。研究室配属になる 4 年生たちは、それぞれの私物を引き払って地下から地上の各フロアにある研究室へ旅立っていきました。そんなわけで、エアコンのフィルタ掃除をし、壁を水ぶきして、デスクを大移動し、床下に敷設された LAN と電源ケーブルの確認を行い・・・ etc. 結局、机の再配置なども含めて全部が終わったのは午後 6 時ごろだった気がします。掃除の翌日の写真:

掃除後の部屋 自分の机  ホワイトボード

なんとありがたいことに、自分の机が 1 枚、確保できました。今までは僕の固定ポジションはなくて (いやあったんですが、一番出入り口に近くて常にみんなの共用スペースでした)、作業するときも肩身が狭かったんですが、今度はゆったりできそうです。それに机の端の黒電話が輝いてます(笑) 構内の内線電話、今度からは事務からの電話は僕が取り次ぐことになるみたいです。ホワイトボードのすぐ横というナイス ポジションで、さっそくチーム メンバとミーティングしました。いやー、それにしても机も広々としてるし、寝袋持ってくれば、一晩越すのも楽になりそうです。

まぁ、そんなこんなでとりあえずスタート地点には立ちましたよっ!

CPU 実験日記

はじめまして、2009 年度の東大理情 3 年の竹井です。この blog ではおもに、うちの学科の名物実験である "CPU 実験" についてレポートしていこうと思っています。おもな目的としては、後から参照して自分のチームの進捗がどうだったか検証するため、また終わった後に「こんな修羅場もあったなぁ」と回顧するため(笑)、そしてのちの世代の理情生がより高度なプロセッサを開発するのにわずかながらでも助けになれば (← 本当か?)、などなど。まぁそんなこんなで、こんな日記をつけることにします。

で、結局ナニモノ?

一般の方々も見ることを考えて、いちおうもう少し踏み込んだ自己紹介をしておきます。まず、所属から。東大理情とは、東京大学 理学部 情報科学科というところです。われわれ東大生は、1,2 年生の間は、駒場キャンパスという閑静でイチョウの綺麗な (そして秋のこの時期はとってもクサい) ところで、のんびりすごします。2 年の夏休み中には、成績そのほか運などのさまざまなファクターによる抽選 進学振り分け制度を経て、3 年生になったときの巣立ち先が決まります。そんななか哀れにも理情を進学先に選んでしまった学生は、この情報科学科に来るわけです。本拠地は、かの赤門で有名な本郷キャンパス、そこの理学部 7 号館という建物です。とくに 3 年生は地下にある学生控室 (地下端末室が正式名称らしい?) が生息場所です。なお僕の知る限り、幸か不幸かここ 3 代は男しかいません。何枚か写真も特別大公開!

狂気の巣窟へと続く道 ロッカー スペース
地下室

まっ、写真をみてもらえれば、われわれの生活環境が分かってもらえるかと・・・、でも好き好んでこんな環境にしてるわけじゃないですょ。

CPU 実験とは

3 年生は、夏と冬の両学期に情報科学実験という科目があります。ここで、いろいろなプログラミング言語を習得し、情報科学におけるパラダイムを学び、そして実践するわけです。たとえば、夏学期には OS カーネルの開発や、論理型言語 Prolog および関数型言語 O'Caml の習得、そしてハードウェア記述言語による回路設計などをやります。

それで本題となる CPU 実験は、冬学期に行われる情報科学実験 II という科目のいわば通称。その名の通り、コンピュータの心臓部である演算装置を設計し、そのうえでプログラムを実働させるというのが課題です。下の写真にある基板がその実験で使うもの。真ん中にある四角いチップが、中の配線を書き換えられる魔法の石になっているそうです。いやはや、どれだけ大変な実験なのか、始まる前から身の毛がよだつ思いですよ。

実験基板

まぁこれから半学期間、僕がどうもがいていくのか、逐一ここに記録していきますので、どうぞよろしく。