Closed sim642 closed 1 month ago
The timeouts are related to __VERIFIER_assert
also being identified as an abortUnless function. Apron analysis refining according to that somehow breaks things.
The recursified_knuth timeout is acceptable. It is caused by new refinement from assume_abort_if_not(a > 0);
which somehow causes an explosion of contexts. This happens even with just def_exc, no intervals or anything of infinite height is needed. Tracing shows contexts increasing like Not {160}
, ..., Not {240}
, etc. So one exclusion in the context leads to a different exclusion in the recursive call.
This is a more fundamental problem that's not caused by abortUnless. Context widening fixes the timeout, but our svcomp conf doesn't use it (probably for more precision on recursive tasks that finish in time).
Context widening fixes the timeout, but our svcomp conf doesn't use it (probably for more precision on recursive tasks that finish in time).
This might the sort of thing where the context gas ⛽ may pay off.
What's the holdup here? If no one else wants to review it, I'd suggest we merge it.
The holdup is that this depends on #1462 to prevent everything from just crashing. And that in itself depends on #1470 being in place first to avoid other regressions.
This is on top of #1462 to fix #1453, but the following benchmarking was also done with #1450 included.
In https://github.com/goblint/analyzer/pull/875#issuecomment-1302204561, when the abortUnless analysis was added, it didn't seem to pay off. Now with Apron and autotuning, it seems that it might now.
sv-benchmarks no-overflow
With 60s timeout, we gain 92 new correct trues. There are also 3 new TIMEOUTs to be investigated.
CPU time linear scale
Always activating abortUnless has ~1% overhead, which is negligible.![image](https://github.com/goblint/analyzer/assets/378740/53df5ede-8bd7-4090-84fb-cbd1da17ca5f)
CPU time log scale
Visible differences are only at the low end and the slowdown cases are precisely those nla-digbench tasks where we become more precise because of this, which is expected.![image](https://github.com/goblint/analyzer/assets/378740/718fe138-257f-46c3-b7f2-09f407fd3f59)
TODO
New TIMEOUTs to investigate: