2012-09-12 9 views
5

Sono nuovo sul calcolo parallelo in MATLAB. Ho una funzione che crea un classificatore (SVM) e mi piacerebbe testarlo con diversi dataset. Ho una workstation 2 core quindi mi piacerebbe eseguire test in parallelo. Qualcuno mi può spiegare la differenza tra: SPMD vs. Parfor

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

e

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

risposta

10

SPMD è una regione in parallelo, mentre parfor è un parallelo per ciclo. La differenza è che nella regione spmd si ha una flessibilità molto maggiore quando si tratta delle attività che è possibile eseguire in parallelo. È possibile scrivere un ciclo for, è possibile operare su array e vettori distribuiti. È possibile programmare un intero flusso di lavoro, che in generale consiste di più di un ciclo. Questo ha un prezzo: devi sapere di più sulla distribuzione del lavoro e dei dati tra i tuoi thread. Parallelizzare il ciclo, ad esempio, richiede la divisione esplicita degli intervalli di indice del ciclo tra i lavoratori (che hai fatto nel tuo codice utilizzando labindex) e forse la creazione di array distribuiti.

parfor d'altra parte fa solo questo - un ciclo per parallelizzazione. Parallelizzato automaticamente, è possibile aggiungere, quindi il lavoro è suddiviso tra i lavoratori di MATLAB.

Se si desidera eseguire un ciclo singolo in parallelo e successivamente lavorare sul risultato sul client locale, è necessario utilizzare parfor. Se vuoi parallelizzare il tuo intero programma MATLAB, dovrai affrontare le complessità di spmd e la distribuzione del lavoro.

+0

Grazie per la spiegazione. Quindi, se non sbaglio, gli esempi che ho scritto producono gli stessi risultati in modi diversi, giusto? –

+1

@ Lazza87 Sì. In questo caso non c'è differenza, puoi usare entrambi i metodi. – angainor

Problemi correlati