MATLAB 並行計算


主要函數:parfor

並行 for 循環

說明:

parfor LoopVar = InitVal:EndVal; Statements; end

在生成的 MEX 函數中或在共享內存多核平台上並行運行的 C/C++ 代碼中創建一個循環。

parfor 循環對 InitVal 和 Endval 之間的 LoopVar 值執行 Statements。LoopVar 指定由整數值組成的向量,這些值按 1 遞增。

parfor (LoopVar = InitVal:EndVal, NumThreads); Statements; end

在創建並行 for 循環時,最多使用 NumThreads 個線程。

寫法案例:

parfor rowIndex=1:regionRow
    point=cell(regionCol,4);
    for colIndex=1:regionCol
        disp(['rowIndex =',num2str(rowIndex),'colIndex =',num2str(colIndex)]);
        mdl = stepwiselm(full,pointLpmay{rowIndex,1}{colIndex,1},'quadratic','Verbose',0);
        point{colIndex,1}=mdl.Formula.Terms;            % 方程的項與結構
        point{colIndex,2}=mdl.Coefficients.Estimate;    % 方程項的系數
        point{colIndex,3}=mdl.Rsquared.Ordinary;    % 判定系數
        point{colIndex,4}=mdl.Rsquared.Adjusted;    % 調整判定系數
    end
    pointLpmaA{rowIndex,1}=point;
end

注意:

此種方法開啟並行默認使用最大線程數,而MATLAB默認允許的最大線程數為12,若計算機的真核數量超過12,可以用以下方式進行擴展:

%%%   設置MATLAB可以聯通24個線程(否則默認最大線程為12)   %%%
c = parcluster('local');
c.NumWorkers = 24;
parpool(c, c.NumWorkers);

  

已經開啟並行工具箱之后,若要重新開啟,需要先關閉之前的並行,再開新的,關閉方法如下:

delete(gcp('nocreate'))

 

參考資料:

https://ww2.mathworks.cn/help/coder/ref/parfor.html?s_tid=srchtitle

https://blog.csdn.net/enjoyyl/article/details/41929033

https://www.mathworks.com/matlabcentral/answers/131618-why-does-my-matlab-2014a-only-start-12-workers-when-i-ask-for-more

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM