Waktu CPU yang dihitung dari C ++ berbeda dari waktu sebenarnya untuk menyelesaikan model MILP melalui Gurobi
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
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.
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();