2017-08-12 75 views
1

這裏是一個玩具的例子,我把使用CPU加速執行的parfoor函數放在一起。即使在審查了Parallel文檔之後,我仍然很困惑如何將它升級到我的GPU上運行(Nvidia 980ti)。使用並行工具箱的GPU上的簡單蒙特卡洛

希望有關如何更新此代碼在GPU上運行的任何指針。

乾杯。

% toy example--monte carlo estimation of pi using for loops 
tic; 
N = 1000000000; 
hitcounter = 0; 
for i = 1:N 
    x = rand; 
    y = rand; 
    if (y < sqrt(1-x*x)) 
     hitcounter = hitcounter + 1; 
    end 
end 
disp(hitcounter/N*4) 
toc; 

% toy example--monte carlo estimation of pi using parfor loops 
tic; 
N = 1000000000; 
hitcounter = 0; 
parfor i = 1:N 
    x = rand; 
    y = rand; 
    if (y < sqrt(1-x*x)) 
     hitcounter = hitcounter + 1; 
    end 
end 
disp(hitcounter/N*4) 
toc; 

回答

1

你需要做的主要事情就是引導你的代碼 - 這總是一個好主意,尤其是在GPU上。然後,您只需使用尾部參數rand直接在GPU上構建xy

N = 1000000; 
x = rand(1, N, 'gpuArray'); 
y = rand(1, N, 'gpuArray'); 
pi_est = sum(y < sqrt(1 - x.*x))/N * 4; 

注意我縮回N以使其適合GPU。如果你想運行更高的值N - 我會建議添加一個外部循環,並基本上執行適合GPU有限內存的「塊」計算。