2009-01-01から1年間の記事一覧
YARVにはsetnという命令があります。これをずっとサポートしていなかったのですが、なぜかAOベンチはこの命令を使っているのに動いていました。それはこういう状況で使っているからです。 if isect.hit then col = ambient_occlusion(isect) rad.x = rad.x +…
不完全ですが、yarv2llvmからRuby/SDLを介してSDLが使えるようになりました。こんな手順で使えます。 Ruby/SDLをインストールしてください(http://www.kmc.gr.jp/~ohai/rubysdl.html) yarv2llvmについては、ここのもの(SDLブランチ)を使ってください(http://…
今は、yarv2llvmでRuby/SDLを動かそうとしています。今は、ウインドウが一瞬でてすぐ終わるというところまでできました。Ruby/SDLで定義されているメソッドやクラスの型情報を付加すると動きそうです。 本当はdxRubyが速そうで動かしてみたいのだけど、Cygwi…
エスケープ解析ですが、aoベンチに適用してみると、効果がなさそうなので中断しています。適用できる場所そのものは結構あるのですが、適用できるのがトップレベルに近い寿命の長いあまりアロケーションしないオブジェクトで、本当に適用して欲しいループの…
ちょっと試してみたら、結構うまく行きそうです。でも、ちゃんとチェックしないと訳の分からないGCのエラーでひどい目にあいそうなので、しっかりチェックします。 変更点がここにあります。 http://github.com/miura1729/yarv2llvm/commit/83758bd5c935227b…
この間思い立ってLinux(Debian)をインストールしました。yarv2llvmを動かしてみたら動きませんでした。ごちゃごちゃ調べてみたら、次のようにするととりあえず動きます。わざわざ付いているのを削るので多分問題があるんでしょうが。llvm/lib/Target/X86/X86…
yarv2llvmのマクロは、定義の中でyarv2llvmのメソッドが呼べます。これを利用するとオブジェクトの型や、スタックフレームなどメタなものに対して色々な操作ができます。まだ、APIを整備していないのでyarv2llvmの処理系の一部みたいなコードを書かないとい…
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
authorNariさんが、GCの面白いハックを行ったのでちょっと試してみました。 http://d.hatena.ne.jp/authorNari/20090511/1242054805yarv2llvmでao-benchをコンパイルする時間が速くなったか調べてみました。時間が掛かるのでao-benchの実行速度そのものは調…
yarv2llvmを細々と作っております。いまやっているのは、大きく二つです。Threadのランタイムを作るのは止まっています。いろいろ、手を広げてみんな中途半端なのは良くない傾向ですが、まあそのうち何とかなるでしょう。カオスになって収集つかなくなるかも…
うちでは仕事で使う書類は図面を除いてMS Officeを使って作っています。TeXを使うとかFOPを使うとか色々考えたのですが、他の会社などとのやり取りを考えると、MS Officeを使うのが一番かなと思います。さらに、MS OfficeではOLEを使ってアプリケーションを…
その1での手順で求めた固有ベクトルは、対応する部品と共に値が大きい順に並べると、関連のある(同じ見積書の中に出てくる可能性の高い)部品が集まります。うちのデータで行ったものはこんな感じになりました。固有ベクトルは行列の次元数だけありますが、…
私の本職は水道屋で穴を掘ったり墓穴を掘ったりして生活しています。水道屋といっても当然書類仕事もあるので、PCを活用しています。多くの場合はWordとかExcelやCADなどのアプリケーションを使って書類を作っています。こういったアプリケーションは使うこ…
追記 具体例を追加しました テストが通るようになりました。マクロではなく従来の処理部分のバグがテストに漏れて残っていました。 yarv2llvmにとても不完全ですがマクロが入りました。でも、エンバグして他のテストが通らなくなりました(最近こんなのばっか…
deliciousに面白そうなソフトウエアがブックマークされていたのでメモ Cをllvmのbitcodeに落として、それをアプリケーションに特化したプロセッサのVHDLに落とすそうです! とりあえず究極と思っていたコンパイラの形態が既にあるとは驚きです。http://tce.c…
先週のyarv2llvmの開発はそんなに時間は取っていないのですが、ずっとデバッグでした。Unsafeのサポートの為シビアに定数の畳み込みを行う必要があり、畳み込みが甘いところを直すと、既存のプログラムの型推論が失敗するということの繰り返しでした。何とか…
ランタイムをRubyで書くための準備で、Cの関数を呼べるようにしました。これで後は、動的ロードと外部変数をアクセスできるようにしたらランタイムが書けるんじゃないかなと思います。実装がバグバグなんでバグ取りが山のように残っていますが。サンプルプロ…
Unsafeの開発は結構順調です。定数伝播処理が上手に効いて、一見配列やオブジェクトを作るような効率の悪そうなコードが、構造体へのアクセス命令だけで済んでいます。 def unsafe type = LLVM::struct([RubyHelpers::VALUE, RubyHelpers::VALUE]) a = [:a] …
LLVM勉強会でスレッドが並列に動いてないと指摘を受けて、ジャイアントロックをはずした独自ランタイムを作ろうとしています。 http://d.hatena.ne.jp/miura1729/20090323/1237799188 ところが、スレッドを実現するランタイムはかなり大きく、これをLLVMで手…
http://d.hatena.ne.jp/teruyastar/20090406/1238950447 考えさせられる記事ですね。個人的には、この記事中の「要領の悪い人」に分類される天才の方が多いような気がする。本当の天才だと相当運が良くないと認められないですよね。他にそんなこと考えている…
今、LLVMのソースを読んでいます。そしたら、recompileAndRelinkFunctionなるメソッドを見つけました。後は、実行中のフレームを書き換える目処が付いたらLLVMでon-stack replacementできそうです。フレームを書き換えるところは、GC APIが有望そうなのです…
ひそかに開発していた有料版yarv2llvmが今日完成しましたのでお知らせします。値段は5000円(または$49)で、Free版に比べて次のようなメリットがあります。 しっかりしたテストによる信頼性の向上 例外、bignum、callcc、メソッドの再定義などのサポート より…
unladen-swallowのGCの概要のページが載っていたのでメモ http://code.google.com/p/unladen-swallow/wiki/GarbageCollectorllvmのGC APIを使うとon stack replacementができるかもしれないなー これもメモ http://llvm.org/docs/GarbageCollection.html追記…
LLVM勉強会の途中で笹田さんたちと話した内容です。 さ ささださんたち み 私(みうら) 互換性をUPさせる方策 さ トップレベル環境はあえてコンパイルしないようにすると互換性が取りやすいのではないか。例えば、 if $debug then def foo デバッグバージョン…
LLVM勉強会でyarv2llvmでrb_thread_createで作ったスレッドが、マルチコアで並行にスレッドが動いているか、いないかの話の続きです。 既にささださんはじめ皆様から指摘されているように、ジャイアントロックが掛かっているので並行には動いていないことを…
第2回LLVM勉強会で発表させてもらいました。へたくそなプレゼンで申し訳ありません。今後、人前で喋る予定が色々あるので自分の身の程を知って練習しないといけないなーと痛感できました。それでも、的確な質問や助言を頂き、ありがたかったです。また、聞…
yarv2llvmを使っていたらバグに遭遇してしまいました。エンバグで勉強会のデモが動かなくなるのが怖くて躊躇したのですが、あまりにもひどいバグなので直しました。バグの内容はRuby1.9のソースに入っている、benchmark/bm_vm2_poly_method.rbがまだ多態メソ…
前回の日記の続きですが、こんな込み入ったことどー考えても私には口頭で説明できないのでここに書いてしまいます。あんまり効果なかったし...。 前回までのあらすじ yarv2llvmでどう考えても無駄なコードが生成される。でも、コードが無駄かどうかは最適化…
AOベンチをyarv2llvmでコンパイルした結果を見てみました。1万行以上になっていてびっくりです。 かなり悲しいコードが生成されていました。 %80 = load i32* %50 ; <i32> [#uses=1] %81 = inttoptr i32 %80 to { { i32, i32 }, double }* ; <{ { i32, i32 }, dou</i32>…
今日、親がテレビで野球を見ていました。あれ? 珍しいカードをテレビ中継しているなー、中日-日ハム戦かー、ってマジで思いました。その割にはなんで楽天のユニホーム着てるのかな? ・・・、お前なんて日本人じゃねーといわれればそうかもしれないですが、…