C ++の計算されたCPU時間は、Gurobiを介してMILPモデルを解くための実際の時間とは異なります
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ランタイムおよび実際の継続時間(クロノメーターで測定)と同じではないのですか?
回答
これはC ++の質問に近いので、stackoverflowで同様の質問を探す必要があります。
一般的な問題は、clock()が短時間では正確ではないため、ここでの回答に示されているように、代わりに高解像度のC ++タイマーの1つが必要になる場合があります。
編集:user3680510とStradivariによってコメントされているように、これは、clock()がCPU時間を測定するため、マルチスレッドを使用しているためです。上記のC ++タイマー(またはCのtime())は正しく動作します。
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();