Juliaやってみよう。五日目。Pythonと速度比較。
def test(): Ne=800; Ni=200; re=rand(Ne,1); ri=rand(Ni,1); a=vstack([0.02*ones((Ne,1)), 0.02+0.08*ri]); b=vstack([0.2*ones((Ne,1)), 0.25-0.05*ri]); c=vstack([-65+15*re**2, -65*ones((Ni,1))]); d=vstack([8-6*re**2, 2*ones((Ni,1))]); S=hstack([0.5*rand(Ne+Ni,Ne), -rand(Ne+Ni,Ni)]); v=-65*ones((Ne+Ni,1)); # Initial values of v u=b*v; # Initial values of u firings=[]; # spike timings for t in range(1000): # simulation of 1000 ms I=vstack([5*randn(Ne,1), 2*randn(Ni,1)]); # thalamic input fired=find(v>=30); # indices of spikes if fired.any(): if firings == []: firings=vstack([t+0*fired,fired]).T else: firings=vstack([firings, vstack([t+0*fired,fired]).T]); v[fired]=c[fired]; u[fired]=u[fired]+d[fired]; I=I+sum(S[:,fired],1).reshape(-1,1); v=v+0.5*(0.04*v**2+5*v+140-u+I); # step 0.5 ms v=v+0.5*(0.04*v**2+5*v+140-u+I); # for numerical u=u+a*(b*v-u); # stability
全快の記事では、Izhikevichモデルを1000 msほどシミュレーションした時のjuliaの実行時間は785 msでした。
速度比較のため、上記のようなnumpyバージョンを作ってみたところ、253 msでした。
Python版ではfiredを調べて空だったらシナプス入力の計算を端折るようにしたので、そのせいで速い可能性もあるので、juliaも同様に
if length(fired) > 0
という風にチェックを入れたら625 msまで速くなった。それでもPythonが三倍くらい速いとかあり得ない。なにかおかしい。
もしかしたらjuliaのJITが温まる前なのかな。ループを長くしたら逆転するかも。PypyのJITが温まるまで4秒くらいとか聞いた気がするので、シミュレーションを1000 msから30000 msにしてみる。
Python2 23.4 s julia 34.48 s
結果、差はだいぶ縮まったが、それでもPythonがちょっと速い。これならJITのあるjuliaが有利な条件だと思うけども。ふーーむ。juliaの偉い人が颯爽とアドバイスくれたりないかなぁ・・。
まあKyle Barbary氏の2014年のブログ記事の信憑性がましてしまった。
« Juliaやってみよう。四日目。@timeでプロファイリング | トップページ | 古めの論文でテキスト選択がおかしい時の対処法 »
「学問・資格」カテゴリの記事
- ウイルスを殺すのは簡単。人に無害でやるのが難しいの!! 二酸化塩素「こう?えい!」(2020.03.11)
- 老化はエピジェネティクスな影響が積り、スプライシングに影響を与えるのかも(2017.11.20)
- シネッセンス細胞がアツい。不老不死とハゲの治療が同時に可能か?(2017.11.18)
- 古めの論文でテキスト選択がおかしい時の対処法(2017.09.08)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
「Julia」カテゴリの記事
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
- Juliaやってみよう。三日目。MATLABコードを翻訳してみる。(2017.07.15)
- Juliaやってみよう。二日目。Juliaのアップデート、IJulia(2017.07.13)
- Juliaやってみよう。一日目。GRでプロット。(2017.07.12)
« Juliaやってみよう。四日目。@timeでプロファイリング | トップページ | 古めの論文でテキスト選択がおかしい時の対処法 »
コメント