2016-09-29 8 views
0

Я пытаюсь реализовать некоторые математические функции, как My_AddMod, My_SubMod, My_MulMod и поместить результат обратно в vec_long & - данные типа результат.Замедлить код без использования NTL функции результата

Когда я звоню как функцию шахты и NTL и используя результат NTL как:

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 

Он работал хорошо и быстро, однако, если я использую результат My_function:

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 

Он работал хорошо, но вызвал большую задержку в коде.

При печати значения и типа данных tmpt_NTL и tmpt_My они имеют одинаковое значение и тип данных long.

Поскольку обе функции вызываются (так что это не имеет ничего общего с временем выполнения My_function), и они генерируют одно и то же значение, в чем причина большой задержки или как я могу ее исправить?

ответ

0

Если вы скомпилируете свой код, используя, например, -O3 возможно, что компилятор удаляет вызов вашей функции, если результат не используется.

Функции NTL должны быть высоко оптимизированы, поэтому маловероятно, чтобы ваша функция была быстрее, чем функция NTL.

Если вы хотите проверить производительность, вы не должны одновременно вызывать обе функции, а просто вызывать одну функцию в цикле и измерять время, а затем другую функцию.