mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +00:00 
			
		
		
		
	parallel helper
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									8ba9d8c16a
								
							
						
					
					
						commit
						85c9d9ed27
					
				
					 4 changed files with 29 additions and 0 deletions
				
			
		
							
								
								
									
										25
									
								
								src/params/smt_parallel.pyg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/params/smt_parallel.pyg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | def_module_params('smt_parallel',  | ||||||
|  |                   export=True, | ||||||
|  |                   description='Experimental parameters for parallel solving', | ||||||
|  |                   params=( | ||||||
|  |                         ('share_units', BOOL, True, 'share units'), | ||||||
|  |                         ('share_conflicts', BOOL, True, 'share conflicts'), | ||||||
|  |                         ('never_cube', BOOL, False, 'never cube'), | ||||||
|  |                         ('frugal_cube_only', BOOL, False, 'only apply frugal cube strategy'), | ||||||
|  |                         ('relevant_units_only', BOOL, True, 'only share relvant units'), | ||||||
|  |                         ('max_conflict_mul', DOUBLE, 1.5, 'increment multiplier for max-conflicts'), | ||||||
|  |                         ('share_units_initial_only', BOOL, True, 'share only initial Boolean atoms as units'), | ||||||
|  |                         ('cube_initial_only', BOOL, False, 'cube only on initial Boolean atoms'), | ||||||
|  |                         ('max_cube_depth', UINT, 20, 'maximum depth (size) of a cube to share'), | ||||||
|  |                         ('max_greedy_cubes', UINT, 1000, 'maximum number of cube to greedily share before switching to frugal'), | ||||||
|  |                         ('num_split_lits', UINT, 2, 'how many literals, k, we split on to create 2^k cubes'), | ||||||
|  |                         ('depth_splitting_only', BOOL, False, 'only apply frugal cube strategy, and only on deepest (biggest) cubes from the batch manager'), | ||||||
|  |                         ('backbone_detection', BOOL, False, 'apply backbone literal heuristic'), | ||||||
|  |                         ('iterative_deepening', BOOL, False, 'deepen cubes based on iterative hardness cutoff heuristic'), | ||||||
|  |                         ('beam_search', BOOL, False, 'use beam search with PQ to rank cubes given to threads'), | ||||||
|  |                         ('explicit_hardness', BOOL, False, 'use explicit hardness metric for cube'), | ||||||
|  |                         ('cubetree', BOOL, False, 'use cube tree data structure for storing cubes'), | ||||||
|  |                         ('searchtree', BOOL, False, 'use search tree implementation (parallel2)'), | ||||||
|  |                         ('inprocessing', BOOL, False, 'integrate in-processing as a heuristic simplification'), | ||||||
|  |                         ('inprocessing_delay', UINT, 0, 'number of undef before invoking simplification') | ||||||
|  |               )) | ||||||
|  | @ -195,6 +195,7 @@ namespace smt { | ||||||
|         if (m_on_clause_eh) { |         if (m_on_clause_eh) { | ||||||
|             // Encode status as an integer flag for simplicity.
 |             // Encode status as an integer flag for simplicity.
 | ||||||
|             unsigned st_code = 0; |             unsigned st_code = 0; | ||||||
|  |             IF_VERBOSE(0, if (status::assumption != st) verbose_stream() << "status " << st << "\n"); | ||||||
|             switch (st) { |             switch (st) { | ||||||
|                 case status::assumption:    st_code = 1; break; |                 case status::assumption:    st_code = 1; break; | ||||||
|                 case status::lemma:         st_code = 2; break; |                 case status::lemma:         st_code = 2; break; | ||||||
|  |  | ||||||
|  | @ -4386,6 +4386,8 @@ namespace smt { | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| #endif | #endif | ||||||
|  |             IF_VERBOSE(0, verbose_stream() << "(smt.learned-clause"; verbose_stream() << " :size " << num_lits; | ||||||
|  |                        verbose_stream() << " :conflicts " << m_num_conflicts << ")\n";); | ||||||
|             mk_clause(num_lits, lits, js, CLS_LEARNED); |             mk_clause(num_lits, lits, js, CLS_LEARNED); | ||||||
|             if (delay_forced_restart) { |             if (delay_forced_restart) { | ||||||
|                 SASSERT(num_lits == 1); |                 SASSERT(num_lits == 1); | ||||||
|  |  | ||||||
|  | @ -3469,6 +3469,7 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void set_conflict_or_lemma(literal_vector const& core, bool is_conflict) { |     void set_conflict_or_lemma(literal_vector const& core, bool is_conflict) { | ||||||
|  |         IF_VERBOSE(0, verbose_stream() << "set conflict or lemma " << core << "\n"); | ||||||
|         reset_evidence(); |         reset_evidence(); | ||||||
|         for (literal lit : core) { |         for (literal lit : core) { | ||||||
|             m_core.push_back(lit); |             m_core.push_back(lit); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue