| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | 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: 22:41.









 
		 
		 
		
 
  
 







