I remember seeing this same performance gap before. I believe the problem is that OpenBLAS doesn't have the correct thread defaults. Here are other timings setting the threads directly:
*julia> **blas_set_num_threads(1)* *julia> **@time eigfact(M);* elapsed time: 1.827510669 seconds (79997048 bytes allocated, 1.88% gc time) *julia> **blas_set_num_threads(2)* *julia> **@time eigfact(M);* elapsed time: 1.549618631 seconds (79997048 bytes allocated) *julia> **blas_set_num_threads(3);@time eigfact(M);* elapsed time: 1.498852226 seconds (79997048 bytes allocated, 2.63% gc time) *julia> **blas_set_num_threads(4);@time eigfact(M);* elapsed time: 2.062847561 seconds (79997048 bytes allocated) On Monday, July 13, 2015 at 4:33:56 AM UTC+10, Evgeni Bezus wrote: > > Hi all, > > I am a Julia novice and I am considering it as a potential alternative to > MATLAB. > My field is computational nanophotonics and the main numerical technique > that I use involves multiple solution of the eigenvalue/eigenvector problem > for dense matrices with size of about 1000*1000 (more or less). > I tried to run the following nearly equivalent code in Julia and in MATLAB: > > Julia code: > > n = 1000 > M = rand(n, n) > F = eigfact(M) > tic() > for i = 1:10 > F = eigfact(M) > end > toc() > > > MATLAB code: > > n = 1000; > M = rand(n, n); > [D, V] = eig(M); > tic; > for i = 1:10 > [D, V] = eig(M); > end > toc > > It turns out that MATLAB's eig() runs nearly 2.3 times faster than eig() > or eigfact() in Julia. On the machine available to me right now (relatively > old Core i5 laptop) the average time for MATLAB is of about 37 seconds, > while the mean Julia time is of about 85 seconds. I use MATLAB R2010b and > Julia 0.3.7 (i tried to run the code both in Juno and in a REPL session and > obtained nearly identical results). > > Is there anything that I'm doing wrong? > > Best regards, > Evgeni >