RoyiAvital / MatlabJuliaMatrixOperationsBenchmark

Benchmark MATLAB & Julia for Matrix Operations
29 stars 7 forks source link

V2.0: Julia 1.1.1, more accurate, Julia analyzer, MKL #7

Open aminya opened 5 years ago

aminya commented 5 years ago

Julia Main (JuliaMain-JuliaBench-JuliaBenchSIMD):

Julia Analyzer (AnalyszeRunTimeResults-AnalysisJuliaPlotter):

Matlab Main (MatlabMain-MatlabBench):

Matlab Analyzer (AnalyszeRunTimeResults):

aminya commented 5 years ago

@RoyiAvital I added the default Julia benchmark, and I requested my pull again.

aminya commented 5 years ago

@RoyiAvital If you have trouble merging my pull request because it is very different than your master run these commands to replace my version with your master. (from this https://stackoverflow.com/questions/27449334/force-overwrite-on-master-from-a-pull-request) First take a backup:

git checkout RoyiBackup

Now replace

git checkout master
git fetch https://github.com/aminya/MatlabJuliaMatrixOperationsBenchmark
git checkout pr-branch
git push -f origin fork/pr-branch:master
aminya commented 5 years ago

@RoyiAvital do you have any problems that prevent you from merging?

RoyiAvital commented 5 years ago

Hi,

As I wrote, I will evaluate the PR once I have access to Julia with MKL. Also, I wouldn't use timeit() on MATLAB as I wrote. Anyhow, you have a great benchmark on your on. You can test it and it will be perfect.

aminya commented 5 years ago

As I wrote, I will evaluate the PR once I have access to Julia with MKL.

I have referenced your issue in my pull request to MKL.jl and the new issue I created.

Also, I wouldn't use timeit() on MATLAB as I wrote.

I can contact MATLAB's support to get their recommendation, otherwise, I can write a custom function to replace timeit().

Anyhow, you have a great benchmark on your on. You can test it and it will be perfect.

Well, the point of me updating this repository was to replace the misleading old figures. I am developing some parallel projects to provide a Julia package that provides native Julia functions replicating MATLAB's functions (such as for image processing). And, I plan to add the benchmark of those to this repository. If you think, you can not evaluate all the upcoming benchmarks, please give me write access, or I should think about deforking my repository.

RoyiAvital commented 5 years ago

I don't find my figures misleading. They were accurate to the data I received on my machine and they can be reproduced given the system configuration mentioned.

I don't want to use MKL.jl. I am waiting (It might not happen ever) for Julia with MKL out of the box.

Regarding timeit() no need to write your own function. On my benchmark I'd like to stay with my own measurement method of timing each iteration and having array of timings to work on (Minimum, Maximum, Mean and Median).

The way I see it, it is great you forked my work and you can take it from there to the path you find appropriate. Keep doing it. I'm interested to see the effect of integrating MKL into Julia. I hope you'll be able to use more advanced flags of MKL as well later on.

aminya commented 5 years ago

I don't find my figures misleading. They were accurate to the data I received on my machine and they can be reproduced given the system configuration mentioned.

Yes, I am not saying the data are manipulated. Sorry if I meant that. But the figures are misleading.

First, you should use loglog plots when you are comparing two curves that are very near to each other because now the difference when matrix size is less than 1000 is not visible because the x distance between matrix size is taking all the space. (see AnalyszeRunTimeResults.m ). This can be fixed easily just by replacing loglog with plot

Second, for Julia+SIMD, only 3 functions made use of @simd and multi-threading in Julia. However, in your figures, you have included Julia+SIMD for all the functions, and they have a different result than Julia even if they have not used @simd! This shows that tiq toc method you used for benchmarking in Julia is not accurate at all and has a lot of noise even for the same function.

Regarding timeit() no need to write your own function. On my benchmark I'd like to stay with my own measurement method of timing each iteration and having array of timings to work on (Minimum, Maximum, Mean and Median).

Well, this is not a severe problem. It can be replaced easily. However, I calculated the mean of multiple iterations of running timeit.

The way I see it, it is great you forked my work and you can take it from there to the path you find appropriate. Keep doing it.

I will create another repository to ease my workflow (starting with my forked one). However, I will keep this pull request so you can merge it later.