Замедление кода без использования результата функции NTL

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

Когда я вызываю оба свою функцию и 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) и они генерируют одно и то же значение, в чем причина большой задержки или как я могу это исправить?


person lafara94130    schedule 29.09.2016    source источник


Ответы (1)


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

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

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

person AbcAeffchen    schedule 10.02.2017