Newsgroup: it.comp.lang.visual-basic
Titolo: velocità di esecuzione

Salve a tutti.
Sto sviluppando un programma di ottimizzazione (algoritmo genetico) che ha
un core di matematica pesante. Questo mi porta via il 100% del processore
per 10-15 ore. (PIII 800 MHz)
Un mio collega sostiene che se scrivessi in C la parte "pesante" e facessi
una DLL, sarebe molto più veloce, ma ovviamente non da giustificazioni a
questa sua affermazione.
Secondo voi è vero? Mi conviene?
Grazie
Pelo

 Secondo voi è vero? Mi conviene?
imho, è sicuramente vero, se chi scrive la dll è bravo a usare il c.
se lo facessi io, ad esempio, riuscirebbe anche ad essere più lenta.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 Secondo voi è vero? Mi conviene?
A parità di algoritmo e - per quanto possibile - implementazione, sì.
Nel caso peggiore andrà poco più veloce.
termoPilucco
Inviato da 
www.mynewsgate.net

 per 10-15 ore. (PIII 800 MHz)
Non posso postare il codice, altrimenti qui mi uccidono però posso provare a
descrivere il problema.
Immaginate una bella porzione di lasagne alla bolognese... (visto che è ora
di pranzo) composta di 100 strati circa (o meglio bistrati) fatti di pasta e
ragù+besciamella...totale 200 "materiali diversi".
Ora i due materiali sono elementi chimici (esempio a caso Cobalto e
tungsteno) con spessori nell'ordine di qualche nanometro. Quello che
ottenete è un multilayer coating, ossia una tecnica di copertura per specchi
che devono riflettere i raggi x. (a quelle energie lo strato di alluminio
degli specchi che usiamo per farci la barba non serve).
Problema: ottimizzare *ogni singolo spessore* per ottenere un certo profilo
di riflettivita quando:
a) a energia fissa vario l'angolo di incidenza da 0 a 90°
b) a angolo di incidenza fisso vario l'energia della radiazione.
Soluzione:
Si crea una popolazione di N idividui che come geni hanno lo spessore di
ogni strato (inizializzate come si vuole, a caso o assegnando una
configurazione di partenza).
si calcola la riflettività punto per punto(angolo per angolo o energia per
energia a seconda) e quindi si calcola una funzione di merito che dice
quanto buona è una soluzione.
Ordino gli N individui in dbase alle performances e poi scarto la meta (i
tre quarti, o comunque quello che voglio) riprestinando la popolazione
clonando gli individui migliori.
Tengo il primo (che mi ha dato il miglior risultato) e modifico uno o più
geni degli altri secondo svariate tecniche ossia random, incrociando i geni
(### + §§§ = #§§ + §##) o altro ancora e ripeto all'infinito finchè ottengo
(se ottengo) un risultato che mi soddisfa.
Spero di essere stato chiaro.
Pelo

 Spero di essere stato chiaro.
chiarissimo.
praticamente vai a tentativi :-)


 praticamente vai a tentativi :-)
Quasi! :-)
D'altra parte è quello che fa la natura...
Non potendo considerare tutte le possibilità perchè quasi infinite fai
evolvere quelle migliori... una sorta di Pokemon! :-D
Pelo


Beh, in linea di massima e' vero, dal momento che a) il compilatore ha
ottimizzazioni piu' spinte e b) visto che il livello e' piu' basso,
tu, programmatore, hai maggior controllo sul codice. Il fatto e' che,
stante b, ti possono venire anche le ciofeche piu' incredibili.
--
Ciao!
Luca Menegotto