Add operation is too slow
    8 views (last 30 days)
  
       Show older comments
    
Hi! I have some operation of summing two arrays (vd, bd) of different lengths ((vl + 1)^2 and ((bd + 1)^2). I can't do summing as d = vd + bd (error: different lengths). How can I do this operations faster? I compile MEX, but this did not give the required increase in speed. I need speed up adding because it using around 20 million 
function [l, d] = add(vl, vd, bl, bd, lmax)
  l = max([vl, bl, lmax]);
  d = zeros((l + 1)^2, 1);
  i = 1:(vl + 1)^2;
  j = 1:(bl + 1)^2;
  d(i) = d(i) + vd(i);
  d(j) = d(j) + bd(j);
end
2 Comments
  KALYAN ACHARJYA
      
      
 on 27 May 2021
				Can you share the detail example? What would be the result in the following case?
vd=[1 2 3]
bd=[4 5 6 7]
Accepted Answer
  Jan
      
      
 on 27 May 2021
        
      Edited: Jan
      
      
 on 27 May 2021
  
      It would save time to work with the real sizes instead of providing vl, if you actually need (vl+1)^2. This would save 60 mllion squaring operations.
function [l, d] = add(vl, vd, bl, bd, lmax)
  l  = max(max(vl, bl), lmax);
  d  = zeros((l + 1)^2, 1);
  iv = (vl + 1)^2;
  id = (bl + 1)^2;
  d(1:iv) = d(1:iv) + vd(1:iv);  % Or:  d(1:iv) + vd;  ?
  d(1:id) = d(1:id) + bd(1:id);  % Or:  d(1:id) + bd;  ?
end
The JIT acceleration profits from using x(a:b) instead of creating the index vector v=a:b; x(v). 
If the inputs are uniquely explained, it would be possible to modify the function without too much guessing. Maybe this would be better already, maybe not:
function [len, d] = add(a, b, len)
na  = numel(a);
nb  = numel(b);
len = max(max(na, nb), len);
d   = zeros(len, 1);
if na == nb
   d = a + b;
elseif na > nb
   d(nb+1:na) = a(nb+1:na);
   d(1:nb)    = a(1:nb) + b;
else
   d(na+1:nb) = b(na+1:nb);
   d(1:na)    = a + b(1:na);    
end
end
0 Comments
See Also
Categories
				Find more on MATLAB Compiler in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


