2012-09-12 21 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是並行for循環。不同的是,在spmd區域,當涉及到可以並行執行的任務時,您擁有更大的靈活性。你可以寫一個for循環,你可以對分佈式數組和向量進行操作。您可以編寫整個工作流程,通常由多個循環組成。這需要付出代價:您需要更多地瞭解在線程中分配工作和數據。例如,並行化循環需要在工作人員之間明確劃分循環索引範圍(您在代碼中使用labindex)並且可能創建分佈式數組。

parfor另一方面只做這個 - 一個並行化的循環。自動並行化,你可以添加,所以工作由MATLAB分工。

如果您只想並行運行單個循環,並稍後處理本地客戶端上的結果,則應該使用parfor。如果你想並行化你的整個MATLAB程序,你將不得不處理spmd和工作分配的複雜性。

+0

感謝您的解釋。因此,如果我沒有錯,我寫的例子以不同的方式產生相同的結果,對嗎? –

+1

@ Lazza87是的。在這種情況下沒有區別,你可以使用這兩種方法。 – angainor