Borrar filtros
Borrar filtros

speed up execution time for monte carlo simulation

6 visualizaciones (últimos 30 días)
androidguy
androidguy el 24 de Sept. de 2016
Comentada: androidguy el 24 de Sept. de 2016
Hello guys
I am doing a monte carlo simulation and this is the core logic of my simulation. I have to repeat below mentioned code nested loop operation 8 times to get the final plot. So the whole operation its taking around 2 hours to plot. I am getting the result i want and very happy with it but i would be very glad if someone helped me speed up execution time. So I read about par for and when i attempt to use it in my case, its conflicting near this line, something to do with indexing in parfor -
my_vec(:,ji) = diag(V);
Also when i use parfor inside the first for loop, there is no improvement in speed. So I believe parfor has to be applied in the first for loop like this -
parfor
for
% code
end
end
This is my dummy nested for-loop code -
fin_ans = zeros(length(dummy), length(Iteration));
for ij = 1 : length(dummy)
some_vec = dummy(ij);
for ji = 1 : Iteration
H = random(something);
[S, V, D] = svd(H);
my_vec(:,ji) = diag(V);
fin_ans(ij, ji) = myfunc(some_vec, my_vec(:,ji));
end
end
fin_ans1 = mean(fin_ans');
Thanks,
  1 comentario
androidguy
androidguy el 24 de Sept. de 2016
Editada: androidguy el 24 de Sept. de 2016
edit -
I corrected some of my code and the execution time is approx 4.5 hours now!! But the core part, which is the looping part has no changes in code. So I would really appreciate any help to speed things up. I am also looking up for solutions and I will post it here if i find any..
Thank you,

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 24 de Sept. de 2016
fin_ans = zeros(length(dummy), length(Iteration));
parfor ij = 1 : length(dummy)
some_vec = dummy(ij);
for ji = 1 : Iteration
H = random(something);
[S, V, D] = svd(H);
my_vec(:,ji) = diag(V);
row_ans(ji) = myfunc(some_vec, my_vec(:,ji));
end
fin_ans(ij, :) = row_ans;
end
fin_ans1 = mean(fin_ans');
  5 comentarios
Walter Roberson
Walter Roberson el 24 de Sept. de 2016
fin_ans = zeros(length(dummy), length(Iteration));
parfor ij = 1 : length(dummy)
some_vec = dummy(ij);
row_ans = zeros(1,Iteration);
for ji = 1 : Iteration
H = random(something);
[S, V, D] = svd(H);
my_vec = diag(V);
row_ans(ji) = myfunc(some_vec, my_vec);
end
fin_ans(ij, :) = row_ans;
end
fin_ans1 = mean(fin_ans');
androidguy
androidguy el 24 de Sept. de 2016
The code is running without any errors. The execution time was 15 mins without using parfor. Now its 4.9934424 mins!!!
Thank you so much for your help!! I really do appreciate it.

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