2009/11/26

コンパイラのお仕事 番外編

ぐはーーーーーーー! 笑うしかない竹井です。「コンパイラのお仕事 その 3」を執筆してるぜー、みたいな話を友達としていて、その途中で壮大な過ちに気付いてしまって、もはや地下にいる人間で大爆笑状態です。

えっと細かい経緯を話すと、「その 3」では型システムについてのお話を書いてるんですが、うちのコンパイラには今のところ型システムが搭載されてないんですよね。というのも、実験の課題として与えられるレイトレーシングのプログラムは毎年同じように使われているもので、動くのが当たり前、、、つまり型の整合性も取れてて当たり前・・・という感じなんですよね。さらに、与えられているプログラムは (create_array というライブラリ関数以外) 単相型のみであってタイプ ジェネリックはない上に、O'Caml の演算子では整数は + なのに対して浮動小数点は +. のように、別の演算子を使うんですよ。だから、まったく型システムの存在を考慮しないで、コンパイラが書けちゃうんですよ・・・

少なくとも・・・ほんの 10 分前までそう思ってました

それでつい一昨日、うちの班でもシミュレータさんが初画像を出してくれたんですよ。まぁちょっと薄暗いんですが・・・。こんな感じです↓ まぁ新井さんが動くまでの経緯やなんかを記事に書いてくれると信じてますので、乞うご期待。

うちの班の出力画像正解画像

で、たまたま今日さっき生協購買部から帰ってくるとき、「最近 CPU 実験日記にマジメな記事が少ないんじゃないー?」みたいなことを言われて、「いや、その 3 を執筆中だけど、うちのコンパイラは型システムがないから、書くのが大変なんだ」的な返答をしたら、「本当に型の考慮しないでも平気なの?」と言われて、上に書いたような返答をしたら・・・「それ、不等号とかの型判定はどうしてんの?」と・・・。

ガーーーーン

えっと、不等号の型を変えるのを忘れていました、完全に。つまり、整数の大小比較も浮動小数点の大小比較も、まったく同じ slt というマシン命令を使ってました。いやー・・・本当に完全に大小比較について整数と浮動小数点を使い分けるのを忘れてましたよ。まさかこんな罠があったとは・・・。

それでも・・・急いで地下に戻って「いや、そんなことはない・・・」と言い聞かせながら(笑) シミュレータさんが僕に送ってきた命令実行の統計情報を見てみると・・・

統計情報

そーですね・・・たしかに slt という整数の大小比較命令は大量に発行されてるのに、fslt という浮動小数点の大小比較命令はなっしんぐ orz ナンテコッタ

でも、まいっか、画像でたし♪

0 件のコメント:

コメントを投稿