Le temps CPU calculé de C ++ est différent du temps réel pour résoudre le modèle MILP via Gurobi
Je résous un modèle MILP en C ++ en utilisant Gurobi 7.5.2. Plus précisément, je détermine le temps CPU de mon programme C ++ via les commandes suivantes:
- clock_t heure_début;
- double elapsed_time;
- heure_début = horloge ();
- model.optimize ();
- elapsed_time = (double) (clock () - start_time) / CLOCKS_PER_SEC;
Lorsque je compare elapsed_time avec le runtime Gurobi, le runtime Gurobi affiche la durée réelle (mesurée par un chronomètre) mais le elapsed_time calculé de C ++ est bien plus élevé. Pourquoi elapsed_time n'est-il pas le même que le runtime Gurobi et la durée réelle (mesurée par le chronomètre)?
Réponses
Il s'agit davantage d'une question C ++, vous devriez donc plutôt rechercher des questions similaires sur stackoverflow.
Un problème courant est que clock () n'est pas précis pour de courtes durées, vous pouvez donc vouloir l'un des minuteries C ++ haute résolution à la place, comme indiqué dans une réponse ici .
EDIT: comme commenté par user3680510 et Stradivari, cela est dû à l'utilisation du multithreading, car clock () mesure le temps CPU . La minuterie C ++ ci-dessus (ou l'heure de C ()) se comportera correctement.
clock()
mesure le temps CPU au lieu du temps réel. Pour mesurer le temps réel en C ++, utilisez:
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();