In una simulazione legata alla CPU C++ che sto scrivendo, ho tracciato un collo di bottiglia tramite valgrind nel mio programma su cmath::exp
. Attualmente mangia oltre il 40% del mio tempo di simulazione. Posso vincolare l'input a un dominio relativamente piccolo, ma mi piacerebbe controllare l'accuratezza. Stavo considerando di passare a una LUT (tabella di ricerca) per sostituire exp
ma non sono abbastanza sicuro di come fare questa "strada giusta" (tm). Preoccupazioni che ho:C++ exp LUT (tabella di ricerca)
- grandi tabelle di ricerca non si adatteranno nella cache rallentando così l'accesso
- modo migliore per convertire un doppio ingresso per un numero intero per l'accesso in tabella di ricerca
- Se la soluzione (2) dipende dalla pendenza della funzione di input?
- Sto reinventando la ruota - è già stato fatto prima?
Qual è il modo migliore per implementare/(includere da una libreria) un LUT per exp
?
Qual è il dominio che è necessario gestire? –
@AlanStokes 'exp (x)' dove 'x = [-k ... -1]', 'k> 1' e' k' è noto solo al runtime (quindi presumibilmente il LUT dovrebbe essere ricostruito ogni volta il programma viene eseguito (questo è OK in quanto i tempi di simulazione possono richiedere giorni)). – Hooked
Una piccola porzione del codice di calcolo potrebbe essere utile per noi. È una sorta di "anello principale" o qualcosa di veramente complesso e difficile da montare in un singolo post SO? –