Thursday, August 28, 2008

A simple way to parallel processing in Matlab

Matlab從R2006版之後開始支援多處理器,可是所用的Distributed Computing Toolbox(現在改名為Parallel Processing Toolbox)設定麻煩且要改些程式碼,實在不容易使用。其實在影像或信號處理中用到平行處理的往往只是希望能同時處理好幾個pixel或channel的資料,所以只需要能把迴圈平行處理就好了。所幸從R2007版之後,Matlab提供了一個簡單的方法來平行處理迴圈--只要將原本的for指令,改成parfor(),程式碼幾乎不需要太多修改(只要迴圈內array的使用符合某些條件,詳情看help),然後用matlabpool('local',NumberOfCore)這個指令啟動queue,就可以平行執行啦。

3 comments:

Anonymous said...

最猛的應該是用 GPU來作矩陣運算吧

Anonymous said...

請問大大 parfor中的陣列若是二維 且內部不用迴圈的變數(如 t)

寫出來是這樣
E(i,j) = A(i,j) * E(i,j)

但卻一直被系統告知parfor不能接受"E"
請問大大 該如何修改 ^_^

Kai said...

使用parfor有一些限制,多維陣列就是個問題,即使沒有用到迴圈變數,它也還沒有聰明到能判斷這些變數不會產生衝突。另外,有if判斷的也會造成困擾。所以能不放在parfor裡面的就盡量拿到迴圈外,或者簡化成一維陣列,該怎麼改,還是要看你的code才能有具體建議。