On Tue, 2020-03-17 at 10:42 +0100, Patrick Dupre wrote:
> En cette periode de teletravail, j'aimerai optimizer cette routine
> (en temps CPU)
>
> void nume_pop_absor_satur (const double* S, const unsigned short int
> e, const unsigned short int n, const unsigned short int i, const
> unsigned short int k, const short int kk, double *sum, double prod) {
> unsigned short int j ;
> if (kk >= 0) {
> for (j = i ; j < n - kk ; j++) {
> if (j == e) continue ;
> if (k == 0) {
> *sum += S [j] ;
> }
> else nume_pop_absor_satur (S, e, n, j + 1, k, kk - 1, sum, prod
> * S [j]) ;
> }
> }
> else {
> *sum += prod ;
> }
> }
>
> Est-ce que vous auriez des idees ?
Bonjour
Joli défi. Je pense que le plus grand facteur de gain sera de supprimer
l'appel récursif ("dé-récursiver") pour éviter la mise en pile des
paramètres - à moins que le compilo ait été suffisamment futé pour
passer tous les paramètres en registres et identifier les variables qui
ne changent pas - et donc inutiles d'empiler.
Par contre, le reverse-engineering va me donner la migraine.
Aurais-tu s'il te plaît le modèle mathématique de ce calcul (je vois
bien une définition de suite arriver...)
--
Yves Martin