GPU computing monte carlo simulation
5 views (last 30 days)
Show older comments
i don't know why this code calculation time is same with cpu calculation
How can I make it calculate at gpu?
t=tic(); % measure the calculation time
P = [0.1 0.2 0.3 0.4 0.5]; % Probability of basic events
m = 0;
N = 1000; % Num of iteration
A = ones(N,1,'gpuArray'); % GPU calculation
for n = 1:N % iteration
for i = 1:numel(P)
r = rand();
if r <= P(i) % sampling
S(i) = true;
else
S(i) = false;
end
end
% gate # GAB
Sg = DetermineState (20,S(2),S(3));
Sg1 = Sg;
% gate # GAC
Sg = DetermineState (20,S(4),S(5));
Sg2 = Sg;
% gate # A
Sg = DetermineState2 (10,S(1),Sg1,Sg2);
St = Sg;
if St == true
m = m+1;
end
end
m = gather(count);
P = m/N;
value = P
gpuTime = toc(t)
DetermineState function is like this. But I think it is not problem.
function [Sg] = DetermineState(varargin)
% OR Gate
if varargin{1} == 10
if max(varargin{2},varargin{3}) == 0
u = 0;
else
u = 1;
end
% AND Gate
elseif varargin{2} == 20
if min(varargin{2},varargin{3}) == 0
u = 0;
else
u = 1;
end
% NOT Gate
else
u = 0;
end
Sg = u;
end
2 Comments
Walter Roberson
on 9 Mar 2021
Edited: Walter Roberson
on 9 Mar 2021
for i = 1:numel(P)
r = rand();
if r <= P(i) % sampling
S(i) = true;
else
S(i) = false;
end
end
Is there a reason you did not vectorize that as
S = reshape(rand(size(P)) <= P, 1, []);
Raymond Norris
on 9 Mar 2021
My sense is that this might not be the complete code, for several reasons.
- A is a gpuArray, but nowhere are you using it. Therefore, everything is on the CPU.
- Towards the end is the code
if St == true
m = m+1;
end
end
m = gather(count);
However, count is not assigned anywhere. I'm also puzzled why you'd assign m in the for-loop, but then override it when you assign it to the gathering of count (which presumable is on the GPU).
3. I'm gathering that this
Sg = DetermineState2 (10,S(1),Sg1,Sg2);
should be
Sg = DetermineState (10,S(1),Sg1,Sg2);
DetermineState2 isn't provided.
One last note (and again, it might be because the code sample isn't complete), the code as written takes almost no time (I realize that's all relative and perhaps this needs to be called many time), so this might not perform well on a GPU. GPU calculations perform much better when lots of (somewhat large) work is being assigned to it.
Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!