2016-09-29 6 views
0

Je suis en train de mettre en œuvre une fonction mathématique comme My_AddMod, My_SubMod, My_MulMod, et mettre le résultat à vec_long & - données de type résultat.Ralentissez le code sans utiliser résultat de la fonction NTL

Quand je vous appelle à la fois la fonction moi et NTL et en utilisant le résultat de NTL comme:

long tmpt_My = My_AddMod(long a, long b, long n);  //(a+b)%n 
long tmpt_NTL = AddMod(long a, long b, long n);  //function from NTL 
vec_long& result[i] = tmpt_NTL;     //choosing result from NTL_function 

Il marchait bien et rapide, cependant, si j'utilise le résultat de ma_fonction:

long tmpt_My = My_AddMod(long a, long b, long n);  //(a+b)%n 
long tmpt_NTL = AddMod(long a, long b, long n);  //function from NTL 
vec_long& result[i] = tmpt_My;     //choosing result from My_function 

Cela fonctionnait bien, mais provoquait une latence importante dans le code.

Lors de l'impression de la valeur et du type de données tmpt_NTL et tmpt_My, ils ont la même valeur et le même type de données long.

Étant donné que les deux fonctions sont appelées (il semble que cela n'a rien à voir avec le temps d'exécution de My_function) et qu'elles génèrent la même valeur, quelle est la cause d'une latence importante ou comment la réparer?

Répondre

0

Si vous compilez votre code en utilisant, par exemple, -O3 il est possible, que le compilateur supprime l'appel de votre fonction si le résultat n'est pas utilisé.

Les fonctions de NTL doivent être hautement optimisées, il est donc peu probable que votre fonction soit plus rapide que la fonction NTL. Si vous souhaitez vérifier les performances, vous ne devez pas appeler les deux fonctions en une seule fois, mais appelez simplement une fonction dans une boucle et mesurez l'heure, puis l'autre fonction.