Hi C-Reduce group!
This is a greeting from Xueyan from the University of Waterloo.
I bumped into a question that I cannot answer myself after reviewing the C-Reduce source code.
Could you kindly drop a hint?
My question is about the determinism of C-Reduce.
In `delta_pass()` function, variant programs are tested in parallel.
How does C-Reduce ensure the deterministic result?
I noticed `wait_helper()` waits for any of finished child process (https://github.com/csmith-project/creduce/blob/master/creduce/creduce.in#L677).
What if two processes both have interesting variants?
For example, variants [p4, p5, p6, p7] are tested in parallel. `p4` and `p5` are interesting. There is a race condition.
Then, give an input to a pass, the result is no longer deterministic.
I read Dr Regehr’s blog on Parallelizing Delta Debugging (https://blog.regehr.org/archives/749).
I am not sure if the assumption that no transformed input is interesting has anything to do with the determinism. Most likely there is only one interesting variant in a batch (if any), but it is still possible that a batch has two variants are interesting.
Appreciate your time and help in advance!
Look forward to your reply.
Cheers,
Xueyan Zhang
University of Waterloo
|