PDA

View Full Version : Domande sullo sfruttamento dell multicore


das
13-11-2007, 11:24
Volevo sapere:

Basta che l'applicazine sia multithread perchè poi windows gestisca il carico su tutti i processori disponibili ?

La memoria è una sola per tutti oppure a ciascun core ne è assegnata un po' ?

Se tramite puntatore due thread in esecuzione su due diversi core cercano di accedere alla stessa area di memoria che succede ?

andbin
13-11-2007, 12:05
Basta che l'applicazine sia multithread perchè poi windows gestisca il carico su tutti i processori disponibili ?Sì, nel senso che una applicazione multi-thread è tale da avere più flussi di esecuzione e siccome i thread vengono schedulati dal S.O., se esso si occupa di suddividere (più o meno) correttamente il carico di lavoro, allora chiaramente è ok.

La memoria è una sola per tutti oppure a ciascun core ne è assegnata un po' ?La memoria fisica principale è una sola. E viene gestita dal sistema operativo.
I processi però hanno spazi di indirizzamento diversi, separati. Mentre tutti i thread all'interno di un processo condividono lo stesso spazio di indirizzamento.
Ogni core potrebbe anche avere delle memorie cache proprie.

Se tramite puntatore due thread in esecuzione su due diversi core cercano di accedere alla stessa area di memoria che succede ?Se entrambi in lettura no problem. Se c'è una scrittura di mezzo, allora ci possono essere problemi.
Parlando in generale, l'accesso concorrente ad uno stato "mutabile" richiede una appropriata sincronizzazione tra i thread.

das
13-11-2007, 18:59
La memoria fisica principale è una sola. E viene gestita dal sistema operativo.
I processi però hanno spazi di indirizzamento diversi, separati. Mentre tutti i thread all'interno di un processo condividono lo stesso spazio di indirizzamento.
Ogni core potrebbe anche avere delle memorie cache proprie.

Dunque se il mio thread 1 usa un puntatore che punta alla locazione A
e il thread 2 usa un puntatore che punta alla stessa locazione di memoria.

Sono sicuro che entrambi continuano a leggere in A lo stesso dato anche se il S.O. li ha messi su core differenti, giusto?


Se entrambi in lettura no problem. Se c'è una scrittura di mezzo, allora ci possono essere problemi.
Parlando in generale, l'accesso concorrente ad uno stato "mutabile" richiede una appropriata sincronizzazione tra i thread.

E' difficile da implementare, non esiste un modo standard per ottenere questo sincronismo ?

cionci
13-11-2007, 19:32
Sono sicuro che entrambi continuano a leggere in A lo stesso dato anche se il S.O. li ha messi su core differenti, giusto?
Sì, sei sicuro. Ci sono dei meccanismi di sincronizzazione a livello hardware che permettono fare una lettura consistente di locazioni di memoria usate da due o più processori.

Su Windows per la schedulazione dei thread ti puoi affidare allo scheduler del kernel oppure consigliargli di assegnare un dato thread ad un dato processore in modo da cercare di forzare la schedulazione dei thread (ad esempio in modo da modificarla in base alla quantità di processori presenti nel sistema).

E' fondamentale quando si lavora sui thread conoscere buona parte della teoria su corse critiche, deadlock, mutua esclusione, semafori e le varie strutture che permettono una condivisione consistente dei dati fra thread.