k708abc / KMC

0 stars 0 forks source link

Trying to speed up the KMC calculation #2

Open k708abc opened 2 years ago

k708abc commented 2 years ago

Original code: 1.9 ms/loop Original code without decimal: 0.5 ms/loop PyPy without decimal: 0.5 ms/loop Cython code: 0.24 ms/loop Cython code without using dictionally: 0.14 ms/loop

arafune commented 2 years ago

面白い(興味深い)結果です. 10倍、ってのはまあリーズナブルかなあ。もうちょっと早くなっても良さそうだけど。 ただ、最適化とportability は相反するところがあるので、どこまでチューニングするかは難しいかもしれないですね。

ところで、今回のケースでは、 .c と .h はcython が作ってくれてるファイルなので、これをレポジトリに含めると見通しが悪くなります。

なので、 .gitignore に .c と .hを加えた方が良いかもしれないです。

自分で、 c コードを書くことがありそうという場合は、その限りではないですが。

-- Ryuichi Arafune WPI International Center for MANA National Institute for Materials Science (NIMS) 1-1 Namiki, Tsukuba 305-0044, Japan Tel: 81-(0)29-860-4475 Fax: 81-(0)29-860-4706

Editorial board for "Progress in Surface Science" http://www.sciencedirect.com/science/journal/00796816

2022年9月5日(月) 14:10 Naoya Kawakami @.***>:

Original code: 1.9 ms/loop Original code without decimal: 0.5 ms/loop PyPy without decimal: 0.5 ms/loop Cython code: 0.24 ms/loop Cython code without using dictionally: 0.14 ms/loop

— Reply to this email directly, view it on GitHub https://github.com/k708abc/KMC/issues/2, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTRD5ENDI5PE2X2OGTEY3DV4V6DFANCNFSM6AAAAAAQEUPKMA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

k708abc commented 2 years ago

Cython単独では3~4倍くらいしか早くなってないので、もう少しやりようがある気がします。 どうやらlistをc++のvectorで置き換え、またpxdファイルを作って関数をcimportできるようにすれば早くなるっぽい?ので、もう少しやってみようと思ってます。 わかりやすい文献が少ないのが厳しいです。

k708abc commented 1 year ago

boundscheck=False, wraparound=Falseでpythonのlist検索の機能を一部停止 →0.11 ms/loop pxdファイルを作ってすべての関数をcimport →0.097 ms/loop listをc++のvectorに置き換かえ →50ms/loop

vectorへの置き換えは、pythonのリストに対する操作の書き換えが必要など、結構手間がかかる割に速度はかなり低下。 原因もよくわからないので、結局cythonは片っ端から型をつける程度にしておくのが時間効率はよさそうです。

arafune commented 1 year ago

一ステップ毎に状態が変化して、それを読みに行く必要があるわけですよね? とすると、基本的にはこの計算で時間を多くとられるのはメモリのやり取りなわけで、3−4倍ってのは良いところな気もします。Cythonではリストは上手いこと扱います(これはホントに上手く扱ってて感心する)が、dictはどうなんかい?というかそもそも上手く扱う、ってことは何を意味するんかよくわからん、ってこともありますから、

dict 使わないようにするのは意味があるかもしれません。 (この計算では dict が本質的に必要、って気は余りしない上、ハッシュ演算はやっぱりCythonとかの恩恵はうけにくい)

あと、Vectorの計算の並列化はあまり出来ないのでは無いかと思います。 (あるステップとあるステップノ計算を同時に行う、ってことはやっちゃいけないわけですよね?)

Ryuichi Arafune

2022年9月13日(火) 23:35 Naoya Kawakami @.***>:

Cython単独では3~4倍くらいしか早くなってないので、もう少しやりようがある気がします。

どうやらlistをc++のvectorで置き換え、またpxdファイルを作って関数をcimportできるようにすれば早くなるっぽい?ので、もう少しやってみようと思ってます。 わかりやすい文献が少ないのが厳しいです。

— Reply to this email directly, view it on GitHub https://github.com/k708abc/KMC/issues/2#issuecomment-1245506471, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTRD5DSMLV3KXOLF4657ADV6CGJPANCNFSM6AAAAAAQEUPKMA . You are receiving this because you commented.Message ID: @.***>