Hello guys,

Thanks a lot for the lengthy discussions. It helped me a lot to get a 
feeling on what is Julia like. I did some more performance comparisons as 
suggested by first two posts (thanks a lot for the tips). In the mean time 
I upgraded to v0.3.
X = rand(7000,7000);
@time d = sum(X.^2, 1);
elapsed time: 0.573125833 seconds (392056672 bytes allocated, 2.25% gc time)
@time d = sum(X.*X, 1);
elapsed time: 0.178715901 seconds (392057080 bytes allocated, 14.06% gc time
)
@time d = sumabs2(X, 1);
elapsed time: 0.067431808 seconds (56496 bytes allocated)

In Octave then
X = rand(7000);
tic; d = sum(X.^2); toc;
Elapsed time is 0.167578 seconds.

So the ultimate solution is the sumabs2 function which is a blast. I am 
comming from Matlab/Octave and I would expect X.^2 to be fast "out of the 
box" but nevertheless if I can get an excellent performance by learning 
some new paradigms I will go for it.

The above tests lead me to another question. I often need to calculate the 
"self" dot product over a portion of a matrix, e.g.
@time d = sumabs2(X[:,1001:end], 1);
elapsed time: 0.175333366 seconds (336048688 bytes allocated, 7.01% gc time)

Apparently this is not a way to do it in Julia because working on a smaller 
matrix of 7000x6000 gives more than double computing time and furthermore 
it seems to allocate unnecessary memory.

Best Regards,
Jan



Dňa pondelok, 8. septembra 2014 10:36:02 UTC+2 Ján Dolinský napísal(-a):
>
> Hello,
>
> I am a new Julia user. I am trying to write a function for computing 
> "self" dot product of all columns in a matrix, i.e. calculating a square of 
> each element of a matrix and computing a column-wise sum. I am interested 
> in a proper way of doing it because I often need to process large matrices.
>
> I first put a focus on calculating the squares. For testing purposes I use 
> a matrix of random floats of size 7000x7000. All timings here are deducted 
> after several repetitive runs.
>
> I used to do it in Octave (v3.8.1) a follows:
> tic; X = rand(7000); toc;
> Elapsed time is 0.579093 seconds.
> tic; XX = X.^2; toc;
> Elapsed time is 0.114737 seconds.
>
>
> I tried to to the same in Julia (v0.2.1):
> @time X = rand(7000,7000);
> elapsed time: 0.114418731 seconds (392000128 bytes allocated)
> @time XX = X.^2;
> elapsed time: 0.369641268 seconds (392000224 bytes allocated)
>
> I was surprised to see that Julia is about 3 times slower when calculating 
> a square than my original routine in Octave. I then read "Performance tips" 
> and found out that one should use * instead of of raising to small integer 
> powers, for example x*x*x instead of x^3. I therefore tested the 
> following.
> @time XX = X.*X;
> elapsed time: 0.146059577 seconds (392000968 bytes allocated)
>
> This approach indeed resulted in a lot shorter computing time. It is still 
> however a little slower than my code in Octave. Can someone advise on any 
> performance tips ?
>
> I then finally do a sum over all columns of XX to get the "self" dot 
> product but first I'd like to fix the squaring part.
>
> Thanks a lot. 
> Best Regards,
> Jan 
>
> p.s. In Julia manual I found a while ago an example of using @vectorize 
> macro with a squaring function but can not find it any more. Perhaps the 
> name of macro was different ... 
>   
>

Reply via email to