|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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??? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
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) |
|
|
|
|
|
#3 |
|
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.... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
|
ci sto lavorando... se funziona, posterò il risultato magari può essere utile a qualcuno...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:24.




















