2015-06-25 22 views
9

Lo scorso semestre abbiamo dovuto sviluppare un raytracer per un corso a scuola. Facendo scuola, ho provato a giocherellare un po 'con esso.Java raytracing float vs double

Volevo vedere cosa sarebbe cambiato se avessi cambiato tutti i calcoli in virgola mobile da doppio a float (tutti i calcoli eseguiti con il doppio). Così ho cambiato ogni variabile per digitare float, e semplicemente per convertire ogni double restituito dai metodi Math in float. Testare il mio raytracer su un paio di scene ha mostrato un aumento delle prestazioni piuttosto discreto.

Ricerca nel Web Ho trovato vari motivi per cui il float potrebbe essere più veloce, ma alcuni dicono che il doppio potrebbe essere il più veloce o addirittura più veloce in un ambiente a 64 bit. Il fatto è che sono in esecuzione in un ambiente a 64 bit e JVM. Quale sarebbe la ragione di questo aumento delle prestazioni?

Ora, sto leggendo il libro PBRT e sto pianificando di riscrivere un raytracer da zero in seguito. La scelta del float per tutti i calcoli in virgola mobile pone problemi? Non ne ho notato alcuno durante i miei test, ma forse per alcune scene la precisione più bassa potrebbe (test di intersezione sembra come se potesse porre un possibile problema)? O forse un compromesso, come usare il doppio per i test critici e fluttuare per calcoli meno critici? Dovrei usare un'altra libreria matematica per sbarazzarmi del casting, sarei in grado di andare sul float.

+0

Credo che 'double d = 1d' sia due istruzioni, mentre' float f = 1f' è uno. Anche su macchine a 64 bit. Scambia con una JVM a 64 bit. – jn1kk

+0

"Sono in esecuzione in un ambiente a 64 bit" Un sistema operativo a 64 bit non conta come un ambiente a 64 bit. Anche il tuo compilatore e altri strumenti (come una JVM se stai facendo Java) devono essere 64-bit. –

+1

possibile duplicato di [Il float è più lento del doppio? Il programma a 64 bit è più veloce del programma a 32 bit?] (Http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -bit-program) –

risposta

6

Non v'è praticamente alcuna differenza tra float e double quando si tratta di velocità di calcolo , per quanto processori desktop sono la piattaforma. La differenza può derivare solo dall'aumento dei requisiti di larghezza di banda della memoria, poiché i doppi richiedono il doppio dello spazio.

È diverso per i calcoli basati su GPU, quelli sono più personalizzati per il galleggiante e ad es. Le GPU di Nvidia si dividono notevolmente per il doppio.

Vorrei andare con un approccio misto; memorizza dati come poligoni con precisione flottante, ma esegui tutti i calcoli in doppio. Piccolo ingombro di memoria, alta precisione - vantaggioso.

+0

Grazie per la tua risposta! Sembra un buon compromesso, qualcosa proverò. – Koekje