Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-12-2012, 17:26   #1
pinosx
Senior Member
 
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
[JAVA] Multithreading Ricorsivo

salve... vediamo se qualcuno mi riesce a dare una mano per poter impostare almeno logicamente questo problema...
ho realizzato una classe, che effettua calcoli matematici molto lunghi e complessi... la classe, può essere richiamata sia in modo ricorsivo, fino ad un certo punto, oppure, con le opportune modifiche, posso dividere il problema in 'n' problemi più piccoli, e chiamare questa classe 'n' volte, ed infine unire i risultati....
allora, sono riuscito ad avere un importante speed-up passando da 32bit a 64bit (4 volte più veloce) ma non riesco a schematizzare l'algoritmo con il multithreading per far sfruttare anche i processori multicore...
qualche idea???
pinosx è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2012, 08:22   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da pinosx Guarda i messaggi
allora, sono riuscito ad avere un importante speed-up passando da 32bit a 64bit (4 volte più veloce) ma non riesco a schematizzare l'algoritmo con il multithreading per far sfruttare anche i processori multicore...
qualche idea???
Sarà difficile che qualcuno possa aiutarti se non spieghi più nel dettaglio cosa fa il tuo algoritmo e come lo fa. Ad esempio postando la classe di cui parli o almeno il pseudocodice del tuo algoritmo.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2012, 19:10   #3
pinosx
Senior Member
 
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
eccomi... allora il codice non posso metterlo, però per farvi un'idea vi scrivo un po' di pseudocodice:
nel caso ricorsivo, immaginiamo di avere una classe che per comodità lavora con mio_tipo:

mio_tipo calcola(mio_tipo x, mio_tipo y){
se ho raggiunto una certa lunghezza allora
return x.elabora(y);
altrimenti:
divido il problema in 3
mio_tipo calcola(a,b)
mio_tipo calcola(c,d)
mio_tipo calcola(e,f)
return unione dei risultati
}

nella classe appena schematizzata, in modo ricorsivo divido il problema in sotto problemi, fino ad un certo punto, poi incomincio a restituire i risultati ed via via ad unirli fino a quando nello stack non torno al primo ciclio che riunisce tutti i risultati

il caso non ricorsivo, quello che forse si sposa meglio al multithreading ho un una cosa tipo questa:

mio_tipo calcola(mio_tipo x, mio_tipo y){
divido x in x1, x2, x3
divido y in y1, y2, y3
x1.elabora(y1)
x2.elabora(y2)
x3.elabora(y3)
unisci i pezzi
return risultato
}

come si può facilmente immaginare, i calcoli "pesanti" sono nella classe elabora, ed è proprio qui che vorrei usare il multithreading sfruttando, dove presente un dual core o quad core....

attualmente, tutte le elaborazioni, vengono eseguite dal thread principale (main) ed infatti motitorizzando l'utilizzo cpu su un quad core, si va al 25% (solo 1 core sta al 100%)
aggiungo che il tempo di elarazione di ogni "elabora" è più o meno lo stesso, quindi anche se prima di unire i risultati devo aspettare tutti i risultati, se fatti in parallelo, più o meno arrivano allo stesso tempo...
grazie in anticipo....
pinosx è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2012, 18:14   #4
pinosx
Senior Member
 
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
ci sto lavorando... se funziona, posterò il risultato magari può essere utile a qualcuno...
pinosx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v