fc2ブログ
psycoで高速化
Python使っている人には当たり前なのかもしれないけど、なんか実行を高速化してくれるツールがあるらしい。Psycoがそれです。とりあえず、ダウンロードでインストール。windows用のバイナリがあったので、バージョン1.5を選択。psyco-1.5.win32-py2.4.exe

仕組みは少しこれから詳しくなる必要がありそうだけど、使い方は簡単。
import psyco
psyco.full()
と、スクリプトの冒頭に入れるだけ。

Cと同じくらい速いとか、実行速度が10倍になるとか書いてるので、ネットワークの中心性(centrality)を計算するnetworkx.centrality.betweenness_centrality( Graph )を使ってプログラムの実行速度を調べてみました。使ったマシンは、PentiumD 3.2GHz(2G RAM) WindowsXPsp2
XPだと、Microsoftが出しているResource Kitに含まれるtimeitというツールを使える。Windows Server 2003 Resource Kit Tools
C:\Program Files\Windows Resource Kits\ToolsにPATHを通すの忘れずに。

node数5897、edge数15950のネットワークのBetweennessによるCentralityを求める。確かに速度が2倍くらいに。
とりあえず、時間がかかる計算をするときは試してみる価値あるね。ループがないと意味は薄いようだけど。たとえば、巨大なリストからのランダムサンプリングとかは、ダメな模様。
以下は参考までに、timeitの出力結果。

psyco適用前
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 8:05 pm, Monday, October 16 2006
Elapsed Time: 0:09:15.562
Process Time: 0:09:12.031
System Calls: 1228887
Context Switches: 256903
Page Faults: 815529
Bytes Read: 105270080
Bytes Written: 11654265
Bytes Other: 3072382

psyco適用後
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 8:15 pm, Monday, October 16 2006
Elapsed Time: 0:05:33.968
Process Time: 0:05:33.062
System Calls: 2064202
Context Switches: 465510
Page Faults: 1811956
Bytes Read: 6464132
Bytes Written: 808205
Bytes Other: 1981950

しかし、Psycoって何の略なんだ?
スポンサーサイト



【2006/10/17 01:02】 | Python | トラックバック(0) | コメント(0) | page top↑
<<ダイクストラ法ですべての最短経路を求める | ホーム | networkxとmatplotlib>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/3-5dbdbb9f
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |