Julia Matrix Benchamark

黒木玄

2018-01-20

次のベンチマークを JuliaPro v.0.6.2.1 (Open BLAS 版)とその MKL 版で実行してみました.

手順:

  1. JuliaPro personal 版を2種類インストールする(通常版(Open BLAS版)とMKL版).

  2. https://github.com/RoyiAvital/MatlabJuliaMatrixOperationsBenchmark の Clone or download から ZIP ファイルをダウンロードして, このファイルが置いてあるディレクトリ以下の openblas, mkl という名のディレクトリに展開する.

  3. openblas 以下で JuliaPro の通常版の julia で JuliaMatrixBenchmark.jl を実行する.

  4. mkl 以下で JuliaPro の MKL 版の julia で JuliaMatrixBenchmark.jl を実行する.

  5. どちらの実行にも数十分かかる. それぞれのディレクトリに RunTimeJulia000{1,2,3}.csv というファイルができていることを確認する.

  6. このノートブックを実行する.

注意: 実行したベンチマークは11ヶ月前に書かれたベンチマークのためのコードなので現在では不適切である可能性がある. 実際, K-Meansのテストを失敗しているように見える. 誰かもっと完全なベンチマークテストを実行して欲しいと思う.

In [1]:
using PyPlot

function plot_RunTimeJulia!(openblas, mkl, testname, matrixsize)
    plot(matrixsize, openblas, label="Open BLAS")
    plot(matrixsize, mkl,      label="MKL", ls="--")
    xlabel("matrix size")
    ylabel("run time [sec]")
    grid(ls=":")
    legend()
    title("$testname")
end

function plot_RunTimeJulia(CSVfilename, cFunctionString, MatrixSize)
    L = length(cFunctionString)
    M = length(MatrixSize)
    openblas = readcsv("openblas/$CSVfilename")
    mkl      = readcsv("mkl/$CSVfilename")
    @assert  size(openblas) == (M, L)
    @assert  size(mkl)      == (M, L)
    
    k = 3
    l = div(L+k-1, k)
    figure(figsize=(3k, 3l))
    for j in 1:L
        subplot(l, k, j)
        plot_RunTimeJulia!(openblas[:,j], mkl[:,j], cFunctionString[j], MatrixSize)
    end
    tight_layout()
end
Out[1]:
plot_RunTimeJulia (generic function with 1 method)
In [2]:
CSVfilename = "RunTimeJulia0001.csv"
MatrixSize = [2,5,10,20,50,100,200,300,500,750,1000,2000,3000,4000]
cFunctionString = [
    "Matrix Generation",
    "Matrix Addition",
    "Matrix Multiplication",
    "Matrix Quadratic Form", 
    "Matrix Reductions",
    "Element Wise Operations"
]
plot_RunTimeJulia(CSVfilename, cFunctionString, MatrixSize)
In [3]:
CSVfilename = "RunTimeJulia0002.csv"
MatrixSize = [2,5,10,20,50,100,200,300,500,750,1000,2000,3000,4000]
cFunctionString = [
    "Matrix Exponential",
    "Matrix Square Root",
    "SVD",
    "Eigen Decomposition",
    "Cholesky Decomposition",
    "Matrix Inversion"
]
plot_RunTimeJulia(CSVfilename, cFunctionString, MatrixSize)
In [4]:
CSVfilename = "RunTimeJulia0003.csv"
MatrixSize = [2,5,10,20,50,100,200,300,500,750,1000,2000,3000,4000]
cFunctionString = [
    "Linear System Solution",
    "Linear Least Squares",
    "Squared Distance Matrix",
    "K-Means"
]
plot_RunTimeJulia(CSVfilename, cFunctionString, MatrixSize)

K-Means のテストは失敗しているように見える.

In [ ]: