2017-08-12 8 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

あなたがする必要がある主なものは、あなたのコードをvectoriseすることである - これは常に良い考えです、特にそうGPUに。次に、末尾の引数randを使用して、xyを直接GPUに構築するだけです。

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

メモこれをGPUに適合させるには、Nを縮小しました。 Nというより高い値で実行したい場合は、外側のループを追加し、本質的にGPUの限られたメモリに収まる「チャンク」で計算を実行することをお勧めします。

関連する問題