C ++の計算されたCPU時間は、Gurobiを介してMILPモデルを解くための実際の時間とは異なります

Dec 01 2020

Gurobi7.5.2を使用してC ++でMILPモデルを解いています。具体的には、次のコマンドを使用してC ++プログラムのCPU時間を決定しています。

  • clock_t start_time;
  • ダブル経過時間;
  • start_time = clock();
  • model.optimize();
  • 経過時間=(double)(clock()-start_time)/ CLOCKS_PER_SEC;

経過時間をGurobiランタイムと比較すると、Gurobiランタイムは実際の期間(クロノメーターで測定)を示していますが、C ++の計算された経過時間ははるかに長くなっています。なぜelapsed_timeはGurobiランタイムおよび実際の継続時間(クロノメーターで測定)と同じではないのですか?

回答

1 GabrielGouvine Dec 01 2020 at 18:15

これはC ++の質問に近いので、stackoverflowで同様の質問を探す必要があります。

一般的な問題は、clock()が短時間では正確ではないため、ここでの回答に示されているように、代わりに高解像度のC ++タイマーの1つが必要になる場合があります。

編集:user3680510とStradivariによってコメントされているように、これは、clock()がCPU時間を測定するため、マルチスレッドを使用しているためです。上記のC ++タイマー(またはCのtime())は正しく動作します。

1 NikosKazazakis Dec 01 2020 at 20:54

clock()リアルタイムではなくCPU時間を測定します。C ++でリアルタイムに測定するには、次を使用します。

auto start = std::chrono::steady_clock::now();

//do stuff

auto end = std::chrono::steady_clock::now();

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();