Borrar filtros
Borrar filtros

How to reduce For loop execution time?

3 visualizaciones (últimos 30 días)
Ajinkya Bankar
Ajinkya Bankar el 5 de Dic. de 2019
Comentada: Walter Roberson el 7 de Dic. de 2019
I have following Matlab code to calculate summation of exponential summation term:
This code takes approx. 600 seconds to give final output s. Is there any way to reduce this computation time?
sum1 = 0;
s = 0;
for i=1:1000000000
for j=1:3
sum1 = sum1+(i*proc(j))^2;
end
s = s+exp(-sum1);
end
  7 comentarios
Steven Lord
Steven Lord el 5 de Dic. de 2019
What is the mathematical (not code) expression of what you're trying to compute with this code? Or do you have a description in words of what you're trying to compute? That might help us understand what the right result is and find an efficient way to compute that right result.
Also, what are the contents of the variable proc? When you get to the last iterations of the outer loops, you're adding an extremely large number to sum1 unless the elements of proc are very small. You might be able to stop the outer loop sooner if sum1 is so large that exp(-sum1) underflows to 0.
y = 750;
exp(-y) % 0
Ajinkya Bankar
Ajinkya Bankar el 6 de Dic. de 2019
I apologize for my mistake. I interpreted the equation in wrong way. sum1 should be 0 inside outer for loop. Thank you everyone for your help and suggestions.

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 5 de Dic. de 2019
>> tic;s = sum(exp(-sum((reshape(proc(1:3), [], 1) * (1:1000000000)).^2))); toc
Elapsed time is 55.136908 seconds.
This was slowed down a fair bit because I ran out of memory and it started to swap. On my system, if I had run it in 10 sections of 1E8 the time would have been less than 20 seconds.
  6 comentarios
Ajinkya Bankar
Ajinkya Bankar el 6 de Dic. de 2019
Editada: Ajinkya Bankar el 6 de Dic. de 2019
Yes, the values in proc are very very small. Therefore, I need to execute outer for loop more times.
proc = [2.89836435405037e-13, 1.14346678029400e-12, 4.58424445869020e-13]
Walter Roberson
Walter Roberson el 7 de Dic. de 2019
I notice that the contribution of each element does not go down to eps until you reach 4743809974903 which is greater than 2^42. Even if you break it up into segments to avoid memory overflow, that is a lot of calculations. If we approximate being able to do 2^30 values per second (e.g., 3-ish GHz CPU and suppose somehow it only took 3 clock cycles per value) then it would take 2^12 = 4096 seconds. My measured speed on my system is more on the order of 4.6E-8 seconds per iteration, approximately 218215 seconds = about 60 hours.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by