Entries from 2008-04-01 to 1 month

takl を深追い

takl ベンチマークで遠く Gauche におよばないので調べます。約10倍 Gauche が速いです。 ;;; TAKL -- The TAKeuchi function using lists as counters. ;;; from http://www.ccs.neu.edu/home/will/Twobit/benchmarksAbout.html (define (listn n) (if (= n…

ひげ

スラッシュドット・ジャパン | 髭がある程プログラミング言語は繁栄する?名前にひげが付くってのはダメかな。

gcc の -Wall 以外の警告オプション

c c++

以前同僚の光成さんが、以下の warning オプションを使っていると書かれていたのが気になったので調べてみました。 -Wall -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith もし上記以外にも良さげなオ…

Gauche の $if の最適化 - Scheme VM を書く

if ではなくて $if なので注意。 Scheme の and や or などでは最後に評価した test clause の結果を返します。 この最後に評価した test clause ってのが $it です。 アナフォリックマクロで言えばずばり it のことですね。 これは通常の Scheme の if では…

Gauche の branch命令って

Gauche の branch 命令は tail context の場合 LOCAL_JMP ではなくて RET を生成するのですね。 なるほど。真似したい。

一番小さいコードを吐く Scheme コンパイラは?という話題 - 今日の comp.lang.scheme

Small executables from Schemeという話題。 この議論では結論は出ていませんが面白いですね。 しかし必ずコンパイラの話題になると Stalin が出てくるなあ。 今度ソース読んでみるか。

合成命令 良い傾向悪い傾向 - Scheme VM を書く

グラフは 青が自前 Scheme の速度 赤が Gauche の速度 緑は自前処理系の実行命令数 横軸は合成命令を増やしていく様子 様子 cpstak.scm は当初から Gauche に勝っていたが差が開きました。 sum.scm, array1.scm は Gauche に追いつきました。 fib.scm, case.…

util.match は便利だけどどう展開されるの?

Gauche の util.match (Andrew Wright の match)はとても便利で自前の処理系にも移植して使っています。 自前のコンパイラ内でも match を使っていてコードの可読性と拡張性を高めてくれています。 ただ match がどう展開されるかを見たことがなかったので…

続 Core2Duo の SpeedStep のせいだろうか?@Ubuntu Edgy on Thinkpad X60

Core2Duo の SpeedStep のせいだろうか?@Ubuntu Edgy on Thinkpad X60の件ですが、BIOSにSpeedStep の設定がありました。 AC電源で動作している時はモードが Auto だったのですが、パフォーマンス優先的な設定に変更したところ安定しています。 Auto にする…

荒川サイクリングコースで河口まで行ってきた

前回は多摩川に行ったので今回は荒川です。 荒川のサイクリングコースを楽しむには、あえて埼玉県川まで行った方が良さそう。 ということで山手通りをずっと北上していき戸田あたりまで行きました。 山手通りは排ガスもすごいし全く楽しくありません。これは…

yarv-dev

yarv-dev の過去ログを読んでいるのですが面子がすごすぎる。 鼻血が出そう。

合成命令調子悪し - Scheme VM を書く

以下の2つの合成命令化が返ってパフォーマンスを悪くすることが分かった。 LEAVE 1 => LEAVE1 APPLY 1 => APPLY1 APPLY に関して APPLY はコードが長いので影響を与えているかもしれない。 APPLY 1 は APPLY のコピペで済ませる APPLY の処理を関数化して AP…

バグ深追い中

最小限の再現コードを作るときにアドレナリンが出ている気がする。 それでいいのか? 追記1 最小限のコード特定。'G5 が謎だ… 'G5 (and 0) (>= 0) 追記2 謎判明。 G といえば! Gauche のプログラマならお馴染み gensym だよねぇ。 C++ で書いた gensym 手続…

ちょっと Monarm が来ましたよ

MonaOSをARM上に移植してみます。これはすごい。 移植性の高いカーネルを書いているか試されますが全く自信がありません。。。 コードが見られないなあ。

Core2Duo の SpeedStep のせいだろうか?@Ubuntu Edgy on Thinkpad X60

ベンチマーク中に突然 Gauche と自前 Scheme がぴったり半分のパフォーマンスしかでなくなるときがありました。 この状態になると中々元のパフォーマンスに戻りません。 top を見てもスワップしているとか、他のプロセスが悪さしている様子が全くないので原…

今日の作業 - Scheme VM を書く

いくつかバグ修正。 コンパイラが合成命令で動いていなかった compile-partial に合成命令生成が入ってなかった コンパイラが合成命令で動かなかった コンパイラのコード自身が含む定数の並びが合成の対象になっていた。 特定のコードが動かない プリコンパ…

再度合成命令 - Scheme VM を書く

今度こそ良い傾向が出てきました。(let.scm の挙動がおかしいのは明日調べる) 命令数が減ったからといって単調速度増加にならない場合があります。 しかしながらグラフを見ると分かりますが長い目で見れば速くなっていきます。 ただまだ Gauche との間には…

計測の考察 - Scheme VM を書く

一昨日の結果が不可解だったので、Gakuさんにアドバイスをもらいつつ考えてみる。 fib.scm が合成命令導入で速くなっていないのはなぜか? この原因が分からないことには進めない。 疑わしいのはコンパイル時間? コンパイル時間の計測をしてみよう 計測する…

京都は放映しているアニメが少ないんだよと切々と訴えられる夢を見た。(根拠はありません)

Gaucheの let-args 便利だな

gauche.parseoptの let-args 便利。 気軽にオプションつけるときに。真似しよう。

合成命令途中経過

グラフのみ。 array1 は命令数の減少と速度向上が同じような動きで一番求めていた結果。 他がまだ微妙 という感じです。>Gakuさん

ここ数日苦労していたこと解決 - Scheme VM を書く

数日前に、合成命令を導入するとその前後でどのように速度に変化があるか?を調べていたのだけど、コンパイラに合成命令を吐かせるのに苦労していました。 苦労していた点は コンパイラが(自分にとって相対的に)複雑になってきたことによる改修コストの増…

考え中

うーんとノートに図を描きながら悩む。 ふと右斜め後ろを見るとid:nishiohirokazuが同じく物思いにふけっているご様子@サイボウズ・ラボ

合成命令を生成するコンパイラ部分でハマり中

むぅ。

合成命令 + 測定 その2 - Scheme VM を書く

さあ実際に合成していきましょう。 前回の測定から頻出パターンスクリプトを改善して測定し直しました。 合成命令なし 全く合成命令がない状態での測定結果です。 (REFER_LOCAL 0) が頻出の様です。 (REFER_LOCAL 0 PUSH) も頻出ですが まずは (REFER_LOCAL …

頻出パターン検出スクリプトが遅かったので

1GBくらいのファイルを読んで頻出パターンを適当に力業で検出する Gauche で書いたスクリプトが遅かったので C++ で書き直した。 結局 を使ったり mmap にしたり した。しかし __gnu_cxx::hash_map という名前空間のものを使うのは気が引ける。 追記 tr1::un…

今日やったこと

合成命令のための基盤作り より広範囲なコードを試すためにベンチマークを増やす 合成命令の頻出度が簡単に分かるように 合計命令数が簡単に分かるように。 グラフを簡単に描きやすくするように どれくらい簡単にできるようにしたいか? make bench で実行時…

OpenOffice.org の Spreadsheet でベンチーマークのグラフを描いたときのメモ

ベンチマークのグラフをきれいに描きたかったので試行錯誤したときのメモです。 目的 Gauche との速度比較、命令数と速度の相関などを1つのグラフで見たい! データ準備 上記のデータを用意します。データはダミーです。 これはベンチマークに関するデータで…

合成命令 + 測定 その1 - Scheme VM を書く

以前実装した合成命令をまず廃止した。この状態からきちんと命令が現れる頻度を測定して採用する合成命令を決める。 make bench とやると以下の表が出力される。(とても時間がかかりますがこりゃ便利) REFER_LOCAL0とかは合成命令ではなくてオペランドも合…

Gambitのベンチマークコード(コメント付き)

Description of the Gambit benchmarks, with comments.