|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2009
Messaggi: 5
|
[Java] condizione di uscita da un programma
Per migliorare le prestazioni di una libreria java mono-thread per il cal-
colo numerico si e deciso di migrare ad una piattaforma multiprocesso- re dotata di N CPU e di riscrivere in versione multi-thread un metodo BinaryTreeSum.computeSum(Node root) molto oneroso. Tale metodo permet- te di calcolare la somma dei valori contenuti nei nodi di un albero binario di enormi dimensioni. Per fare ciò ho creato un numero di thread visitatori dell'ordine del numero delle CPU disponibili e lascio insistere i singoli thread su un buffer di dimensione illimitata condiviso inizialmente contenente il solo nodo radice. I visitatori estraggono ripetutamente e concorrentemente un nodo dalla testa del buffer ed inseriscono in coda gli eventuali figli, dopo aver opportunamente considerato nel computo complessivo il valore del nodo fino al verificarsi di una opportuna condizione che però non riesco a trovare potreste darmi un suggerimento?? Quando faccio terminare tutto ciò?? Non posso utilizzare la sola condizione di buffer vuoto!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Non ti basta muoverti fino al livello dell'albero tale per cui i figli siano >N, ovvero tale per cui 2^liv > N
e da li' procedere con 2^liv Thread ciascuno dei quali effettua il calcolo sulla suo sottoalbero? Poi ritorni in seriale e ritiri i risultati dei 2^liv Thread considerando la parte restante dell'albero originale fino alla radice.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se ognuno degli N Thread piglia un nodo e sputa i figli (che terminologia tecnica, eh!?
Hai ragione da vendere quando dici che non basta che la coda dei nodi da esaminare sia vuota perchè potrebbe esserlo nel momento in cui un Thread abbia prelevato un nodo ma non abbia ancora inserito i figli. Quando alla struttura di controllo direi che siamo di fronte ad una via di mezzo tra una barriera ed un countdown. Tieni conto anche della soluzione di gugo perchè se l'operazione compiuta dal singolo Thread è sufficientemente rapida l'incidenza sui tempi di esecuzione della sincronizzazione richiesta per l'accesso alla coda e alla struttura di controllo potrebbe essere sensibile. Considera inoltre che collegare il numero di Thread al numero di CPU potrebbe non sfruttare pienamente la capacità della piattaforma perchè anche una singola CPU può eseguire istruzioni in parallelo - o almeno questo è quanto mi pare di ricordare dal buon vecchio Patterson-Hennessy.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:28.



















