在不使用 NTL 函数结果的情况下减慢代码速度

Slow down code without using NTL function result

我正在尝试实现一些数学函数,例如 My_AddModMy_SubModMy_MulMod,并将结果放回vec_long& - 输入数据result

当我调用 我的和 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_NTLtmpt_My的值和数据类型时,它们是相同的值和数据类型long

由于两个函数都被调用了(所以似乎与My_function执行时间无关)并且它们生成相同的值,请问是什么原因导致延迟大或如何解决?

如果您使用例如编译代码-O3 如果未使用结果,编译器可能会删除对函数的调用。

NTL 的函数应该是高度优化的,所以你的函数不太可能比 NTL 函数更快。

如果要检查性能,不应同时调用两个函数,而应循环调用一个函数并测量时间,然后再调用另一个函数。