| 406 | } |
| 407 | |
| 408 | MeasurementSummary measure_cold( |
| 409 | const engine::runtime::ModelRegistry & registry, |
| 410 | const engine::runtime::ModelLoadRequest & load_request, |
| 411 | const engine::runtime::TaskSpec & task_spec, |
| 412 | const engine::runtime::SessionOptions & session_options, |
| 413 | const engine::runtime::TaskRequest & request) { |
| 414 | MeasurementSummary summary; |
| 415 | for (int rep = 0; rep < 3; ++rep) { |
| 416 | const auto started = std::chrono::steady_clock::now(); |
| 417 | auto model = registry.load(load_request); |
| 418 | auto session = model->create_task_session(task_spec, session_options); |
| 419 | auto run = run_once(*session, task_spec, request); |
| 420 | const auto ended = std::chrono::steady_clock::now(); |
| 421 | summary.wall_ms.push_back(std::chrono::duration<double, std::milli>(ended - started).count()); |
| 422 | summary.duration_sec = result_duration_sec(request, run.result); |
| 423 | } |
| 424 | summary.average_wall_ms = |
| 425 | std::accumulate(summary.wall_ms.begin(), summary.wall_ms.end(), 0.0) / |
| 426 | static_cast<double>(summary.wall_ms.size()); |
| 427 | if (summary.duration_sec > 0.0) { |
| 428 | summary.rtf = (summary.average_wall_ms / 1000.0) / summary.duration_sec; |
| 429 | } |
| 430 | return summary; |
| 431 | } |
| 432 | |
| 433 | MeasurementSummary measure_warm( |
| 434 | const engine::runtime::ModelRegistry & registry, |
no test coverage detected