ひとり勉強会

ひとり楽しく勉強会

2007-01-01から1ヶ月間の記事一覧

まとめ

力尽きたのでこの辺りで今回はおしまいにします。次回は1.4の途中「最小作用のpathを探す」節から再開します。上では、直線で動くのが「ありうる動き」だとわかってたので、あー確かにその付近では最小だねーという「検算」ができました。では、元々よくわか…

1.4 Computing Actions

さて、ここまでの知識を実際にSchemeで動かしてみようタイムです。guile版を準備。 guile> (load "/usr/local/scim/load.scm") guile> (set-current-module generic-environment) guile> (define D derivative) 一番簡単な例として、1個の粒子が自由に飛ん…

1.3 Generalized Coordinates

一般座標。自由度がnの系のconfigurationは、n個(以上)の変数で記述できる。簡単のためにしばらくは、常にピタリn個で記述する場合のみを考える。その方が変数間の制約などを考えなくていいので楽。変数は、「各粒子のxyz座標」のようなお決まりの取り方じゃ…

1.2 Configuration Spaces

Configuration space システムのとりうるConfiguration全ての集合 Dimension システムのConfigurationを一意に特定するのに最小で何個のパラメタが要るか。自由度(degrees of freedom)ともいう。 例えば粒子が一個自由に飛んでるシステムの自由度は3。二個…

1.1 The Principle of Stationary Action

停留作用の原理。Path-distinguishing function て、どういう関数になるのか考えてみよう。いやその前に、「ありうる動き」の特徴について考えてみよう。 連続。滑らか。いきなり物体が瞬間移動したりはしない。 履歴に依存してない。"現在のconfiguration"…

1 Lagrangian Mechanics

ラグランジュ力学。物体がたくさんあって、それぞれ相互作用したりしなかったりしてるシステムを記述したい。 Configuration ある時点、時間軸上での一点での、システムの「状態」のこと。システム内の全物体の位置、みたいな情報のことだと思う。具体的にど…

資料

//mitpress.mit.edu/SICM/">Structure and Interpretation of Classical Mechanics:本家本元です。HTMLで全文読めます。トップページの Looking for Scheme? のリンクからは、本で使われている力学計算のためのSchemeライブラリが入手できます。MIT/GNU Sche…

SICM 読書会 (1)

水曜日は Structure and Interpretation of Classical Mechanics (SICM, 古典力学の構造と解釈) の読書会をやります。プログラミングの教科書として、SICP(計算機プログラムの構造と解釈)という有名な本があります。SICM は同じ著者による、古典力学につい…

まとめ

今日はYARVの最適化フェーズについてでした。 ピープホール最適化 特化命令 (オペランド融合) (命令融合) (スタックキャッシング) 専用命令を新しく作る系の最適化に関しては、定義ファイルから新しい命令を自動生成という形になっているのが面白いなーと思…

set_sequence_stackcaching

YARV Maniacs【第8回】 によると「性能上の問題から、現時点では有効にできないようにしてあります」とのことです。一応ソースだけ読んでみました。スタックの先頭付近最大2個分だけ特別な領域(AレジスタとBレジスタ)に持っておいて、スタック操作命令の…

iseq_insns_unification

命令融合。こちらも同じく現在はOFFになってるみたいです。一応ソースだけ読んでみました。さっき見たオペランド融合は、よくある「命令+オペランド」の組を1個の専用融合命令に置き換えてしまう最適化でした。こっちの命令融合というのは、よく連続する命…

insn_operands_unification

オペランド融合。この最適化は現在はOFFになってるみたいです。一応ソースだけ読んでみました。この関数は、ビルド時に定義ファイル"opt_operand.def"から自動生成されます。(自動生成スクリプトは"tool/insns2vm.rb"。)定義ファイルの中身はこんな感じで…

iseq_specialized_instruction

こちらについては YARV Maniacs 【第9回】 で丸々1回をさいて解説されています。引用させていただくと、 すでに述べたように「1 + 2」のようなプログラムは Ruby では「1.+(2)」と解釈されますが、コンパイル時にチェックして、 呼び出すメソッドが "+" 引…

iseq_peephole_optimize

コンパイル結果を局所的に見て、ちょこちょこっと命令列を効率の良いものに書き換えていく最適化を、ピープホール最適化(覗き穴最適化)と言います。現在のYARVでは、無駄なジャンプ命令を見つけては書き換えるというピープホール最適化を行っています。 st…

最適化の流れ

だいぶ間が空いてしまったので、まずは流れのおさらいから。 yarvcore_eval_parsed @ yarvcore.c th_compile_from_node @ yarvcore.c yarv_iseq_new_with_opt @ iseq.c iseq_compile @ compile.c iseq_compile_each @ compile.c iseq_setup @ compile.c 第3…

YARVソースコード勉強会(10)

今日から、最適化の部分を読みにかかります。の、前に。 元旦にRuby本家にYARVがマージされたそうです([ruby-dev: 30061])。今年からはこちらを読んでいこうと思います。レポジトリのURLは http://svn.ruby-lang.org/repos/ruby/trunk で、今週はさっきチ…

あけましておめでとうございます

YARVがついにRubyのレポジトリにマージされたそうですね。めでたい!うちの勉強会の名前どうしましょう。ええと、それで、金曜日なのに雑談タグなのはなぜかというと。。。今週来週ととっても忙しいので、勉強会はお休みします。むねんorz 何で年頭からこん…