https://github.com/NagyDonat commented:

I'm a bit surprised by the idea of using multiple attempts instead of a single 
run with a larger timeout -- intuitively we're wasting the already performed 
calculations if we are impatient and abort+restart the calculations after each 
short timeout (instead of allocating all the time for a single run).

I can imagine a world where the runtime of the probability distribution of Z3 
queries has a very "large tail", and in that case the restarts would be useful. 
E.g. as a toy example consider a probability distribution where rerunning one 
particular query takes <200 ms with 90% chance and 2000 ms in the remaining 10% 
of runs -- in this world doing three runs with 300 ms timeout is much better 
better than doing one run with 900 ms timeout.

(For more context, see e.g. [wikipedia on the memorylessness 
property](https://en.wikipedia.org/wiki/Memorylessness) of distributions. In a 
memoryless distribution the expected remaining time is independent of the time 
that's already spent on waiting; if the distribution is even more skewed than 
that, then there are points when starting a new calculation is better than 
continuing the already running one.)

However, I don't see any reason to assume that the distribution has a "long 
tail" -- in fact eyeballing the graphs from your earlier measurements I'd guess 
that the outlier slow queries are relatively rare. 

To check this question, it would be nice to have measurements that compare the 
total analysis time and flakiness of e.g. $\{ timeout = X, repeats = 2 \}$ and 
$\{timeout = 3 X, repeats = 0\}$ for various values of $X$. In addition to the 
timeout $X = 300$ ms that you suggest as default (because it fits the 
capabilities of your system) it would be important to have a few other 
measurements that e.g. use $X = 150$ ms or $X = 200$ ms etc. to approximate the 
situation when somebody uses a timeout of 300 ms on a system that is weaker 
than yours.

To simplify the comparison, I'd suggest doing these comparisons without 
specifying an aggregate timeout -- but if you can suggest a reasonable value 
for it, then I'm also fine with that.

https://github.com/llvm/llvm-project/pull/120239
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to