路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

ピュアじゃないPython。ctypesで高速化

2008-08-21 21:28:44 | プログラミング
PythonでC言語のsscanfみたいなことをやりたい。

簡単な文字列なので、split()で切り分けてint()で整数にする、とかしてました。

それが一番速いと思って。

が、違ったんです。

少なくとも、Windowsでは、ctypesを使ってC言語のランタイムのsscanfを呼び出すほうが速かった。

下のテスト用コードだと、ctypesを使ったほうが3.0秒台、split()とint()だと4.0秒台でした(何回か試して最速のもので)。

psycoをつけても、遅くなるけれど傾向は変わらず。

高速化できたといえばできたんですけれど・・・なぜか、すっきりと納得できない感じ・・・

---------------------------------------

import time

#import psyco
#psyco.profile()

import ctypes
msvcrt = ctypes.cdll.msvcrt

T = 1000 * 1000

i = ctypes.c_int()
j = ctypes.c_int()
k = ctypes.c_int()

t0 = time.time()

byref = ctypes.byref
sscanf = msvcrt.sscanf
for t in xrange(T):
  sscanf("10,20,30", "%d,%d,%d", byref(i), byref(j), byref(k))
  p, q, r = i.value, j.value, k.value

t1 = time.time()

for t in xrange(T):
  p, q, r = (int(v) for v in "10,20,30".split(","))

t2 = time.time()

print "t1-t0=", t1 - t0
print "t2-t1=", t2 - t1

Photosynthでパーソナルストリートビューとか

2008-08-21 19:50:46 | ガジェット
記事「MS、写真から3D画像を作成する「Photosynth」を一般ユーザー向けに提供」
http://japan.zdnet.com/news/internet/story/0,2000056185,20379055,00.htm
より。

ちょっと触ってみましたが、面白かった。

Photosynthって、立体構造を推定して再現してくれる写真のビューアー、なんですね。

たくさん写真があればあるほど、写真から写真へと、スムーズに「歩き回る」ことができるようです。

がんばって写真を撮りまくれば、自分専用のストリート(に限定しなくてもいいけど)ビューとか作れるかも。

(2008/08/23 追記)
記事「MicrosoftがPhotosynthのサーバエラーを祝う(人気に有頂天で)」
http://jp.techcrunch.com/archives/20080821microsoft-celebrates-photosynth-server-failure-surprised-people-like-it/
より。

「数百万のユーザが一挙に押し寄せたため、サーバはたちまちダウンした」んだそうです。

うーん。PCでローカルに実行できるPhotosynthとか無理かなあ。CUDAかLarrabeeが必須でメモリもたくさんいります、とかでもいいんだけどなあ。