mirror of
https://github.com/Z3Prover/z3
synced 2026-07-15 11:35:42 +00:00
Add new parallel algorithm as a tactic (parallel_tactical2.cpp) Don't port over old experiments from smt_parallel that we aren't using (sls, inprocessing, failed_literal_mode for bb detection) Fix bugs: lease cancellation/reslimit race condition, involves changing lease epoch to simple boolean flag Also, now there is a single shared set of params for the tactic and smt_parallel **Test runs for the parallel_tactical2 vs old smt_parallel version:** run-2747-Z3-threads-4-qflia-30s-stats.md run-2746-Z3-threads-4-qflia-30s-parallel_tactic-stats.md run-2745-Z3-threads-1-qfbv-30s-stats.md run-3013-Z3-threads-4-qfbv-30s-parallel_tactic-stats.md --> note this is indeed run-3013, I reran after a bugfix in inc_sat_solver run-2743-Z3-threads-4-qfnia-30s-stats.md run-2742-Z3-threads-4-qfnia-30s-parallel_tactic-stats.md **Test runs for the new smt_parallel with bugfixes:** run-2801-Z3-threads-4-qflia-30s-smtparallel-bugfixes-stats.md, run-2800-Z3-threads-4-qflia-30s-smtparallel-bugfixes-stats.md run-2797-Z3-threads-4-qfnia-30s-smtparallel-bugfixes-stats.md compare to old smt_parallel: run-2747-Z3-threads-4-qflia-30s-stats.md run-2743-Z3-threads-4-qfnia-30s-stats.md Note that there is a slight regression on lia in run-2800. The source of this appears to be the new new LP largest-cube LIA heuristic param, which is enabled by default. disabling this param in run-2801 restored performance (I didn't change this in this PR though, just something to note) http://mtzguido.tplinkdns.com:8081/z3/compare_stats.html --------- Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> Co-authored-by: Ilana Shapiro <ilanashapiro@Ilanas-MacBook-Pro.local> Co-authored-by: Ilana Shapiro <ilanashapiro@Ilanas-MBP.localdomain> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
20 lines
2 KiB
Text
20 lines
2 KiB
Text
def_module_params('parallel',
|
|
description='parameters for parallel solver',
|
|
class_name='parallel_params',
|
|
export=True,
|
|
params=(
|
|
('enable', BOOL, False, 'enable parallel solver by default on selected tactics (for QF_BV)'),
|
|
('threads.max', UINT, 10000, 'caps maximal number of threads below the number of processors'),
|
|
('num_bb_threads', UINT, 2, 'run Janota-style chunking backbone worker threads; default is 2 (negative and positive mode), supported values are 0 (off), 1 (negative mode only) or 2 (negative and positive mode)'),
|
|
('core_minimize', BOOL, True, 'minimize unsat cores used for parallel cube backtracking'),
|
|
('ablate_backtracking', BOOL, False, 'ablation: pass entire cube as core instead of unsat core during backtracking'),
|
|
('cube.lookahead', BOOL, False, 'use lookahead cubing in the parallel solver; when false, use VSIDS activity to select one split literal'),
|
|
('conquer.batch_size', UINT, 100, 'number of cubes to batch together for fast conquer'),
|
|
('conquer.restart.max', UINT, 5, 'maximal number of restarts during conquer phase'),
|
|
('conquer.delay', UINT, 10, 'delay of cubes until applying conquer'),
|
|
('conquer.backtrack_frequency', UINT, 10, 'frequency to apply core minimization during conquer'),
|
|
('simplify.exp', DOUBLE, 1, 'restart and inprocess max is multiplied by simplify.exp ^ depth'),
|
|
('simplify.max_conflicts', UINT, UINT_MAX, 'maximal number of conflicts during simplification phase'),
|
|
('simplify.restart.max', UINT, 5000, 'maximal number of restarts during simplification phase'),
|
|
('simplify.inprocess.max', UINT, 2, 'maximal number of inprocessing steps during simplification'),
|
|
))
|