C ++의 계산 된 CPU 시간은 Gurobi를 통해 MILP 모델을 해결하는 실제 시간과 다릅니다.

Dec 01 2020

Gurobi 7.5.2를 사용하여 C ++에서 MILP 모델을 해결하고 있습니다. 보다 구체적으로 다음 명령을 통해 C ++ 프로그램의 CPU 시간을 결정합니다.

  • clock_t start_time;
  • 이중 elapsed_time;
  • start_time = clock ();
  • model.optimize ();
  • elapsed_time = (double) (clock ()-시작 _ 시간) / CLOCKS_PER_SEC;

elapsed_time을 Gurobi 런타임과 비교할 때 Gurobi 런타임은 실제 기간 (크로노 미터로 측정)을 표시하지만 C ++의 계산 된 elapsed_time은 훨씬 더 높습니다. elapsed_time이 Gurobi 런타임 및 실제 지속 시간 (크로노 미터로 측정)과 다른 이유는 무엇입니까?

답변

1 GabrielGouvine Dec 01 2020 at 18:15

이것은 C ++ 질문에 가깝기 때문에 stackoverflow에서 유사한 질문을 찾아야합니다.

일반적인 문제는 clock ()이 짧은 기간 동안 정확하지 않으므로 여기 에 대한 답변에 표시된 것처럼 대신 고해상도 C ++ 타이머 중 하나를 원할 수 있습니다 .

편집 : 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();