Skip to content

Commit

Permalink
Julia 1.1.1, more accurate, Julia analyzer,MKL.jl, improvements
Browse files Browse the repository at this point in the history
Julia Main (JuliaMain-JuliaBench-JuliaBenchSIMD):

* Combined separated function files JuliaMatrixBenchmark and JuliaMatrixBenchmarkOp into JuliaBench and JuliaBenchSIMD respectively for easier access
* Used @benchmark instead of deprecated and inaccurate tic() and toq(), so all functions now just include the algorithm or operation. Benchmark result may not be comparable to ones in previous versions.
* @benchmarks calls allFunctions in local scope (using $). Then the minimum run time among different benchmarks for each function is chosen.
* Removed totalRunTime because it does not mean anything anymore
* Changed name of some variables and functions to more appropriate ones
* Used transpose() instead of deprecated .'
* Used DelimitedFiles.readdlm and DelimitedFiles.writedlm instead of deprecated readcsv and writescv
* Removed rounds because readdlim supports converting to int64 itself
* Changed deprecated squeeze to droplims
* jj for loop changed to be like fun in allFunctions. This allows simply adjusting allFunctions array if want to remove some functions from benchmark
* Added dims= to 2nd input argument of minimum(), maximum(), findmin() and sum() functions
* Added dummy mY to functions that don't use it. (for consistency in code logic)
* Changed deprecated expm with exp
* Changed deprecated sqrtm with sqrt
* eig changed with eigen.
* vClusterId modified to be compatible with Cartesian indexing
* mRunTime is stored in a mat file using MAT package.
* tRunTime is a table which has the run time information in a intuitive manner
* added 0 benchmark operation mode which is for fast testing only
* changed file and folder management
* now average of different iteration of Run Times is calculated (for different kk)
* automatic work directory setter
* In JuliaBenchSIMD, functions that are identical to non SIMD versions are removed from allFunctions
* Two types of BLAS is used (MKL.jl and default Julia Blas)

Julia Analyzer (AnalyszeRunTimeResults-AnalysisJuliaPlotter):

* Julia Analyzer added for creating plots

Matlab Main (MatlabMain-MatlabBench):

* Use cRunTime cell and then tRuntime table to store run time data intuitively
* changed file and folder management
* use timeIt instead of tic and toc
* now the average of median of different iteration of Run Times is calculated (for different kk)
* some other changes to be the same as respective Julia function

Matlab Analyzer (AnalyszeRunTimeResults):

* plotting algorithm was improved
* use mat files instead of csv
* use of tables
* removed unnecessary AnalysisInitScript and the logic was added in visualization adjustment
* made Matlab AnalyszeRunTimeResults simpler
  • Loading branch information
aminya committed Jun 28, 2019
1 parent 0ca4f43 commit 6760ecf
Show file tree
Hide file tree
Showing 104 changed files with 1,378 additions and 2,076 deletions.
19 changes: 0 additions & 19 deletions .gitignore

This file was deleted.

66 changes: 66 additions & 0 deletions AnalysisJuliaPlotter.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
function AnalysisJuliaPlotter()
# Setting Enviorment Parameters
generateImages=1;
saveImages=1;

# Loading Data
tRunTimeMatlab = readdlm("RunTimeData\\RunTimeMatlabTable.csv", ',');
mRunTimeMatlab=tRunTimeMatlab[2:end,2:end];
vMatrixSizeMatlab=tRunTimeMatlab[1,2:end];
sFunNameMatlab=tRunTimeMatlab[2:end,1];

tRunTimeJulia = readdlm("RunTimeData\\RunTimeJuliaopenblas64Table.csv", ',');
mRunTimeJulia=tRunTimeJulia[2:end,2:end];
vMatrixSizeJulia=tRunTimeJulia[1,2:end];
sFunNameJulia=tRunTimeJulia[2:end,1];

tRunTimeJuliaSIMD = readdlm("RunTimeData\\RunTimeJuliaopenblas64SIMDTable.csv", ',');
mRunTimeJuliaSIMD=tRunTimeJuliaSIMD[2:end,2:end];
vMatrixSizeJuliaSIMD=tRunTimeJuliaSIMD[1,2:end];
sFunNameJuliaSIMD=tRunTimeJuliaSIMD[2:end,1];

tRunTimeJuliamkl = readdlm("RunTimeData\\RunTimeJuliamklTable.csv", ',');
mRunTimeJuliamkl=tRunTimeJuliamkl[2:end,2:end];
vMatrixSizeJuliamkl=tRunTimeJuliamkl[1,2:end];
sFunNameJuliamkl=tRunTimeJuliamkl[2:end,1];

tRunTimeJuliamklSIMD = readdlm("RunTimeData\\RunTimeJuliamklSIMDTable.csv", ',');
mRunTimeJuliamklSIMD=tRunTimeJuliamklSIMD[2:end,2:end];
vMatrixSizeJuliamklSIMD=tRunTimeJuliamklSIMD[1,2:end];
sFunNameJuliamklSIMD=tRunTimeJuliamklSIMD[2:end,1];

# Displaying Results
ii=1;
for fun in sFunNameMatlab

plt=plot( vMatrixSizeMatlab,[ mRunTimeMatlab[ii,:], mRunTimeJuliamkl[ii,:] ],
labels=["MATLAB" "Julia-MKL"],legend=:bottomright, markershape =:auto,markersize=2,
xlabel="Matrix Size", ylabel="Run Time [micro Seconds]",
title="$fun", xscale=:log10, yscale=:log10,dpi=300 );

plotJuliaSIMD=occursin.(fun,sFunNameJuliamklSIMD); # if 1 will plot JuliaSIMD
if any(plotJuliaSIMD)
plt=plot!(vMatrixSizeJuliamklSIMD,dropdims(mRunTimeJuliamklSIMD[plotJuliaSIMD,:],dims=1),
label="Julia-MKL-SIMD",markershape =:auto,markersize=2);
end
display(plt); # display in plot pane
if(generateImages == 1)
plt=plot( vMatrixSizeMatlab,[ mRunTimeMatlab[ii,:], mRunTimeJulia[ii,:], mRunTimeJuliamkl[ii,:] ],
labels=["MATLAB", "Julia", "Julia-MKL"],legend=:bottomright, markershape =:auto,markersize=2,
xlabel="Matrix Size", ylabel="Run Time [micro Seconds]", guidefontsize=10,
title="$fun", titlefontsize=10, xscale=:log10, yscale=:log10,dpi=300 );

plotJuliaSIMD=occursin.(fun,sFunNameJuliamklSIMD); # if 1 will plot Julia-SIMD
if any(plotJuliaSIMD)
plt=plot!(vMatrixSizeJuliamklSIMD,[ dropdims(mRunTimeJuliaSIMD[plotJuliaSIMD,:],dims=1), dropdims(mRunTimeJuliamklSIMD[plotJuliaSIMD,:],dims=1) ],
labels=["Julia-SIMD" "Julia-MKL-SIMD"],markershape =:auto, markersize=2);
end
display(plt); # display in plot pane
if(saveImages == 1)
savefig("Figures\\Julia\\Figure$(ii).png");
end

ii=ii+1;
end

end
11 changes: 11 additions & 0 deletions AnalyszeRunTimeResults.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cd(dirname(@__FILE__))
# using Pkg
# Pkg.add("Plots")
# Pkg.add("GR")

using DelimitedFiles
using LinearAlgebra
using Plots
gr()
include("AnalysisJuliaPlotter.jl");
AnalysisJuliaPlotter()
70 changes: 70 additions & 0 deletions AnalyszeRunTimeResults.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
close all; clear; clc;

%% Figure Parameters

figPosSt=struct('default',[100, 100, 0560, 0420],'small',[100, 100, 0400, 0300],'medium',[100, 100, 0800, 0600],'large',[100, 100, 0960, 0720],'xlarge',[100, 100, 1100, 0825],'x2large',[100, 100, 1200, 0900],'x3larg',[100, 100, 1400, 1050]);
figPos=figPosSt.medium; % fig position identifier
lineWidthSt=struct('thin',1,'normal',3,'thick',4);
lineWidth=lineWidthSt.thin; % line width identifier
saveImage=1; % save image or not

%% Loading Data

tRunTimeMatlab = readtable(fullfile('RunTimeData\', 'RunTimeMatlabTable.csv'));
mRunTimeMatlab=table2array(tRunTimeMatlab(2:end,2:end));
vMatrixSizeMatlab=table2array(tRunTimeMatlab(1,2:end));
sFunNameMatlab=table2array(tRunTimeMatlab(2:end,1));

tRunTimeJulia = readtable(fullfile('RunTimeData\', 'RunTimeJuliaopenblas64Table.csv'));
mRunTimeJulia=table2array(tRunTimeJulia(2:end,2:end));
vMatrixSizeJulia=table2array(tRunTimeJulia(1,2:end));
sFunNameJulia=table2array(tRunTimeJulia(2:end,1));

tRunTimeJuliaSIMD = readtable(fullfile('RunTimeData\', 'RunTimeJuliaopenblas64SIMDTable.csv'));
mRunTimeJuliaSIMD=table2array(tRunTimeJuliaSIMD(2:end,2:end));
vMatrixSizeJuliaSIMD=table2array(tRunTimeJuliaSIMD(1,2:end));
sFunNameJuliaSIMD=table2array(tRunTimeJuliaSIMD(2:end,1));

tRunTimeJuliamkl = readtable(fullfile('RunTimeData\', 'RunTimeJuliamklTable.csv'));
mRunTimeJuliamkl=table2array(tRunTimeJuliamkl(2:end,2:end));
vMatrixSizeJuliamkl=table2array(tRunTimeJuliamkl(1,2:end));
sFunNameJuliamkl=table2array(tRunTimeJuliamkl(2:end,1));

tRunTimeJuliamklSIMD = readtable(fullfile('RunTimeData\', 'RunTimeJuliamklSIMDTable.csv'));
mRunTimeJuliamklSIMD=table2array(tRunTimeJuliamklSIMD(2:end,2:end));
vMatrixSizeJuliamklSIMD=table2array(tRunTimeJuliamklSIMD(1,2:end));
sFunNameJuliamklSIMD=table2array(tRunTimeJuliamklSIMD(2:end,1));

%% Displaying Results
figureIdx = 0;

for ii = 1:size(mRunTimeMatlab,1)

figureIdx = figureIdx + 1;
hFigure = figure('Position', figPosMedium);
hAxes = axes();

loglog(vMatrixSizeMatlab,mRunTimeMatlab(ii,:),'-o','LineWidth',lineWidth,'MarkerFaceColor','b'); hold on;
loglog(vMatrixSizeJulia,mRunTimeJulia(ii,:),'-s','LineWidth',lineWidth,'MarkerFaceColor','r'); hold on;
loglog(vMatrixSizeJuliamkl,mRunTimeJuliamkl(ii,:),'-p','LineWidth',lineWidth,'MarkerFaceColor','g'); hold on;

plotJuliaSIMD=ismember( sFunNameJuliamklSIMD, sFunNameMatlab{ii} ); % if 1 will plot Julia-SIMD
if any(plotJuliaSIMD)
loglog(vMatrixSizeJuliaSIMD,mRunTimeJuliaSIMD(plotJuliaSIMD,:),'-d','LineWidth',lineWidth,'MarkerFaceColor',[0.5,0,0.5]); hold on;
h=loglog(vMatrixSizeJuliamklSIMD,mRunTimeJuliamklSIMD(plotJuliaSIMD,:),'-h','LineWidth',lineWidth,'MarkerFaceColor',[0.5,0.5,0]); hold on;

legend('MATLAB','Julia','Julia-MKL','Julia-SIMD','Julia-MKL-SIMD','Location','southeast')
else
legend('MATLAB','Julia','Julia-MKL','Location','southeast')
end
hold off;
title(num2str(sFunNameMatlab{ii}));
xlabel('Matrix Size');
ylabel('Run Time [micro Seconds]');

if(saveImage == 1)
set(hAxes, 'LooseInset', [0.05, 0.05, 0.05, 0.05]);
saveas(hFigure,['Figures\Figure', num2str(figureIdx), '.png']);
end

end
101 changes: 0 additions & 101 deletions AnalyszeRunTimeResults0001.m

This file was deleted.

102 changes: 0 additions & 102 deletions AnalyszeRunTimeResults0002.m

This file was deleted.

Loading

0 comments on commit 6760ecf

Please sign in to comment.