在cplex

时间:2015-05-16 14:22:50

标签: c++ unix cplex

我有一个cplex C ++代码,我试图找到真正的经过时间。我使用cplex.getTime()但它返回CPU时间(我在UNIX系统上运行它)。我的第一个问题:CPU时间是否以秒为单位返回?也就是说,它说1500.这意味着1500秒?第二个问题:有没有办法用c ++获取cplex的实际经过时间?

2 个答案:

答案 0 :(得分:0)

cplex.getTime()应以秒为单位返回“已用时间”,但通常需要使用“挂钟时间”设置。较新的手册没有明显区别,但较旧的手册在这方面更好。例如。 CPLEX 10手册说:

  

clock-type参数确定ILOG CPLEX如何测量   计算时间。 CPU时间(默认值)仅在最合适时使用   使用一个处理器。它报告CPU花费的时间   代表您的应用程序执行计算。为平行   执行时,CPU时间取决于系统,通常不会反映出来   期望的指标。在某些并行系统上,它可以测量聚合   CPU时间,即所有处理器使用的时间总和。在其他人,   它可能只报告一个进程的CPU时间。简而言之,它可能会给   你是一个误导性的并行速度指示。

     

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

     

您可以在:

中选择时钟设置的类型      

Interactive Optimizer,命令set clocktype i。音乐会   技术,使用IloCplex方法setParam(ClockType,i)。可赎回   库,使用例程CPXsetintparam(env,CPX_PARAM_CLOCKTYPE,i)。   将i替换为值1以指定CPU时间或2指定   挂钟时间。

或者只是使用标准系统库调用来获取开始和结束时间并自己进行减法。我做了很多。

答案 1 :(得分:0)

在C ++中,使用以下代码:

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