Remember to actually return bar when you benchmark the julia code. Also, 
you are not running the fortran code with optimizations on:

➜  Documents gfortran test.f -O2; ./a.out
  0.000001 seconds


Making sure that bar is actually used:

➜  Documents gfortran test.f -O2; ./a.out
  0.047754 seconds





On Wednesday, June 1, 2016 at 3:10:26 PM UTC+2, Mosè Giordano wrote:
>
> Oh my bad, this was really easy to fix!  I usually do inspect the code 
> with @code_warntype but missed to do the same this time.  Lesson 
> learned. 
>
> Now the same loop is about ~30 times faster in Julia than in Fortran, 
> really impressive. 
>
> Thank you all for the prompt comments! 
>
> Bye, 
> Mosè 
>
>
> 2016-06-01 13:27 GMT+02:00 Lutfullah Tomak: 
> > First thing I caught in your code 
> > 
> > 
> http://docs.julialang.org/en/release-0.4/manual/performance-tips/#avoid-changing-the-type-of-a-variable
>  
> > 
> > make bar non-type-changing 
> > function foo() 
> >     array1 = rand(70, 1000) 
> >     array2 = rand(70, 1000) 
> >     array3 = rand(2, 70, 20, 20) 
> >     bar = 0.0 
> >     @time for l = 1:1000, k = 1:20, j = 1:20, i = 1:70 
> >         bar = bar + 
> >             (array1[i, l] - array3[1, i, j, k])^2 + 
> >             (array2[i, l] - array3[2, i, j, k])^2 
> >     end 
> > end 
> > 
> > Second, Julia checks array bounds so @inbounds macro before for-loop 
> should 
> > help 
> > improve performance. In some situation @simd may emit vector 
> instructions 
> > thus faster 
> > code. 
>

Reply via email to