記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索

    Python

    2012年01月21日11:33いってきた: 第八回ありえるえりあ勉強会 ~PyPyのキホンの気

    c1a44e97.jpg朝からみぞれが降って寒い一日。

    溜池山王の出口11から地上に出たがさっぱり方向がわからず、やけくそで歩きだしたらあってた。よかったよかった。でも印刷してもっていた地図上で想像していたのと実際に歩いた道がちがってたっぽい(気づいたのは帰り道でまよってから)。

    会場は無線LANがつかえるとこのとだったが有線LANも使えるとあったのでつないでみたがauto ipしか設定されず、あきらめてWiMAXで。電波は弱い。電源もあり。

    あいさつ 井上さん

    • ブログに書かないと決めているもの:
      • 絵文字・顔文字 (きらいだから)
      • 下ネタ
    • なので、Pなんとか〜

    まだまだ人が少ない(エントリ人数と比べて)。ざくっと40人くらい?

    「次世代言語 Python による PyPy を使った次世代の処理系開発」 @shomah4a

    http://www.slideshare.net/ShomaHosaka/python-pypy

    • PyPyといったときに2とおりの意味が:
      • PythonでつくられたPythonのインタプリタ
      • Pythonでつくられたフレームワーク
    • 1000万$くらい資金があまっている
    • Gameboy emulatorもつくられている
    • 5倍くらいはやくなる理由は RPython Toolchain にある。
      • FlowGraph:フローチャートをつくる。データとして。
      • continulet変換
    • デモ
      • pypy-tutorial/example2.pyはいわゆる brainf*ck のインタプリタで114行
      • hanoi.bをpythonで実行したらとってもおそい。
      • バイナリにおとしただけでけっこう速くなる。
      • JITありにするともっとはやくなるらしいが、コンパイルに失敗した。
    このへん会場をみると人が増えてた。

    「PyPy における静的解析」 @cocoatomo

    http://www.slideshare.net/cocoatomo/py-py-ariel

    • test: false positiveはないが、網羅率が低い。
    • model checking: 状態爆発
    • 静的実行: 記号実行:変数を変数のままあつかう。最弱事前条件(weakest precondition, WP)。網羅性が高いがfalse positiveの可能性がある。

    >||

    • 静的解析の敵:
      • 条件分岐 パターンがふえる
      • ループ 事後条件をもとめるのがむつかしい
      • 多態 継承・動的型付け
      • eval 値の中身で処理がかわる
    • Nullableの注釈もある
    • 型Topはなんでもはいる、型Bottomはなにもはいらない。
      • 値が代入される前はBottom。
    • Listの静的解析は要素を入れたところと使うところが離れててたいへん (aliasing)
    • merge手続き: Bottomだった注釈をだんだんTopの方に一般化していく
      • List(v)とList(w)をmergeするとvとwが同値関係にある情報が追加される。
      • meta-rule:
    • Q: 関数型はどうなる?
    • A: Callableにはなる。

    「PyPyとJITコンパイラ - Introduction to PyPy and JIT compile」 @chlere

    以前に@chlereさんにいろいろ質問してやっぱりよくわからなかったところが、今日のでちょっとわかった気がしたのでよかった。間違った理解はしてなかったようだ。ヒントもどれに対するなんのヒントなのかもすっきりした。

    8699fb3e.jpg

    帰りは赤坂見附駅から乗るつもりで歩いたが、完全に方向を間違えてて、六本木の方にでて首都高が見えた。結局、また溜池山王出口12から入った。たくさん歩いて腹へったので、橋本の電車待ち時間にマックくう。

    f9cb341a.jpg



    このエントリーをはてなブックマークに追加
    2011年10月28日15:33pypyでmercurialを動かしてみた

    FreeBSDの/usr/srcはhgsubversionでとってきていて、いまの/usr/srcは

    % hg tip
    changeset:   162828:8fff0f0c3911
    svnrevision: 226824
    tag:         tip
    user:        alc@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
    date:        2011-10-27 02:52 +0000 (27 hours ago)
    summary:     contigmalloc(9) and contigfree(9) are now implemented in terms of other
    % hg log -r0
    changeset:   0:6d11119de1ac
    svnrevision: 3
    user:        rgrimes@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
    date:        1993-06-12 14:49 +0000 (1993-06-12)
    summary:     This commit was generated by cvs2svn to compensate for changes in r2,
    %
    

    というかんじで、最初からとってきているのでとてもでかい。途中のリビジョンからとってくればいいんだけど、せっかくなのでそのままにしてある。チェンジセットがたくさんあるせいなのか、hgコマンドはなにするにも1秒以上かかって、ちょっとイライラする。以前は数秒もかかってほんとうにイライラしたがhgsubversionなのかhgなのか改善されてましになった。

    で、pypyというpythonの実装があるらしくて、素のpython(CPythonというらしい)よりも速いらしいので、じゃあためしてみるか、と。

    portsにpypyがないのでFreeBSDでは動かないのかとおもったがチャレンジ。

    Building from sourceをみながらpypyのインストール。

    % hg clone https://bitbucket.org/pypy/pypy
    % cd pypy/pypy/translator/goal
    % python translate.py -Ojit  ←←まだpypyがないのでCPythonでつくる
    

    途中コンパイルエラーも見えたような気がするがbuildはどんどん進んでいく。しばらくすると何かカラフルな模様がでてきて、なにかのプログレスバーかとおもってたら、上下対象の模様がみえだしてきてやっとマンデルブローだと気付いた。たしかにBuilding from sourceにも書いてある。で4GBのメモリが必要だとも書いてある。そのときは物理メモリは11GB載っているので問題ないぜ!とおもってた。もうかなりの時間がたつのに終わらないのでtopでみてみるとプロセスサイズが3.5GB(常駐3.0GB)になったところで頭打ちになってpageoutがはじまっていたので、できるだけ不要なプロセスを閉じて放置しといた。

    夜になって終わってるかみてみたらまだ何かやっていてswapin/swapoutもおこっていた。どうやらZFSのARC(adaptive replacement cache)が3GBで下げ止まっている。しかたないのでX serverを止めたりしてみたが、ほとんどのプロセスからメモリが剥されたあとだったので効果なし。放置。

    朝になったらおわっていたが、11時間ちかくかかったようだ。おそろしい。openoffice並だ。会社のpython野郎にきいてみたら自分でコンパイルしたことがないから知らんといわれた。最近の若いのはそんなんだよね。

    [translation:info] usession directory: /tmp/usession-default-0
    [translation:info] created: /home/koie/repo/pypy/pypy/translator/goal/pypy-c
    [Timer] Timings:
    [Timer] annotate                       ---  4436.3 s
    [Timer] rtype_lltype                   ---  2757.3 s
    [Timer] pyjitpl_lltype                 ---  4861.3 s
    [Timer] backendopt_lltype              ---  2436.0 s
    [Timer] stackcheckinsertion_lltype     ---   566.4 s
    [Timer] database_c                     ---  5688.6 s
    [Timer] source_c                       --- 13597.5 s
    [Timer] compile_c                      ---  4305.5 s
    [Timer] ============================================
    [Timer] Total:                         --- 38649.0 s
    

    とりあえずインストールイメージをつくってからインストール。

    いろいろGNUツールやLinuxしか考えてないようなでFreeBSDではちょっと手直しが必要だった。tarはgtarに、グループrootはwheelに。linuxってgid=0はrootなんだね。はじめてしった。

    diff --git a/pypy/tool/release/package.py b/pypy/tool/release/package.py
    --- a/pypy/tool/release/package.py
    +++ b/pypy/tool/release/package.py
    @@ -124,11 +124,11 @@
             else:
                 archive = str(builddir.join(name + '.tar.bz2'))
                 if sys.platform == 'darwin':
    -                e = os.system('tar --numeric-owner -cvjf ' + archive + " " + name)
    +                e = os.system('gtar --numeric-owner -cvjf ' + archive + " " + name)
                 else:
    -                e = os.system('tar --owner=root --group=root --numeric-owner -cvjf ' + archive + " " + name)
    +                e = os.system('gtar --owner=root --group=wheel --numeric-owner -cvjf ' + archive + " " + name)
                 if e:
    -                raise OSError('"tar" returned exit status %r' % e)
    +                raise OSError('"gtar" returned exit status %r' % e)
         finally:
             os.chdir(old_dir)
         if copy_to_dir is not None:
    
    % cd pypy/tool/release
    % python package.py ../../.. pypy-my-own-package-name
    % cd /tmp/usession-default-5/build
    % mkdir ~/tmp/pypy-a2b911e61392
    % tar xvf pypy-my-own-package-name.tar.bz2 -C ~/tmp/pypy-a2b911e61392
    % cd ~/tmp/pypy-a2b911e61392
    % ln -s pypy-a2b911e61392 pypy
    

    次はhgのビルド。

    PYTHON=$(HOME)/tmp/pypy/bin/pypy に書き換えて gmake all して、 gmake PREFIX=$HOME/tmp/hg install。

    そしてついに/usr/srcで簡単にベンチマーク。「hg log --style=compact >/dev/null」の実行時間を測ってみた。

    cpython 113.216u 16.762s 2:10.19 99.8% 1458+1471k 0+0io 0pf+0w
    pypy 149.352u 22.263s 2:51.88 99.8% 21542+28179k 0+0io 0pf+0w

    どうみてもpypyの方が遅い。なんだこれは。ふたたびpython野郎に「どういうことなんだ、これはっ!」聞いてみたら、「まぁそんなもんですよ」って返事。脱力。パイパイって音からしてはずかしいのに使うのもはずかしいとは。またしても地球温暖化に貢献してしまった。



    このエントリーをはてなブックマークに追加