在不使用 NTL 函数结果的情况下减慢代码速度
Slow down code without using NTL function result
我正在尝试实现一些数学函数,例如 My_AddMod、My_SubMod、My_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_NTL
和tmpt_My
的值和数据类型时,它们是相同的值和数据类型long
。
由于两个函数都被调用了(所以似乎与My_function执行时间无关)并且它们生成相同的值,请问是什么原因导致延迟大或如何解决?
如果您使用例如编译代码-O3
如果未使用结果,编译器可能会删除对函数的调用。
NTL 的函数应该是高度优化的,所以你的函数不太可能比 NTL 函数更快。
如果要检查性能,不应同时调用两个函数,而应循环调用一个函数并测量时间,然后再调用另一个函数。
我正在尝试实现一些数学函数,例如 My_AddMod、My_SubMod、My_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_NTL
和tmpt_My
的值和数据类型时,它们是相同的值和数据类型long
。
由于两个函数都被调用了(所以似乎与My_function执行时间无关)并且它们生成相同的值,请问是什么原因导致延迟大或如何解决?
如果您使用例如编译代码-O3
如果未使用结果,编译器可能会删除对函数的调用。
NTL 的函数应该是高度优化的,所以你的函数不太可能比 NTL 函数更快。
如果要检查性能,不应同时调用两个函数,而应循环调用一个函数并测量时间,然后再调用另一个函数。