システムとモデリング

modelica, Julia, Design Structure Matrix, SysML, 他モデリング全般について。

OctaveとJuliaの行列演算速度を比較する

今回はOctaveとJuliaの行列演算速度を比較してみます。 高速と言われるJuliaですが、Octaveと比べてどの程度早いのでしょうか?

題材は以下より、n ×n行列とn×1列の積をとります。 この計算速度は一般的にO(n2)になるとされています。

MATLABとOctaveによる科学技術計算

MATLABとOctaveによる科学技術計算

Octave

Octaveのコードは以下になります。

n = 10000;
step = 100;
A = rand(n,n);
v = rand(n,1);
T = [ ];
sizeA =[ ];
for k = 500:step:n
    AA = A(1:k,1:k); vv = v(1:k);
    t = cputime;
    b = AA*vv;
    tt = cputime - t;
    T = [T,tt];
    sizeA =[sizeA,k];
end
plot(sizeA,T,'o')

この結果、n×n行列のnを横軸に取り、計算にかかった時間を縦軸に取ると以下のようなグラフが得られます。

f:id:Otepipi:20190418011233p:plain

n=10000のときは0.375秒かかりました。

Julia

Juliaで同等のプログラムを作成します。

using Plots

n = 10000;
step = 100;
A = rand(n,n);
v = rand(n,1);
T = [ ];
sizeA =[ ];
for k = 500:step:n
    AA = A[1:k,1:k]; vv = v[1:k];
    t=time()
    #function calc(AA,vv)
        b = AA*vv;
    #end
    tt = time() - t;
    push!(T,tt);
    push!(sizeA,k);
end

plot(sizeA,T)

この結果のグラフは以下になりました。

f:id:Otepipi:20190418011502p:plain

n=10000のときの計算時間は0.04秒で、なんとOctaveの1/10しか時間がかかっていません。

Juliaの速度を見せつけた結果となりました。 今回はここまでにします。