いろいろなんでも

課題スタック
実験レポートのない週の日曜日が課題デーと化しておる。

  • 計算理論
    • 海賊船ゲーム。7/6の最終戦付近でごちゃごちゃするクソゲーになりそうで嫌だ。
  • コンピュータアーキテクチャ
    • 7/5までの普通の課題と7/10までの設計コンテストとかいうやつ。エッジフィルタ処理で、ハードウェア(Verilog)とプログラムをいじってステップ数と最大遅延時間と面積を小さくするゲーム。優秀者は試験免除で無条件にAということだが…?
  • データモデリング
    • 6/30までに北斗データベースを完成させること。
  • プログラミング第2
    • だるくてまだやってない。6/30まで。
  • 計算モデル論
    • 期末試験期間が終わるまでだが終わらせてしまいたい。


パワプロ
また世紀末チームとAngel Beats!チームとの対戦が行われましたが、5回くらいまでは2−2で耐えていたものの、案の定その後崩壊。スタミナCのユダ様1人じゃチートチーム相手に9回とかまったく無理。ついでにKDVチームとやって凌辱しました。サウザーは案の定無茶苦茶でした。パワーAのアベレージヒッターと走力15(走塁4はない)により、ミート打ちで3塁打をかまします(ただしKDVチーム相手に限る)。守備でもものすごいスピードでバックします。
もはや頼れる先発ケンシロウの作成が急務となり、あかつきの投手に手を出しました。3年春の大会までで変化球8球成功*1が1回。初心者なので残当


非想天則
次期代表内定済みの矢木(仮名)くんが最有力新人人形遣い候補になりました。いやなんか誘わなくても勝手になってました。KDVクロニクルによれば彼はKDVに入るまで北斗のコントローラを握ったことがなく、動画鑑賞勢だったとのこと。何度か対戦した経験から言うとまごうことなきガチ北斗勢です。他のキャラを使うとJAやグレイズ打撃や無敵切り返しに甘えるからやめろと言っておきました。自分でもどうかと思います。
あー今日もセッカツ擦ったなあ。


今日のコンパイラ構成論
OCamlで書かれたCっぽい言語の生成規則・字句解析器・構文解析器の説明を1時間ずっとしてました。しかし字句解析までしか終わらなかった。字句解析はアドリブで、言葉を借りるならアドホックにやってました。しかし字句解析だけを見れば多分C/Javaでみんな楽に分かるんだろうなあと考えてしまう。まあメインは構文解析だろうから(?)仕方ないね。
「nextToken関数(空白スキップ機能つき次のトークン)は、まずnativeNextToken関数で次のトークンを読んでtokenに束縛し、空白文字だったらnextToken関数、そうでなければtokenを返す」(めんどいので日本語で)とかを見て「スペースやタブや改行が100個くらい連続で来たら再帰呼び出しの階層がひどいなこれ」「あ、末尾再帰だからこういう言語だと余裕なのか」「オレも関数脳が足りんな…」などととりとめもないことを何となく考えながら矢上を出ました。
第1次地雷とほぼ同じ体裁のOCamlコード解説でしたが、コンパイラが何をやるのかもまだこれからやるというときに、構文解析済みの構文木をインタプリットするコードの修正を課されるというクソゲーとは訳が違うので、今回はみんな耐えると勝手に予想。勝手に予想。


2日前のコンピュータアーキテクチャ
パイプラインと各種ハザードのお話2。分岐命令に起因する制御ハザードについて。
分岐命令が来たらそれと同時にフェッチしている命令を無効にしてしまおう(NOPに書き換えてしまうととりあえずここでは楽)(ただし当然その分遅くなる)→分岐条件が成立しなければ別にその必要はなくね?→predict-not-taken(飛ばない方に賭ける)最も簡単でしょぼい分岐予測
100回のループでは99回条件が満たされジャンプするわけで、飛ぶ方が多い。あんまりよくならない。分岐予測についてはこれだけ。
遅延分岐
ハードウェアでは何もしない。パイプラインのステージ設計にもよるが、今の場合、条件が満たされた場合、1つ下の1命令が実行された後ジャンプする。で、それをそういうものだと受け入れる。条件分岐命令を「条件が満たされていたら次の1命令を実行した後ジャンプする」というものだとする。この勢い余って実行されてしまう部分を遅延スロットと呼ぶ。ここに条件判断に使われないレジスタの操作などを入れることで性能の低下を防ぐことができる。どうしても無理ならNOPを入れる。これは命令スケジューリングと呼ばれ、Cコンパイラがやったりする。
…なに概略書いてんだか。で、聞きながら適当に「命令スケジューリング」でググってみたら某大学の某情報科学科の某CPU実験の日記で依存関係をグラフ*2化→クリティカルパスを求める→クリティカルパスが最小になるように並べ替え、というのを実装したとかなんとかいうのが出てきました。適当にごそごそやってたらスミスくんとこで見たような名前がちらほら。うーん、やはりこの世界は狭いな…、と無駄な感慨にふける。そういやコード生成とか最適化とかバックエンドの部分はコンパイラ構成論じゃやらないしよく知らないなと前買ったドラゴンブック見てみたら普通に章があった。
ハードウェアアーキテクチャアルゴリズム理論を合わせたこういうのみたいなのにやりがいを感じる(やってないけど!!!)。私の性向を知りたいなら参考にしてください。ちょっとググると昔の志望科とか割れるかもしれないけど知りたいならそれもよかろうて。北斗のある今の生活に不満はない。ソフトフォーラム*3なあ…。

*1:変化量+1のバランスブレイカー。

*2:X-Y軸のグラフじゃなくてノードとエッジのあれだよ。

*3:カルト宗教yappy教の本拠地。