필터 지우기
필터 지우기

speed up execution time for monte carlo simulation

조회 수: 6 (최근 30일)
androidguy
androidguy 2016년 9월 24일
댓글: androidguy 2016년 9월 24일
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
androidguy
androidguy 2016년 9월 24일
편집: androidguy 2016년 9월 24일
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,

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2016년 9월 24일
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
Walter Roberson
Walter Roberson 2016년 9월 24일
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 2016년 9월 24일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by