• Non ci sono risultati.

Comunicazione tra il processo ℜ e

processi allocati sugli SPE:

meccanismi di supporto alla

comunicazione e implementazione

Nei canali PPE-SPE, che mettono in comunicazione il processo ℜ con i processi allocati sugli SPE, si `e adottato, in parte, lo schema utilizzato per i canali di comunicazione standard. In particolare, un processo allo- cato sugli SPE ottiene informazioni sullo stato della coda dei messaggi nello stesso modo in cui le ottiene per i canali standard. Le segnalazio- ni al partner della comunicazione, il processo ℜ, sono inviate utilizzan- do il meccanismo delle mailbox, messo a disposizione dall’architettura. L’architettura non offre un meccanismo di comunicazione interprocessor equivalente al canale dei segnali che permetta la comunicazione fra PPE e SPE, che possa essere partizionato e utilizzato nondeterministicamente da pi`u partner di comunicazione. Il meccanismo delle mailbox imple- menta un canale di comunicazione asincrono su cui inviare messaggi di tipo senza segno. La strategia proposta `e descritta di seguito. La libre- ria offre un’unica implementazione dei canali PPE-SPE, che implementa la forma di comunicazione simmetrica asincrona con grado di asincronia Tdegree > 0. I canali non offrono primitive wait e keep.

4.6. Comunicazione tra il processo ℜ e i processi allocati sugli SPE: meccanismi di supporto alla comunicazione e implementazione

Schema del supporto per le comunicazioni tra il processo ℜ e i processi allocati sugli SPE

Ad ogni canale di comunicazione allocato sul processo ℜ - cui ci riferiremo nel seguito della sezione come canale lato PPE - `e associato un semaforo intero, il cui valore indica il numero di messaggi presenti in coda, nel caso in cui il processo ℜ sia il processo destinatario, e al numero di variabili targa disponibili per la scrittura, nel caso in cui il processo ℜ sia il processo mittente. Il test sulla presenza di messaggi, nel caso del destinatario, o sulla disponibilit`a di variabili targa disponibili nel caso del mittente, `e implementato con una primitiva P sul semaforo associato al canale. Il partner della comunicazione, per segnalare l’avvenuta ricezione o l’avvenuto invio di un messaggio, invia un messaggio utilizzando le mailbox, contenente il corrispondente identificatore di canale.

Ad ogni processo allocato sugli SPE `e associato un thread, chiamato listener, che attende messaggi sulla mailbox di uscita del SPE corrispon- dente. Il thread listener si comporta a tutti gli effetti come un demul- tiplexer, effettuando, in base all’identificatore di canale ricevuto, una V sul semaforo corrispondente. La corrispondenza idcanale → semcanale `e

mantenuta in un vettore, indicizzato con l’identificatore di canale stesso - si noti che l’identificatore di canale utilizzato per indicizzare il vettore non `e quello assegnato dal programmatore, ma quello progressivo asse- gnato dal supporto. Ogni elemento del vettore `e una lista di semafori, in quanto se un canale `e utilizzato in un comando alternativo, che utilizza anch’esso un semaforo per effettuare l’attesa quando nessuna delle sue guardie risulti verificate e almeno una sia sospesa, sar`a necessario effet- tuare una V anche sul semaforo associato al comando alternativo. Per dettagli sull’implementazione del comando alternativo per il processo ℜ si rimanda alla sezione 4.7.2. In figura 4.11 `e illustrato le segnalazioni fra processo ℜ e processi allocati sugli SPE. Le segnalazioni inviate da ℜ ai processi allocati sugli SPE sono inviate utilizzando il canale dei segnali, seguendo lo stesso schema dato per l’implementazione di default. Il vet- tore di variabili targa `e quindi di Tdegree+ 1 elementi, dove Tdegree indica

il grado di asincronia, e ogni canale lato SPE utilizzer`a Tdegree + 1 bit

di segnale. Di seguito `e riportato, per chiarezza, l’algoritmo del thread listener. while ( true ){ chid = o u t _ m b o x _ r e a d ( s p e _ c o n t e x t ); f o r e a c h ( sem i n s e m t a b l e[ chid ]) do { V ( sem ); } }

Figura 4.11: Schema del supporto alla comunicazione PPE-SPE: segna- lazioni di eventi da SPE a PPE: con CHx `e indicato il canale con identi- ficatore progressivo x, con Sem(CHx) `e indicato il semaforo associato al canale CHx.

4.6.1

Primitive di comunicazione

In questa sezione descriveremo l’implementazione delle primitive di co- municazione. Non scenderemo nel dettaglio, in quanto l’implementazione `e del tutto simile a quella dei canali standard, per quanto riguarda l’u- tilizzo del canale dei segnali per i canali lato SPE. Nel caso in cui il mittente sia il processo ℜ, nel canale lato destinatario si useranno, come gi`a detto, Tdegree+ 1 bit di segnale, dove un bit posto a 1 di indice i corri-

sponde all’evento “messaggio disponibile nella variabile targa di indice i”, mentre se il processo ℜ `e destinatario, si useranno comunque Tdegree+ 2

bit per il canale lato mittente, e il bit di segnale di indice i segnaler`a l’evento “`e possibile scrivere un messaggio sulla variabile targa di indice i”. Se il processo ℜ `e mittente, il contatore del semaforo `e inizializzato a Tdegree, mentre se questi `e destinatario il semaforo `e inizializzato a 0. Il

trasferimento del messaggio avviene come nei canali standard quando il processo ℜ `e destinatario. Quando questi `e mittente invece, si utilizza il meccanismo delle proxy queue fornito dall’architettura. Utilizzando que- sto meccanismo, il PPE comunica alla MFC di un SPE il comando DMA da eseguire, che provveder`a a eseguirlo secondo le priorit`a stabilite dal-

4.6. Comunicazione tra il processo ℜ e i processi allocati sugli SPE: meccanismi di supporto alla comunicazione e implementazione

l’architettura. In alternativa si sarebbe potuto utilizzare il meccanismo di accesso diretto ai local storage, che permette di accedere a locazioni del local storage come se queste fossero in memoria principale - i local storage sono mappati nello spazio di indirizzamento del processo ℜ- ma si `e ritenuto pi`u opportuno utilizzare le proxy queue, in quanto que- ste garantiscono una maggiore efficienza. In figura fig:ppech-ppesr `e riportato l’algoritmo delle primitive send e receive dei canali di comuni- cazione PPE-SPE, quando il processo ℜ `e mittente. Nello pseudocodice, la funzione

p r o x y _ g e t( ctx , source , dest , size );

comunica alla MFC del SPE relativo al contesto ctx di trasferire il blocco di memoria principale di dimensione size puntato da source nell’area di local storage di indirizzo effettivo dest.

PPE:send

void send ( v o l a t i l e T_item * msg ) {

P ( sem );

p r o x y _ g e t ( msg , r e f _ v t g[ index ] , sizeof ( T_item )); < a t t e n d i t e r m i n e del t r a s f e r i m e n t o dma ; >

< s e g n a l a la p r e s e n z a di un m e s s a g g i o nella v a r i a b i l e targa di indice index u t i l i z z a n d o il canale dei segnali >

index = ( index +1) mod ( T _ d e g r e e + 1); }

SPE:receive

T_item * r e c e i v e () {

< invia i d e n t i f i c a t o r e di canale tamite mailbox > index = ( index +1) mod ( T _ d e g r e e + 1);

w a i t _ f o r _ b i t (& in_mask , index ); return vtg [ index ];

}

Figura 4.12: Algoritmi delle primitive di comunicazione per i canali PPE- SPE, con processo ℜ mittente. La variabile index `e inizializzata a 0 nel canale lato mittente e a T degree nel canale lato destinatario.

PPE:send

void send ( v o l a t i l e T_item * msg ) {

ssm :: w a i t _ f o r _ b i t (& in_mask , index );

< t r a s f e r i s c i via DMA il m e s s a g g i o nella v a r i a b i l e targa di d i n d i c e index >

< invia via m a i l b o x l ’ i d e n t i f i c a t o r e di canale > index =( index +1) mod ( T _ d e g r e e + 1);

}

PPE:receive

T_item * r e c e i v e () {

< s e g n a l a la possibilita ’ di s c r i v e r e un m e s s a g g i o nella v a r i a b i l e targa di indice

( index mod ( T _ d e g r e e + 1)) > P ( sem );

index = ( index +1) mod k ; return vtg [ index ];

}

Figura 4.13: Algoritmi delle primitive di comunicazione per i canali PPE- SPE, con processo ℜ destinatario. La variabile index `e inizializzata a 0 per il mittente e a T degree per il destinatario.