2016-07-13 70 views
0

for循環的每n個步驟我需要執行一個耗時的操作,我只需要n次迭代(下次我要這次調用消耗的操作) - 仍然需要迭代i-1的結果來開始計算。Matlab - for循環:創建兩個線程並每n次迭代連接它們

我相信我可以受益於多線程 - 只有2個線程。在i: (第一個線程):繼續運行主循環,直到它到達i + n並等待第二個線程完成。 (第二)做耗時的操作。

無論如何要在Matlab中實現?

for i=1:1:N 
    y(i) = g(y(i-1), x(i-1)); 

    if(mod(i, n) == 1) 
    x(i) = f(x(i-n), y(i-1)); %Time consuming 
    else 
    x(i) = x(i-1); 
    end 
end 

謝謝!

+0

這不是多軌道工作方式。 –

+0

然後並行處理? – Fsauv

回答

1

可以將腳本分成兩個部分: 1.第一循環以計算ý陣列 2.第二循環以計算在x數組

可以使用並行計算工具箱加快第二環路。例如parfor

+0

我編輯了我的代碼:y(i)的計算需要最後一次更新的x,所以我不能在你提到的兩個循環中將它們分開。無論如何感謝 – Fsauv

+0

在這種情況下,即使您可以並行執行它,您在計算速度方面也看不到太多變化。 x(i)的計算仍然限制了您的整體計算速度。由於依賴性,我不認爲它可以有效地並行執行。 –