Poiché la funzione per il calcolo della funzione sin(x)
in x86 risale all'era Pentium e apparentemente non utilizza nemmeno i registri SSE, mi chiedevo se esistesse un set di istruzioni più nuovo e migliore per il calcolo delle funzioni trigonometriche.Un fsin più veloce ma meno accurato per Intel asm?
Sono abituato a codificare in C++ e fare alcune ottimizzazioni asm
, quindi tutto ciò che si adatta a una pipeline a partire da C++, a C a asm, funzionerà per me.
Grazie.
Sono sotto Linux a 64 bit, per ora, con gcc
e clang
(anche clang dura in realtà non offrono alcuna ottimizzazione legati FPU per quanto ne so).
EDIT
- Ho già implementato una funzione
sin
, di solito è 2 volte più velocestd::sin
anche consse
on. - La mia funzione non è mai più lento di
fsin
, anche durafsin
di solito è più accurato, ma considerando chefsin
mai sorpassa il miosin
implementazione, terrò il miosin
per ora, anche il miosin
è completamente portatile dovefsin
è per solo x86 . - Ho bisogno di questo per il calcolo in tempo reale, quindi scambierò precisione per velocità, penso che starò bene con 4-5 decimali di precisione.
- no a un approccio basato su tabella, non lo sto utilizzando, svita la cache, rende tutto più lento, nessun algoritmo basato su accesso alla memoria o tabelle di ricerca per favore.
Questo potrebbe rivelarsi utile: ["Funzioni trigonometriche veloci che utilizzano le istruzioni SSE2 di Intel"] (http://users.ece.utexas.edu/~adnan/comm/fast-trigonometric-functions-using.pdf) –
@AlexReinking grazie ma quel documento sembra un riepilogo di diverse opzioni più una mezza pagina di codice che non credo sarà utile, almeno nel mio caso. – user2485710
Puoi essere più specifico sul motivo per cui pensi che SSE2 non aiuti il tuo caso? –