Sto lavorando a un solutore Navier-Stokes fluidodinamico che dovrebbe funzionare in tempo reale. Quindi, le prestazioni sono importanti.L'aritmetica del punto fisso valuterà il mio problema?
In questo momento, sto osservando un numero di loop stretti che rappresentano una frazione significativa del tempo di esecuzione: non c'è un singolo collo di bottiglia. La maggior parte di questi cicli esegue un calcolo aritmetico in virgola mobile, ma vi sono molte ramificazioni nel mezzo.
Le operazioni in virgola mobile sono principalmente limitate a aggiunte, sottrazioni, moltiplicazioni, divisioni e confronti. Tutto ciò viene fatto usando float a 32 bit. La mia piattaforma di destinazione è x86 con almeno le istruzioni SSE1. (Ho verificato nell'output dell'assemblatore che il compilatore genera effettivamente le istruzioni SSE.)
La maggior parte dei valori in virgola mobile con cui sto lavorando ha un limite superiore ragionevolmente piccolo e la precisione per valori vicini allo zero non è 'molto importante. Quindi il pensiero mi è venuto in mente: forse passare all'aritmetica a punto fisso potrebbe accelerare le cose? So che l'unico modo per essere veramente sicuri è misurarlo, potrebbero essere necessari giorni, quindi mi piacerebbe conoscere le probabilità di successo in anticipo.
Il punto fisso era di gran moda ai tempi di Doom, ma non sono sicuro di dove si trova anno 2010. Considerando quanto il silicio oggi è pompato in prestazioni in virgola mobile, c'è una possibilità che fissa- l'aritmetica dei punti mi darà ancora un significativo aumento di velocità? Qualcuno ha qualche esperienza del mondo reale che potrebbe applicarsi alla mia situazione?
La ramificazione è probabilmente il più grande killer delle prestazioni. Cerca di ridurlo il più possibile. E no, non fare punto fisso. – phkahler
Ho trovato il contrario. In alcuni casi, potevo sostituire la ramificazione con qualche altra aritmetica in virgola mobile, ma questo rallentava le cose. – Thomas
indietro, in passato ho usato hardware SIMD a punto fisso specializzato ed è stato un enorme dolore al collo! Ci penserei due volte a riconsiderare l'aritmetica in virgola fissa. Vuoi passare la maggior parte del tempo a gestire le complessità dell'aritmetica in virgola fissa o risolvere il tuo problema più grande? Le CPU di oggi offrono più potenza e contengono FPU - io preferirei una soluzione in virgola mobile. Piuttosto, dedica del tempo a cercare di mantenere la pipeline piena, piuttosto che pensare all'aritmetica in virgola fissa. – Tilo