Clear Filters
Clear Filters

speed up execution time for monte carlo simulation

6 views (last 30 days)
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 Comment
androidguy
androidguy on 24 Sep 2016
Edited: androidguy on 24 Sep 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,

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 24 Sep 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 Comments
Walter Roberson
Walter Roberson on 24 Sep 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 on 24 Sep 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.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements 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!