2012-09-12 50 views
5

私はmatlabの並列計算については新しいです。私はクラシファイア(SVM)を作成する関数を持っており、私はいくつかのデータセットでそれをテストしたいと思います。私は2つのコアワークステーションを持っていますので、テストを並行して実行したいと思います。誰かが私の違いを説明することができます: SPMDとParfor

dataset_array={dataset1, dataset2} 
matlabpool open 2 
spmd 
     my_function(dataset(labindex)); 
end 

dataset_array={dataset1, dataset2} 
matlabpool open 2 
parfor i:1=2 
     my_function(dataset(i)); 
end 

答えて

10

SPMDをのparforループのために並列である一方で、並列領域です。違いは、spmd地域では、並列実行可能なタスクに関してはるかに大きな柔軟性があることです。あなたはforループを書くことができ、分散配列やベクトルを操作することができます。ワークフロー全体をプログラムすることができます。これは一般的にループ以上のもので構成されます。これは価格で提供されています。スレッド間で作業とデータを分散する方法についてもっと知る必要があります。たとえば、ループを並列化するには、労働者(コードでlabindexを使用して実行した)のループインデックス範囲を明示的に分割し、おそらく分散配列を作成する必要があります。

parfor一方、これは並列化されたforループです。自動的に並列化され、追加することができますので、MATLABによって作業が分割されます。

あなただけのローカルクライアント上の結果に並行して、後の作業で単一のループを実行する場合は、のparforを使用する必要があります。 MATLABプログラム全体を並列化したい場合は、spmdとwork distributionの複雑さに対処する必要があります。 explanation.Henceため

+0

おかげで、私は間違っていないよ場合は、私が書いた例は右、異なる方法で同じ結果を生みますか? –

+1

@ Lazza87はい。この場合は違いはなく、両方の方法を使用できます。 – angainor

関連する問題