此外,我們也可以借用多核電腦的平行處理,來加速程式碼的執行。欲達到此功能,你的電腦必須具備多核心,而且你的系統也必須先安裝平行處理工具箱(Parallel Processing Toolbox,簡稱 PCT)。若兩者兼備,加速計算的方法如下:
- 在使用平行處理指令之前,下達「matlabpool local n」指令,其中 n 代表核心數目,例如 4(四核心電腦)或 8(八核心電腦)。
- 使用 parfor 指令來取代原來的 for 迴圈,其指令格式如下:
parfor loopvar = initval:endval, statements, end
- 最後下達「matlabpool close」來關閉平行處理的功能。
我們就可以來嘗試一個簡單的範例:
在這個範例中,我們產生了 1000 個 100x100 的亂數矩陣,然後計算每一個矩陣的特徵值(共有 100個)的最大值,若使用平行處理專用的 parfor 迴圈,計算速度是一般 for 迴圈的 3 倍左右。(我的電腦是四核心。)
如果你在執行 MATLAB 時,一邊還要還要修改論文,此時若 MATLAB 佔用了所有的多核 CPU,可能會導致電腦整個慢下來,讓你無法進行文書編輯。因此 parfor 提供另一個參數,可以指定所用到的工作者個數,指令格式如下:
parfor (loopvar = initval:endval, M), statements, end
其中 M 即是所用到的核心個數。例如在下例中,雖然我的電腦是四核心,但我只使用兩核來進行 parfor 的運算:
由於只用到兩核,所以加速倍數接近兩倍。
在使用 parfor 迴圈時,有幾點要特別注意:
- 因為每個迴圈可能有不同的核心同時計算,因此迴圈之間不能有相依性,否則會造成錯誤的結果,這是特別需要注意之處。
- 在 parfor 迴圈的迴圈變數必須是整數,而且每次變大幅度都是1,以下是幾個不符合規定的範例:
不合格的 parfor 用法 | 說明
|
---|
parfor i = 1:2:25 | 1, 3, 5,... 非連續整數。
|
parfor i = -7.5:7.5 | -7.5, -6.5,... 非整數。
|
A = [3 7 -2 6 4 -4 9 3 7]; parfor i = find(A>0) | 結果是 1, 2, 4,...,非連續整數。
|
parfor i = [5;6;7;8] | [5;6;7;8]是一個行向量,而非 parfor 所須要的列向量。
|
PCT 是一個功能強大的工具箱,目前也可以支援多台電腦的平行運算,並可以使用 GPU(Graphic Processing Unit,圖形處理器)來進行大量的平行運算,詳細功能請參考下一小節的介紹。
MATLAB程式設計:進階篇