Since people seem to recommend de-vectorisation a lot -- I should comment 
on my observation that de-vectorisation in Julia often makes things 
slower... will get some code out and start a new topic on this...


On Thursday, 22 October 2015 00:56:39 UTC+3, Lindsey Kuper wrote:
>
> It's fantastic to see some good ParallelAccelerator results "in the 
> wild"!  Thanks for sharing.
>
> Lindsey
>
> On Wednesday, October 21, 2015 at 1:23:53 PM UTC-7, Kristoffer Carlsson 
> wrote:
>>
>> Btw it is really cool to see julia running at 400% CPU when running a 
>> list comprehension.
>>
>> I did some more benchmarks with larger N to reduce the noise a bit and 
>> the difference is actually not that great between Matlab and Julia. 
>> However, tying with Matlabs parallellized vectorized maps is great imho.
>>
>> julia> @time h, f = Jakes_Flat( 926, 1e-6, 5000000, 0, 1, 0 )
>>   0.585940 seconds (153 allocations: 495.918 MB, 12.47% gc time)
>> (
>>
>>
>> >> tic; Jakes_Flat( 926, 1E-6, 5000000, 0, 1, 0 ); toc
>> Elapsed time is 0.609867 seconds.
>>
>>
>>
>>
>> On Wednesday, October 21, 2015 at 10:17:18 PM UTC+2, Kristoffer Carlsson 
>> wrote:
>>>
>>> For fun (and science) I tried out the new package 
>>> https://github.com/IntelLabs/ParallelAccelerator.jl for this problem.
>>>
>>> Here is the code:
>>>
>>> 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
>>>   
>>>   ts   = collect(t0 + (0:Ns-1)*Ts)
>>>   tf  = ts[end] + Ts;
>>>   Ns = collect(1:N0)
>>>
>>>   coswt = [ cosvec(ts, wd)'; cosmat(ts, Ns, wd, N) ]
>>>   h = E0/sqrt(2*N0+1)*exp(im*[ phi_N pi/(N0+1)*(1:N0)']) * coswt
>>>   return h, tf;
>>> end
>>>
>>> @acc function cosvec(ts, wd)
>>>     Float64[sqrt(2)*cos(wd*t) for t in ts]
>>> end
>>>
>>> @acc function cosmat(ts, Ns, wd, N)
>>>     Float64[2*cos(wd*cos(2*pi/N*n)*t) for n in Ns, t in ts]
>>> end
>>>
>>>
>>> Benchmarking this I get:
>>>
>>> julia> @time Jakes_Flat( 926, 1e-6, 50000, 0, 1, 0 )
>>>   0.004779 seconds (115 allocations: 4.965 MB)
>>>
>>> and without calling the accelerated functions (by putting @noacc in 
>>> front of the function calls, I get):
>>>
>>> julia> @time Jakes_Flat_noacc( 926, 1e-6, 50000, 0, 1, 0 )
>>>   0.019072 seconds (75 allocations: 8.396 MB)
>>>
>>> The matlab code on my computer runs at:
>>>
>>> >> tic; Jakes_Flat( 926, 1E-6, 50000, 0, 1, 0 ); toc
>>> Elapsed time is 0.009936 seconds.
>>>
>>> So.. great victory for ParallelAccelerator.jl?
>>>
>>> On Sunday, October 18, 2015 at 1:17:50 PM 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
>>>>
>>>

Reply via email to