以复数表示的实际经过时间

Real elapsed time in cplex

本文关键字:经过 时间 表示      更新时间:2023-10-16

我有一个复杂的c++代码,我试图找到真正的运行时间。我使用complex . gettime(),但它返回CPU时间(我在UNIX系统上运行它)。我的第一个问题是:CPU时间是否以秒为单位返回?也就是1500。是指1500秒吗?第二个问题:是否有一种方法可以在复杂的c++中获得实际运行时间?

complex . gettime()应该以秒为单位返回"经过的"时间,但您通常需要使用"Wall clock time"设置。较新的手册在这方面的区别不是很明显,但旧的手册在这方面做得更好。例如,CPLEX 10手册说:

时钟类型参数决定了ILOG CPLEX如何测量计算时间。CPU时间,默认值,仅在以下情况下最合适使用一个处理器。它报告CPU花费的时间量代表您的应用程序执行计算。针对并行执行时,CPU时间依赖于系统,通常不会反映期望的度量。在一些并行系统上,它可能度量聚合CPU时间,即所有处理器所用时间的总和。于人,它可能只报告一个进程的CPU时间。简而言之,它可能会让步你对平行速度的指示具有误导性。

另一种类型,挂钟时间,通常更适合于并行计算,因为它测量经过的总物理时间手术开始后。当多个进程处于活动状态时,和当并行优化器处于活动状态时,挂钟时间可能会很长

您可以选择时钟设置类型,在:

交互式优化器,带有命令集时钟类型i. Concert技术,使用IloCplex方法setParam(ClockType, i).可调用库,使用例程CPXsetintparam(env, CPX_PARAM_CLOCKTYPE, i)。将i替换为1表示CPU时间或2表示CPU时间墙上时钟时间。

或者只是使用一个标准的系统库调用来获得开始和结束时间,然后自己做减法。我做过很多次。

在c++中使用以下代码:

IloNum start;
start=cplex.getTime();
cplex.solve();
cplex.out() << "solution time=" << cplex.getTime()-start << endl;