2014-09-02 73 views
0

我有兩個長(1,000,000條目)載體IJ像這樣並行MATLAB - 創建分佈式陣列

N = 1000000; 
M = 1000; 
I = ceil(M*rand(1,N)); 
J = ceil(M*rand(1,N)); 

和它們包含一堆我使用到從一個小的矢量選擇元素索引

R = randn(1,M) 

像這樣

R1 = R(I); 
R2 = R(J); 

將所得載體R1R2當然有長度N。現在我想對這些載體進行一些重載處理,例如計算

Q = exp(-(R1-R2).^2); 

我該如何將這些代碼並行化以實現高效的多核處理?我認爲R1和R2應該以分佈式(或者更確切的說是公佈的)形式進行投票?

謝謝!

回答

0

如果你有一個NVIDIA GPU與CUDA和安裝並行計算工具箱兼容,你可以試試這個:

N = 1000000; 
M = 1000; 
I = ceil(M*gpuArray.rand(1,N)); 
J = ceil(M*gpuArray.rand(1,N)); 
R = gpuArray.randn(1,M); 
R1 = R(I); 
R2 = R(J); 
Q = exp(-(R1-R2).^2); 

的代碼將在引擎蓋被並行化和執行上的GPU上千種線程。在我的機器上(CPU Xeon E5-2665,GPU Tesla K20),CPU(串行)和GPU之間的速度提高了10倍以上。