1. 程式人生 > >Matlab使用:多核平行計算

Matlab使用:多核平行計算

Matlab程式的執行效率,很大程度上決定著科研工作的效率。如果能把迴圈轉變為矩陣運算無疑是最高效的,但實際使用的過程中經常碰到不得不迴圈的情況。如果迴圈次數很多,執行速度就會大大減慢,此時使用平行計算可以很好的提高效率。

這裡給出一個平行計算的例子,同時提醒幾點注意事項。

%% 啟動平行計算
core_number=2;            %想要呼叫的處理器個數
parpool('local',core_number);
% % % % % % 啟動後有如下提示:
% Starting parallel pool (parpool) using the 'local' profile ...
% connected to 2 workers.
%% 算例(沒有實際意義,甚至很奇怪的例子)
temp = [];
for j = 1:100
    for i = 1:10
        x = i + j;
        temp(i) = x;
    end
    % y = x + 1;        %x是臨時變數,不能在parfor迴圈外使用
    y = temp .^ 2;      %temp是sliced變數(基本就是向量),可以在parfor迴圈外使用
end


%% 關閉平行計算
delete(gcp('nocreate'));
% % % % % 關閉後有如下提示:
% Parallel pool using the 'local' profile is shutting down.

%% 啟動平行計算
core_number=2;            %想要呼叫的處理器個數
parpool('local',core_number);
% % % % % % 啟動後有如下提示:
% Starting parallel pool (parpool) using the 'local' profile ...
% connected to 2 workers.
%% 算例(沒有實際意義,甚至很奇怪的例子)
temp = [];
for j = 1:100
    for i = 1:10
        x = i + j;
        temp(i) = x;
    end
    % y = x + 1;        %x是臨時變數,不能在parfor迴圈外使用
    y = temp .^ 2;      %temp是sliced變數(基本就是向量),可以在parfor迴圈外使用
end


%% 關閉平行計算
delete(gcp('nocreate'));
% % % % % 關閉後有如下提示:
% Parallel pool using the 'local' profile is shutting down.
--------------------- 

Note

Matlab啟動並行環境是比較慢的,不過不用每次都重新啟動環境,啟動一次以後能一直使用;

parfor迴圈中的臨時變數不能在迴圈外使用且每次parfor迭代後臨時變數都會自動清除;

parfor迴圈不是按照順序來的,所以不能有以下操作:

parfor i = 1:10
    x(i)=x(i-1)+x(i+1);
end
parfor i = 1:10 x(i)=x(i-1)+x(i+1); end


parfor使用時機:每次迴圈相互獨立,且資料量較大;

注意透明度違例錯誤。
--------------------- 
作者:Ten_yn 
來源:CSDN 
原文:https://blog.csdn.net/qq_38290475/article/details/82223148