2012-09-12 7 views
5

Matlab'da paralel hesaplama konusunda yeniyim. Bir sınıflandırıcı (SVM) oluşturan bir işlev var ve bunu birkaç veri kümesiyle test etmek istiyorum. 2 çekirdekli bir iş istasyonum var, bu yüzden paralel olarak test yapmak istiyorum. Birisi bana arasındaki farkı açıklayabilir: parfor döngü paralel iken SPMD vs. Parfor

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

ve

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

cevap

10

spmd, paralel bölgedir. Fark, spmd bölgesinde, paralel olarak gerçekleştirebileceğiniz görevler söz konusu olduğunda daha büyük bir esnekliğe sahip olmanızdır. Bir for döngüsü yazabilirsiniz, dağıtılmış diziler ve vektörler üzerinde çalışabilirsiniz. Genel olarak döngülerden daha fazlasını içeren bir iş akışını programlayabilirsiniz. Bu bir fiyata geliyor: işin ve iş parçacığınız arasındaki verilerin dağıtımı hakkında daha fazla bilgi sahibi olmanız gerekiyor. Döngünün paralelleştirilmesi, örneğin işçiler arasında döngü dizini aralıklarını (labindex kullanarak kodunuzda yaptınız) ve belki de dağıtılmış diziler oluşturmayı açıkça gerektirir.

Öte yandan, bu işlem sadece - döngü için paraleldir. Otomatik olarak paralelleştirilmiş, ekleyebilirsiniz, böylece iş MATLAB tarafından işçiler arasında bölünür.

Yalnızca tek bir döngüyü paralel olarak çalıştırmak ve daha sonra yerel istemcinizdeki sonuç üzerinde çalışmak istiyorsanız, parfor kullanmalısınız. Tüm MATLAB programınızı paralel hale getirmek istiyorsanız, spmd ve iş dağılımı karmaşıklığı ile uğraşmak zorunda kalacaksınız.

+0

Açıklama için teşekkürler. Bu yüzden, eğer yanılmıyorsam, yazdığım örnekler aynı sonuçları farklı şekillerde üretiyor, doğru mu? –

+1

@ Lazza87 Evet. Bu durumda hiçbir fark yoktur, her iki yöntemi de kullanabilirsiniz. – angainor

İlgili konular