Are you wrapping your code in a function? If not, it's going to slow the
code down a lot because it's in global scope and variable type checking
will be happening all over the place. Check out the performance tips page
in the Julia manual for other ideas:
http://docs.julialang.org/en/latest/manual/performance-tips/

-Jacob


On Wed, Jan 29, 2014 at 11:13 AM, Rajn <[email protected]> wrote:

> Hi,
> I am importing an image - gray scale, size (1440,1776,1).
>
> I wrote a simple code for performing a running average with a square
> filter of size 2*f+1, with f as a variable.
> I am not performing running average over the boundaries i.e., neglecting
> boundary pixels.
>
>
> Leaving aside the time to import image or display image in Matlab or
> Julia, I see that Matlab takes about 15 seconds and Julia (35 seconds).
> And there is only one section of recursive code which takes up this much
> time.
>
> The code is:
>
> S is sums over image pixels which are in Matrix A.
> I declare all in the beginning. Their sizes are declared. For example,
>
> A=1.0*data(img); #This extracts the image array from img image imported
> through Image. It is in Uint8 but multiplying by 1.0 converts it to Float64.
> S=zeros(Float64,imsz);
>
> The initial values of S have been calculated in an earlier section of the
> code and that is pretty fast.
> The main slower are the following lines. The entire code takes 35 seconds
> to run and this one takes most of that time (~34.9seconds).
>
> p1=f+1;
> #for m=(f+1):(imsz[1]-f)  #imsz(1)=1440, imsz(2)=1776.
> #  for n=(f+1):(imsz[2]-f-1)
> for n=(f+1):(imsz[2]-f-1)
>   for m=(f+1):(imsz[1]-f)
>     S[m,n+1]=S[m,n]+sum(sum(A[m-f:m+f,n+p1],2))-sum(sum(A[m-f:m+f,n-f],2));
>   end
> end
>
> I tried both ways i.e., using sum and also actually summing A in a
> separate for loop. If I do that it takes about 60 seconds. So 'sum' is
> faster than looping and adding to A.
> I also tried first column wise and then row wise looping as you will see
> in the commented section. It takes the same time - does not matter which
> way I do the loop.
>
> Matlab code: takes about 14 seconds.
>
> p1=f+1;
> for m=(f+1):(imsz(1)-f)
>   for n=(f+1):(imsz(2)-f-1)
>     S(m,n+1)=S(m,n)+(sum(A(m-f:m+f,n+p1),2))-(sum(A(m-f:m+f,n-f),2));
>   end
> end
>
> Any suggestions? Unfortunately my codes are on two different machines.
> Doubt if that make a difference? 2.3GHz,4Gb RAM-Matlab
> 3.4GHz,8Gb RAM-Julia
>
>

Reply via email to