Juliaやってみよう。四日目。@timeでプロファイリング
今日は、昨日のIzhikevichモデルのコードの簡単なプロファイリングしてみる。Pythonに翻訳した時とどっちが速いのかというのが知りたい。結果次第ではjuliaは使わないかもしれない。ちょっと古い記事だけど、ある程度アレイが大きくなるとNumpyの方が速いというベンチマークもあるので、自分が使うような用途で確認してみたい。
@time
公式ドキュメンテーションのパフォーマンスのコツによると、基本的には@timeというマクロがあるので、それを使うと良いようだけど、グローバルのスコープで実行するとオーバーヘッドがあって遅くなる(からのForループでも100マイクロ秒くらい)ので、測りたい部分をfunctionにして測るのがよいらしい。
昨日のコードをfunctionの中にいれてやって、
function test() Ne = 800; Ni = 200; re = rand(Ne, 1); ri = rand(Ni, 1); a = [0.02 * ones(Ne, 1); 0.02 * ones(Ni, 1)] b = [0.2 * ones(Ne, 1); 0.25-0.05*ri] c = [-65 + 15 * re .^ 2; -65*ones(Ni, 1)] d = [8-6*re .^ 2; 2*ones(Ni,1)] S = hcat(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=1:1000 # simulation of 1000 ms I=[5*randn(Ne,1);2*randn(Ni,1)]; # thalamic input fired=find(v.>= 30); # indices of spikes firings=[firings; hcat(t+0*fired, fired)]; v[fired]=c[fired]; u[fired]=u[fired]+d[fired]; I=I+sum(S[:,fired], 2); 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 end end
あとは
@time test()
としてやる。
うちのPCでは
0.785356 seconds (326.64 k allocations: 365.923 MiB, 24.83% gc time)
という感じでした。
numpyバージョンを作らねば。
« Juliaやってみよう。三日目。MATLABコードを翻訳してみる。 | トップページ | Juliaやってみよう。五日目。Pythonと速度比較。 »
「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やってみよう。三日目。MATLABコードを翻訳してみる。 | トップページ | Juliaやってみよう。五日目。Pythonと速度比較。 »



コメント