Waktu CPU yang dihitung dari C ++ berbeda dari waktu sebenarnya untuk menyelesaikan model MILP melalui Gurobi

Dec 01 2020

Saya memecahkan model MILP di C ++ menggunakan Gurobi 7.5.2. Lebih khusus lagi, saya menentukan waktu CPU program C ++ saya melalui perintah berikut:

  • clock_t start_time;
  • double elapsed_time;
  • start_time = clock ();
  • model.optimize ();
  • elapsed_time = (double) (clock () - start_time) / CLOCKS_PER_SEC;

Ketika saya membandingkan elapsed_time dengan runtime Gurobi, runtime Gurobi menunjukkan durasi sebenarnya (diukur dengan chronometer) tetapi waktu_ berlalu yang dihitung dari C ++ jauh lebih tinggi. Mengapa elapsed_time tidak sama dengan runtime Gurobi dan durasi sebenarnya (diukur dengan chronometer)?

Jawaban

1 GabrielGouvine Dec 01 2020 at 18:15

Ini lebih merupakan pertanyaan C ++, jadi Anda sebaiknya mencari pertanyaan serupa di stackoverflow.

Masalah yang umum terjadi adalah clock () tidak akurat untuk durasi yang singkat, jadi Anda mungkin menginginkan salah satu pengatur waktu C ++ resolusi tinggi, seperti yang ditunjukkan dalam jawaban di sini .

EDIT: seperti yang dikomentari oleh user3680510 dan Stradivari, ini disebabkan oleh penggunaan multithreading, karena clock () mengukur waktu CPU . Timer C ++ di atas (atau C's time ()) akan berfungsi dengan benar.

1 NikosKazazakis Dec 01 2020 at 20:54

clock()mengukur waktu CPU, bukan waktu nyata. Untuk mengukur waktu nyata dalam C ++, gunakan:

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();