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