Реальное время в cplex

У меня есть сложный код на C ++, и я пытаюсь найти реальное время, прошедшее с начала. Я использую cplex.getTime (), но он возвращает процессорное время (я запускаю его в системе UNIX). Мой первый вопрос: время процессора возвращается в секундах? То есть там написано 1500. Значит ли 1500 секунд? Второй вопрос: есть ли способ получить реальное затраченное время в cplex с помощью c ++?


person user2147241    schedule 16.05.2015    source источник


Ответы (2)


cplex.getTime () должен возвращать «прошедшее» время в секундах, но обычно вам нужно использовать настройку «Время настенных часов». Новые руководства не очень заметны, но старые в этом отношении лучше. Например. в руководстве по CPLEX 10 сказано:

Параметр clock-type определяет, как ILOG CPLEX измеряет время вычислений. Время ЦП, установленное по умолчанию, является наиболее подходящим, когда используется только один процессор. Он сообщает о количестве времени, затраченном ЦП на выполнение вычислений от имени вашего приложения. Для параллельного выполнения время ЦП зависит от системы и, как правило, не отражает желаемый показатель. В некоторых параллельных системах он может измерять совокупное время ЦП, то есть сумму времени, используемого всеми процессорами. В других случаях он может сообщать процессорное время только одного процесса. Короче говоря, это может дать вам неверное представление о параллельной скорости.

Альтернативный тип, время настенных часов, обычно более подходит для параллельных вычислений, поскольку он измеряет общее физическое время, прошедшее после начала операции. Когда активны несколько процессов и когда активны параллельные оптимизаторы, время настенных часов может сильно отличаться от времени процессора.

Вы можете выбрать тип настройки часов в:

Интерактивный оптимизатор с набором команд clocktype i. Concert Technology с помощью метода IloCplex setParam (ClockType, i). Вызываемая библиотека с подпрограммой CPXsetintparam (env, CPX_PARAM_CLOCKTYPE, i). Замените i на значение 1, чтобы указать время процессора, или 2, чтобы указать время настенных часов.

В качестве альтернативы просто используйте вызов стандартной системной библиотеки, чтобы получить время начала и окончания, и выполните вычитание самостоятельно. Я много этим занимался.

person TimChippingtonDerrick    schedule 18.05.2015

В C ++ используйте следующий код:

IloNum start;
start=cplex.getTime();
cplex.solve();
cplex.out() << "solution time=" << cplex.getTime()-start << endl;
person Aryo Z    schedule 01.12.2016