Julia vectorized code should certainly be as fast as Matlab and NumPy vectorized code, and to the best of my knowledge, it already is. But de-vectorized code will always have an advantage because you have low-level control, and you can avoid temp variables.
Cheers, Daniel. On 19 October 2015 at 21:05, Phil Tomson <[email protected]> wrote: > Several comments here about the need to de-vectorize code and use > for-loops instead. However, vectorized code is a lot more compact and > generally easier to read than lots of for-loops. I seem to recall that > there was discussion in the past about speeding up vectorized code in Julia > so that it could be on par with the vectorized code performance - is this > still something being worked on for future versions? > > Otherwise, if we keep telling people that they need to convert their code > to use for-loops, I think Julia isn't going to seem very compelling for > people looking for alternatives to Matlab, R, etc. > > On Sunday, October 18, 2015 at 6:41:54 AM UTC-7, Daniel Carrera wrote: >> >> Hello, >> >> Other people have already given advice on how to speed up the code. I >> just want to comment that Julia really is faster than Matlab, but the way >> that you make code faster in Julia is almost the opposite of how you do it >> in Matlab. Specifically, in Matlab the advice is that if you want the code >> to be fast, you need to eliminate every loop you can and write vectorized >> code instead. This is because Matlab loops are slow. But Julia loops are >> fast, and vectorized code creates a lot of overhead in the form of >> temporary variables, garbage collection, and extra loops. So in Julia you >> optimize code by putting everything into loops. The upshot is that if you >> take a Matlab-optimized program and just do a direct line-by-line >> conversion to Julia, the Julia version can easily be slower. But by the >> same token, if you took a Julia-optimized program and converted it >> line-by-line to Matlab, the Matlab version would be ridiculously slow. >> >> Oh, and in Julia you also care about types. If the compiler can infer >> correctly the types of your variables it will write more optimal code. >> >> Cheers, >> Daniel. >> >> >> On Sunday, 18 October 2015 13:17:50 UTC+2, Vishnu Raj wrote: >>> >>> Although Julia homepage shows using Julia over Matlab gains more in >>> performance, my experience is quite opposite. >>> I was trying to simulate channel evolution using Jakes Model for >>> wireless communication system. >>> >>> Matlab code is: >>> function [ h, tf ] = Jakes_Flat( fd, Ts, Ns, t0, E0, phi_N ) >>> %JAKES_FLAT >>> % Inputs: >>> % fd, Ts, Ns : Doppler frequency, sampling time, number of >>> samples >>> % t0, E0 : initial time, channel power >>> % phi_N : initial phase of the maximum Doppler frequeny >>> % sinusoid >>> % >>> % Outputs: >>> % h, tf : complex fading vector, current time >>> >>> if nargin < 6, phi_N = 0; end >>> if nargin < 5, E0 = 1; end >>> if nargin < 4, t0 = 0; end >>> >>> N0 = 8; % As suggested by Jakes >>> N = 4*N0 + 2; % an accurate approximation >>> wd = 2*pi*fd; % Maximum Doppler frequency[rad] >>> t = t0 + [0:Ns-1]*Ts; % Time vector >>> tf = t(end) + Ts; % Final time >>> coswt = [ sqrt(2)*cos(wd*t); 2*cos(wd*cos(2*pi/N*[1:N0]')*t) ]; >>> h = E0/sqrt(2*N0+1)*exp(j*[phi_N pi/(N0+1)*[1:N0]])*coswt; >>> end >>> Enter code here... >>> >>> My call results in : >>> >> tic; Jakes_Flat( 926, 1E-6, 50000, 0, 1, 0 ); toc >>> Elapsed time is 0.008357 seconds. >>> >>> >>> My corresponding Julia code is >>> function Jakes_Flat( fd, Ts, Ns, t0 = 0, E0 = 1, phi_N = 0 ) >>> # Inputs: >>> # >>> # Outputs: >>> N0 = 8; # As suggested by Jakes >>> N = 4*N0+2; # An accurate approximation >>> wd = 2*pi*fd; # Maximum Doppler frequency >>> t = t0 + [0:Ns-1]*Ts; >>> tf = t[end] + Ts; >>> coswt = [ sqrt(2)*cos(wd*t'); 2*cos(wd*cos(2*pi/N*[1:N0])*t') ] >>> h = E0/sqrt(2*N0+1)*exp(im*[ phi_N pi/(N0+1)*[1:N0]']) * coswt >>> return h, tf; >>> end >>> # Saved this as "jakes_model.jl" >>> >>> >>> My first call results in >>> julia> include( "jakes_model.jl" ) >>> Jakes_Flat (generic function with 4 methods) >>> >>> julia> @time Jakes_Flat( 926, 1e-6, 50000, 0, 1, 0 ) >>> elapsed time: 0.65922234 seconds (61018916 bytes allocated) >>> >>> julia> @time Jakes_Flat( 926, 1e-6, 50000, 0, 1, 0 ) >>> elapsed time: 0.042468906 seconds (17204712 bytes allocated, 63.06% gc >>> time) >>> >>> For first execution, Julia is taking huge amount of time. On second >>> call, even though Julia take considerably less(0.042468906 sec) than >>> first(0.65922234 sec), it's still much higher to Matlab(0.008357 sec). >>> I'm using Matlab R2014b and Julia v0.3.10 on Mac OSX10.10. >>> >>> - vish >>> >>
