Path: news.mathworks.com!not-for-mail
From: "Yi Cao" <y.cao@cranfield.ac.uk>
Newsgroups: comp.soft-sys.matlab
Subject: Re: very slow vectorized code
Date: Fri, 25 Apr 2008 19:18:01 +0000 (UTC)
Organization: Cranfield University
Lines: 80
Message-ID: <futap9$f0d$1@fred.mathworks.com>
References: <fupais$8av$1@fred.mathworks.com> <fupbim$hs6$1@fred.mathworks.com>
Reply-To: "Yi Cao" <y.cao@cranfield.ac.uk>
NNTP-Posting-Host: webapp-03-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1209151081 15373 172.30.248.38 (25 Apr 2008 19:18:01 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Fri, 25 Apr 2008 19:18:01 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 69713
Xref: news.mathworks.com comp.soft-sys.matlab:465244


"Julian Reichl" <julesreichl@yahoo.co.uk> wrote in message 
<fupbim$hs6$1@fred.mathworks.com>...
> I just tried commenting out all the other code within the 
loop 
> i=1:28305
> ...
> end
> and it bought that e(:,:)=0;
> statement back to 0.04s. So could this mean that there is
> some memory issue?
> 
> "Julian Reichl" <julesreichl@yahoo.co.uk> wrote in message
> <fupais$8av$1@fred.mathworks.com>...
> > Hi all,
> > I have a problem that I can't figure out.  I have two
> > versions of some code, one vectorised, the other not. 
The
> > vectorised version runs WAY slower for single repeats - 
~17
> > seconds cf. 0.3 seconds.
> > 
> > The profiler tells me that pretty much every line of the
> > code is a lot slower in the vectorised version. Even 
simple
> > things like 
> > 
> > e=repmat(1,1);
> > for i=1:28305
> > e(:,:)=0;
> > end
> > 
> > (the 1:28305 is a time-stepping loop and can't be 
removed)
> > takes 0.39 s inside the vectorised code (not including 
the
> > repmat), whereas in the command line it takes less than 
a
> > 10th of that time.
> > if, in the same code (the vectorised version), I 
replace it
> > with 
> > 
> > for i=1:28305
> > e=0;
> > end
> > 
> > (which is fine for this example because it's a 1x1, but 
not
> > for my application), the time for that function drops,
> > again, to ~ a 10th. 
> > 
> > I really hope someone has an idea!!!
> > 
> > thanks
> > 
> > Julian
> > 
> 

I guess this is because JIT accelerator, i.e. your 
vectorized code is quite complicated, hence the JIT 
accelerator is not able to accelerate it, while your simple 
loop version is in favour for the JIT to accelerate. When 
you remove all other lines in the loop, the vectorized 
version becomes simple as well, hence the JIT can 
accelerate it now. That is why you see speed improvement. 
To demonstrate this, you can try run your code with JIT on 
and off by using the command:

feature accel on

or

feature accel off

to see if this is the case.

hth
Yi Cao