MATLAB: Can you do this calculation any faster

optimizationrepmatreshapespeed

Hi there
I am trying to optimize some code, an example is given below. In my code, v_ustar etc are calculated elsewhere, and depend on q. This piece of code needs to run in a quite large loop (larger than the 1:1000 given as example here), and I don't think vectorization of the entire loops is possible due to RAM issues. N is typically 16, but can be larger as well.
I use Ubuntu and MATLAB R2014a (I will probably upgrade to R2014b soon)
Thanks in advance!
N=16;
for q=1:1000
%generate some random test data
v_ustar=rand(2*N,N,N);
vstar_u=rand(2*N,N,N);
u_ustar=rand(2*N,N,N);
vstar_v=rand(2*N,N,N);
F=...
repmat(reshape(v_ustar,[2*N 1 N N]),[1 2*N 1 1]).*...
repmat(reshape(conj(vstar_u), [1 2*N N N]),[2*N 1 1 1])-...
repmat(reshape(u_ustar,[2*N 1 N N]),[1 2*N 1 1]).*...
repmat(reshape(conj(vstar_v), [1 2*N N N]),[2*N 1 1 1]);
F=reshape(F,4*N^2,[]).';
end

Best Answer

  • Another (small) improvement you can make here is to pull some of the static computations out of the loop. For example
    [2*N 1 N N]
    Doesn't change at all so it's being recomputed 1000x. Instead, create a variable out of it outside of the loop and then reference this variable everywhere inside it.
    What do you actually end up doing with F after the loop?
    I also wouldn't be surprised if splitting the F calculation into a few separate lines might help the JIT accelerator.