Azzera filtri
Azzera filtri

speed up execution time for monte carlo simulation

6 visualizzazioni (ultimi 30 giorni)
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 Commento
androidguy
androidguy il 24 Set 2016
Modificato: androidguy il 24 Set 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,

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 24 Set 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 Commenti
Walter Roberson
Walter Roberson il 24 Set 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 il 24 Set 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.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by