2009-01-03
yarv2llvmの進捗
結局、正月休みをyarv2llvmの開発に費やしてしまいました。結構進みました。
- ruby yarv2llvm.rb Rubyプログラム の形で起動する形式で、bm_so_nbody.rbが大体動くようになりました。大体なのは、SOLAR_MASS = 4 * Math::PI**2 の行が型エラーになるので、4 -> 4.0にするのと、**がまだ実現できていないので、Math::PI * Math::PIに変更しました。
- ruby yar2llvm.rb 形式でオプションを渡せるようになりました。
Usage: yarv2llvm [options]
-O, --[no-]optimize オプティマイザを起動する(デフォルトで起動)
--[no-]disasm 生成したllvmコードをディスアセンブルして出力する
--[no-]dump-yarv YARVを出力する
--write-bc[=File] 生成したllvmコード(bitコード)をファイルに出力する
--[no-]func-signature メソッドとローカル変数の型推論の結果を表示する
-r FILE FILEに示すRubyプログラムをコンパイルに先立って実行する
- ある程度ちゃんとしたプロファイラがサポートされます。プロファイラの起動は-rオプションを使い、-r y2llib/profile.rbで起動できます。yarv2llvmのライブラリを格納するのにy2llibディレクトリを追加しました。今のところprofile.rbだけしかないですが、いろいろ追加したいと思います。
サンプルセッション
ruby19 yarv2llvm.rb -r y2llib/profile.rb ../fib.rb
89
766 1: require 'yarv2llvm'
2: module YARV2LLVM
3: PROFILER_STATICS = [0.0]
4: end
5:
6: END {
7: src_content = {}
8: YARV2LLVM::TRACE_INFO.each do |n|
9: if /^(.*):(.*)/ =~ n[1][3]
10: fn = $1
11: ln = $2
12: src_content[fn] = File.readlines(fn)
13: end
14: end
15:
16: res = Hash.new(0)
17: YARV2LLVM::TRACE_INFO.each_with_index do |n, i|
18: res[n[1][3]] += YARV2LLVM::PROFILER_STATICS[i]
19: end
20:
21: src_content.each do |fn, cont|
22: cont.each_with_index do |srcln, ln|
23: re = res[fn + ":" + (ln + 1).to_s].to_i
24: if re != 0 then
25: printf("%10d %5d: %s", re, ln + 1, srcln)
26: else
27: printf(" %5d: %s", ln + 1, srcln)
28: end
29: end
30: end
31: }
32:
33: <<-EOS
34: module YARV2LLVM
35: def trace_func(event, no)
36: if event == 1 or event == 8 then # Line or funcdef
37: if $fst == 1 then
38: $fst = 0
39: $prev_no = 0
40: get_interval_cycle
41: end
42: interval = get_interval_cycle.to_f
43: PROFILER_STATICS[$prev_no] += interval
44: $prev_no = no
45:
46: # Profile process dont count
47: get_interval_cycle
48: nil
49: end
50: end
51:
52: $fst = 1
53: i = 0
54: TRACE_INFO.each do |n|
55: PROFILER_STATICS[i] = 0.0
56: i = i + 1
57: end
58: end
59:
60: EOS
216952 1: def fib(n)
217593 2: if n < 2 then
129407 3: 1
4: else
103550 5: fib(n - 1) + fib(n - 2)
6: end
7: end
8:
9: p fib(10)
コメントを書く
トラックバック - http://d.hatena.ne.jp/miura1729/20090103/1230985893
リンク元
- 27 http://www.rubyist.net/~kazu/samidare/
- 4 http://llvmruby.org/wordpress-llvmruby/
- 3 http://d.hatena.ne.jp/keywordmobile/LLVM
- 2 http://a.hatena.ne.jp/fujita-y/
- 2 http://a.hatena.ne.jp/kei-os2007/
- 2 http://kizasi.jp/show.py/detail?kw_expr=CPS変換&end=1200322799&ref=topics
- 2 http://s.hatena.ne.jp/mobile/miura1729/
- 2 http://www.google.co.jp/search?hl=ja&lr=&safe=off&pwst=1&q=yarv2llvm&start=0&sa=N
- 2 http://www.google.co.jp/search?q=RFC1213&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 2 http://www.google.co.jp/search?q=Ypsilon+Scheme&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a