MATLAB Language Esecuzione di comandi in parallelo usando un'istruzione "Single Program, Multiple Data" (SPMD)


Esempio

A differenza di un parallelo for-loop ( parfor ), che prende le iterazioni di un ciclo e li distribuisce tra più thread, un singolo programma, più dati ( spmd ), prende una serie di comandi e li distribuisce a tutti i thread, in modo che ciascuno thread esegue il comando e memorizza i risultati. Considera questo:

poolobj = parpool(2);    % open a parallel pool with two workers

spmd
    q = rand(3);         % each thread generates a unique 3x3 array of random numbers
end

q{1}             % q is called like a cell vector
q{2}             % the values stored in each thread may be accessed by their index

delete(poolobj)  % if the pool is closed, then the data in q will no longer be accessible

È importante notare che è possibile accedere a ciascun thread durante il blocco spmd tramite il relativo indice di thread (denominato anche lab index o labindex ):

poolobj = parpool(2);        % open a parallel pool with two workers

spmd
    q = rand(labindex + 1);  % each thread generates a unique array of random numbers
end

size(q{1})                   % the size of q{1} is 2x2
size(q{2})                   % the size of q{2} is 3x3

delete(poolobj)              % q is no longer accessible

In entrambi gli esempi, q è un oggetto composito , che può essere inizializzato con il comando q = Composite() . È importante notare che gli oggetti compositi sono accessibili solo mentre il pool è in esecuzione.