Repository navigation
E5c: --time-report and a progress line - #97
Merged
Merged
Conversation
…ps, and name an unmeasured loop beside a failure.
… proved by unrolling, and beside an unmeasured loop.
…their verdicts rely on so that each is a whole run's verdict.
…se that is executable.
…h its counterexample and backend.
…solving each after the first past the earlier failures.
…firm a failure after a loop past the checks that fail before it.
…sing the earlier failures reaches.
…add up, the busiest function first.
… once in confirmation_invariants.cpp.
…ver finds at once.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A run said how long it took, but not where the time went: a slow file gave no hint of which function, or which stage of it, to look at. Nothing showed progress either, so a long run was silent until its last verdict was settled. Now:
On the base (#96),
--time-reportand--progressare unknown options.This finishes plan item E5, apart from results streamed as they become final. The summary,
--quiet,--verbose, and--list-functionscame in #93, and--functionin #95. Streaming waits for a design of its own: a verdict is final only once the functions it rests on are settled, and today every fixpoint that settles them runs over the whole file. Until then, the progress line shows that the run moves.Design
BackendTimes(Backend/Timing.h,VerifyBackend::setTimes), which a portfolio, a race, and BMC forward to their solvers.VerifyBackend::verify: encoding, solving, checking counterexamples, inductions, and a proof's vacuity checks.certifyCounterexample, throughCertifyLimits::Times), summed. With several jobs, checks run at once, so it can exceed solving.failureNotes) plus each confirmation by proof. The driver times both, and adds a confirmation by proof to the function that proposed it.cppverify::recommendspass.Verifier's construction, the converted functions, the end of the tasks, and the report.--functionselects them), the busiest first, as Verus's--time-expandedlists its slowest functions. With JSON, the report iscppverify.time/1records: one for the run, then one per function.--functionschedules callees round by round. It is erased before the results print.Tests
suite/time_report.cpp(new) has a proof, a failure after a loop, a lemma proved by induction, and a claim whose counterexample is confirmed by proof. It checks:Inputs/time_report_phases.py, which phases took time in each function, exactly: no induction where none ran, confirmation only where unrolling or a proof confirmed. In every row the times add up, induction and (with one job) certification are within solving, and the rows come busiest first;--function, which lists only what it reports;--progress, and no progress line on standard error by default under lit;suite/time_report_backends.test(new, requires cvc5) checks that certification is counted by cvc5, the portfolio, and the race.Each mutant below, applied alone, makes one of the two tests fail:
--progressis ignoredOne mutant survives: T5, a pass nested in a Z3 query (the native-definitions pass, the integer pass after a bit-vector probe) without the query's sink. Its checks would then go uncounted, but the query's own checks already make certification non-zero, and no test can tell their sum apart. The sink now passes through
PassScope, which already joins a nested pass to its query, rather than at each nested encoder.T15 survived the first run, because the check
busiest firstalso matched the checker'snot busiest first; the check is now anchored. Certification first also counted the evaluation of spec applications at constant arguments, which every query does before solving, so every function had some and a mutant of the counterexample checks' timing could not be seen. That evaluation is part of solving now, and certification is only the checks.Docs
--time-report(every column, the JSON schema) and the progress line.Checked
clang/test/Verifyon this branch: 485 passed, 1 unsupported (darwin only), no failure.docs_examples.testanddocs_coverage.testpass with the new section.--time-reportthe backends get no sink.