Entries from 2008-04-01 to 1 month

昨日読んだ論文から

native の 20-40%の速度が出たらしい ソフトウェアで実装される VM では命令のフェッチとデコード(実行ルーチンへのディスパッチ処理)がそのまま実行のオーバーヘッドになる これらはネイティブコードにはない固有の処理である 実行する命令数を減らす(ル…

let 境界と jump のバグ発見 - Scheme VM を書く

pass2(最適化フェーズ)でnamed let または letrec のような local クロージャの call をループ(jump)に変換するときに、その jump がもっとも内側の let の境界を越えてしまいスタックフレームが壊れるバグに遭遇。 pass2 は Gauche のものをほぼそのま…

重いバグ修正 その2 - Scheme VM を書く

pass3/$call で embedded のときに args のコンパイル引数の frees が frees-here であるべきバグを修正した。(r5236) このバグも調べるのが大変だった。

うお

ビューティフルコード 4/23 発売か。

「Schemeインタプリタにおける仮想マシンアーキテクチャの最適化」を読んだ

ko1さんにすすめられていた論文が無料で読めるらしいので読んでみた。 こんな濃い内容の論文が日本語で無料で読めるのはありがたい。 命令融合やるかなあ?その前にもう少しコードを見直そう。

ぐっとこらえる

部分継続とかテンプレートで遊びたいとか、あの論文読みたいとかあるが、ぐっとこらえて今やるべき事をやる。 僕は不器用なのでいろいろやると、全部身につかず終わるからなあ。

重いバグ修正 1件 - Scheme VM を書く

まとめは2行だが調べるのは時間がかかった。 $call の find-free で proc -> args の順序で free variables を探していたが良く考えるとこれはまずい。 評価されるのは args の方なので args -> proc の順であるべき。根深いバグになりそうなのでメモ。

call時のスタックオーバーフローをチェックを実装した - Scheme VM を書く

以前は push 時にスタックオーバーフローをチェックしていたが、パフォーマンス上 call 時にチェックしたほうが速い(らしい)ので実装。手順は コンパイル時:コンパイル時に各コード片のスタック使用量を計算しコンパイル結果に反映 コンパイル時:CLOSURE…

がんばってバグれ!!!

妻のメッセンジャーでの一言「がんばってバグれ!!!」。 言いたいことは何となく分かるw。

USBキーボード ウルトラナビ付のトラックポイントは有効にしつつタッチパッドは無効にする方法

「USBキーボード ウルトラナビ付」のトラックポイントを有効にしつつタッチパッドは無効にする方法を探していたところ 昨日コメントで id:elimさんと通りすがりさんに教えていただきました。 ありがとうございます。 うまくいったのでその方法まとめておきま…

チューニング方針 - Scheme VM を書く

論文を読んだので方針を決めたいところ。 読んで学んだのが「無視できないディスパッチのコスト」を考慮しなければいけないということ。 threaded コードは既に実施済みなので、命令の合成が効果的が高そうであるということがよく分かった。 少なくとも論文…

fread の第2引数と第3引数を間違えた

fread の第2引数と第3引数を間違えてはまりました。 光成さんによれば「VCだとfread( と入力した時点でプロトタイプヒントがでるから間違えないよ」との事。Emacs にもこういうのありそうな気がするんですが、良いのがあったら教えてください

UbuntuでUSBキーボートのタッチパッドを無効にしたい

無効にしたい。

Wiliki の検索をFirefox のキーワードブックマークにした

http://practical-scheme.net/wiliki/wiliki.cgi?c=s&key=%sR6RSの調べ物で良く使わせていただくので簡単に検索できるようにFirefox のキーワードブックマークした。 Wiliki の検索フォームは POST なのだけど GET で使って良いのかな?まずかったらやめます…

stack 使用量対応

今日中には終わらなかった。無念。

ループ改善 - Scheme VM を書く

昨日の発見を教訓に多く呼ばれる命令を gcc -S を眺める。 多く呼ばれる命令 Top 5 の gcc -S を眺める PUSH スタックオーバーフローのチェックがやはり長いですね。 それ以外は想定通り。 CONSTANT 問題無し。 REFER_LOCAL 問題無し。 REFER_FREE scheme::O…

2008/4/13 の comp.lang.scheme

Inconsistent handling of letrec internal define と letrec がよく分かっていない人は読むと良い。 Call for Participation: S3 Workshop on Self-sustaining Systems (S3) 2008 Self-sustaining がよく分からないな。あとで調べる。

スタックポインタを本当にポインタにする - Scheme VM を書く

PUSH 命令やスタック参照を速く出来ないかと考えたところスタックポインタを本当にポインタにすることを思いつきました。 今までは VM が Gauche 「でも」書かれていることを考慮してスタックポインタ sp は stack 配列の index として機能していました。 つ…

スタックオーバーフローの話 - Scheme VM を書く

昨日スタックオーバーフローのチェックの話を書いたところ、ささださんと shiro さんから「PUSH 時ではなくて CALL 時にチェックすれば良いのではないか?」と教えていただきました。 つまり コンパイル時にそれぞれの call が最大で消費するスタックの量を記…

Continuation Fest 2008に行ってきました

Continuation Fest 2008 に行ってきました。 会場には早めについた。入り口のところでささださんに「来るとは思わなかった」と言われる(ぉ。 アカデミックな感じでアウェー感がただよってる(笑)。 所属を書いたネームプレートは大学ばかりだ。胸を張って…

アセンブリコードを読んでみたら - Scheme VM を書く

Gaku さんに指摘された件。 命令列の終端に達しているか?を毎回チェックしているが重そうだよねえという話。 確かに僕も気になっていた。これを番人形式にすれば速いのではなかろうか。 ただやってみるのではなくてアセンブリのコードを眺める。 その後にど…

パフォーマンスチューニングに関してのお言葉 - Scheme VM を書く

mumurik 氏による連載(今後も続くようです) 本人はパフォーマンスチューニングについては詳しくないと謙遜されていましたが僕より明らかに詳しいし経験もあるみたいなので無理やりお願いしてまとめていただいています。 場当たり的なパフォーマンスチュー…

Mac OSX対応 - Scheme VM を書く

Mac OSX でビルドできるようになったみたいです。Gaku さんに感謝。

計測 & トライ - Scheme VM を書く

さて未だに「何をどう変えたら、どのくらい速くなるか?」などの感覚は得ることは出来ていませんが、計測の重要さは分かってきました。 そこでベンチマークスクリプトを書いて簡単に計測結果を日記貼り用出力に変換するところまで面倒を見ることにしました。…

計測計測 - Scheme VM を書く

目に留まること PUSH,CONSTANT,APPLY,REFER_FREE,REFER_LOCAL0 が多い DISPLAY 重い APPLY 重め 繰り返しで多いもの 引数を参照して次の手続きの引数として PUSH 引数としてPUSHしたものをすぐに参照 当たり前だけど PUSH が多い 回数は少ないが BOX が重い …

uri decode 動いた - Scheme VM を書く

入力は UTF-8 前提ですが uri decode が動きました。 コードが不完全なのはあとで直すとしてとにかくうれしい。 なぜうれしいかというと R5RS の範囲では uri decode を書くのは、無理なのだけど R6RS では書けるから。 BinaryInputPort, TextualInputPort, …

2008/4/10 の comp.lang.scheme

ELS'08 news: programme published, registration, and more...

fib の実行命令総数比較 - Scheme VM を書く

fib(26) における実行命令総数比較。 Gauche 自前 2811342 3435386 これはちょっと差がありすぎですね。 (define (fib n) (if (<= n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) 自前。 #(CLOSURE 38 1 #f 0 0 REFER_LOCAL0 1 PUSH 2 CONSTANT 2 4 BRANCH_NUMBE…

fib深追い 2 - Scheme VM を書く

Scheme/L.VMを作る/12.コンパイラ高速化/fib(26)の計測データのGakuさんがまとめてくれたデータを見るといろいろ分かることがある。 大半の命令の実行速度は変わらない 実装レベルでは結構処理が違うのにも関わらず もしかしたら合成命令にしても元の命令た…

ありがたい

Gakuさんがいつものように僕の議論の相手になってくれ、shiroさん、ko1さん実体験に基づきコメントしてくれる。 なんという豪華なメンバーに支えられてるんだ。ありがたい。 追記 ko1さんのフォロー。 http://www.atdot.net/~ko1/diary/200804.html#d11