2016-07-13 5 views
0

forループの各nステップ時間のかかる操作を実行する必要があります。これは後でn回繰り返すだけです計算を開始するには反復i-1の結果が必要です。Matlab - forループ:2つのスレッドを作成し、n回の繰り返しごとに結合します

私はマルチスレッド化のメリットがあると信じています。 i: (1番目のスレッド):メインループがi + nに到達するまで実行し、2番目のスレッドが終了するのを待ちます。 (2番目)は時間のかかる操作です。

とにかくそれを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

次の2つの部分にスクリプトを分離することができる:あなたが第二のループをスピードアップするために、並列コンピューティング・ツールボックスを使用することができ、Xアレイ

を計算するために、Yアレイ 2。第2のループを計算する 1.最初のループ。例えばparfor

+0

私は自分のコードを編集しました:y(i)の計算に最後に更新されたxが必要なので、2つのループでそれらを分けることはできません。とにかくありがとう – Fsauv

+0

この場合、並列に実装することもできますが、計算速度の面で大きな変化は見られません。 x(i)の計算は依然として全体の計算速度を制限します。依存関係のために、私はそれが効率的に並列に実装できるとは思わない。 –

関連する問題