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.
Grazie per la spiegazione. Quindi, se non sbaglio, gli esempi che ho scritto producono gli stessi risultati in modi diversi, giusto? –
@ Lazza87 Sì. In questo caso non c'è differenza, puoi usare entrambi i metodi. – angainor