parfor並行循環函數簡析
覺得有用的話,歡迎一起討論相互學習~
-
google中輸入matlab parfor,你將得到足夠多的資料來了解這是個什么東西,如果你耐心,建議去研究研究matlab 幫助中對parfor的說明。這里我只大概講一下parfor。parfor就是paralle+for,也就是並行的for循環,怎么個並行法?我理解就是,matlab會弄出幾個虛擬的小pc,一個算i=1:30部分循環,一個算i=50:80部分循環,再來一個算i=90:120部分循環,當然數字是我瞎編的,我是想說matlab將一個大循環分成小塊,然后這些小塊並行計算,最后再合在一起。
-
這樣,有一個問題,因為普通的循環是從i=1算到i=100,一個接一個算,如果下一次循環要依賴上一次循環怎么辦?如果出現這種情況,那就不能用matlab的parfor了。用parfor的前提條件就是,循環的每次迭代獨立,不相互依賴。舉個簡單的例子,計算1+2+3...+100就可以用parfor,但是如果計算斐波那契數列的前100個數字,那就不能用parfor了。
-
首先我是做圖像處理的,1000多個圖像,如果直接算可能要算上1天,所以我想用matlab的並行。我們都知道數字圖像可以看成矩陣,我們經常用for循環里面再加一個for循環來處理,但是parfor循環不能嵌套。那么原來的
for i=1:N
for j=1:M
end
end
就必須改成
parfor i=1:N
for j=1:M
end
end
或者
for i=1:N
parfor j=1:M
end
end
但是,這都不是最好的方法,因為如果循環的次數太少,並行就顯現不出威力來,所以最好的方法是這樣:
for k=1:M*N
i=mod(k-1,M)+1 %行號
j=floor((k-1)/M)+1 %列號
end