mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 01:25:31 +00:00
mux
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
2788f72bbb
commit
9262908ebb
30 changed files with 191 additions and 341 deletions
|
@ -129,8 +129,8 @@ namespace sat {
|
|||
void parallel::exchange(solver& s, literal_vector const& in, unsigned& limit, literal_vector& out) {
|
||||
if (s.get_config().m_num_threads == 1 || s.m_par_syncing_clauses) return;
|
||||
flet<bool> _disable_sync_clause(s.m_par_syncing_clauses, true);
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
if (limit < m_units.size()) {
|
||||
// this might repeat some literals.
|
||||
out.append(m_units.size() - limit, m_units.c_ptr() + limit);
|
||||
|
@ -150,8 +150,8 @@ namespace sat {
|
|||
if (s.get_config().m_num_threads == 1 || s.m_par_syncing_clauses) return;
|
||||
flet<bool> _disable_sync_clause(s.m_par_syncing_clauses, true);
|
||||
IF_VERBOSE(3, verbose_stream() << s.m_par_id << ": share " << l1 << " " << l2 << "\n";);
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
m_pool.begin_add_vector(s.m_par_id, 2);
|
||||
m_pool.add_vector_elem(l1.index());
|
||||
m_pool.add_vector_elem(l2.index());
|
||||
|
@ -165,23 +165,19 @@ namespace sat {
|
|||
unsigned n = c.size();
|
||||
unsigned owner = s.m_par_id;
|
||||
IF_VERBOSE(3, verbose_stream() << owner << ": share " << c << "\n";);
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
m_pool.begin_add_vector(owner, n);
|
||||
for (unsigned i = 0; i < n; ++i) {
|
||||
m_pool.add_vector_elem(c[i].index());
|
||||
}
|
||||
m_pool.end_add_vector();
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
m_pool.begin_add_vector(owner, n);
|
||||
for (unsigned i = 0; i < n; ++i) {
|
||||
m_pool.add_vector_elem(c[i].index());
|
||||
}
|
||||
m_pool.end_add_vector();
|
||||
}
|
||||
|
||||
void parallel::get_clauses(solver& s) {
|
||||
if (s.m_par_syncing_clauses) return;
|
||||
flet<bool> _disable_sync_clause(s.m_par_syncing_clauses, true);
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
_get_clauses(s);
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
_get_clauses(s);
|
||||
}
|
||||
|
||||
void parallel::_get_clauses(solver& s) {
|
||||
|
@ -241,17 +237,13 @@ namespace sat {
|
|||
}
|
||||
|
||||
void parallel::set_phase(solver& s) {
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
_set_phase(s);
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
_set_phase(s);
|
||||
}
|
||||
|
||||
void parallel::get_phase(solver& s) {
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
_get_phase(s);
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
_get_phase(s);
|
||||
}
|
||||
|
||||
void parallel::_get_phase(solver& s) {
|
||||
|
@ -269,8 +261,8 @@ namespace sat {
|
|||
|
||||
bool parallel::get_phase(local_search& s) {
|
||||
bool copied = false;
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
m_consumer_ready = true;
|
||||
if (m_solver_copy && s.num_non_binary_clauses() > m_solver_copy->m_clauses.size()) {
|
||||
copied = true;
|
||||
|
@ -288,8 +280,8 @@ namespace sat {
|
|||
|
||||
bool parallel::copy_solver(solver& s) {
|
||||
bool copied = false;
|
||||
#pragma omp critical (par_solver)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mux);
|
||||
m_consumer_ready = true;
|
||||
if (m_solver_copy && s.m_clauses.size() > m_solver_copy->m_clauses.size()) {
|
||||
s.copy(*m_solver_copy, true);
|
||||
|
|
|
@ -60,6 +60,7 @@ namespace sat {
|
|||
index_set m_unit_set;
|
||||
literal_vector m_lits;
|
||||
vector_pool m_pool;
|
||||
std::mutex m_mux;
|
||||
|
||||
// for exchange with local search:
|
||||
svector<lbool> m_phase;
|
||||
|
|
|
@ -1731,18 +1731,6 @@ namespace sat {
|
|||
}
|
||||
|
||||
if (m_par) m_par->set_phase(*this);
|
||||
|
||||
#if 0
|
||||
static unsigned file_no = 0;
|
||||
#pragma omp critical (print_sat)
|
||||
{
|
||||
++file_no;
|
||||
std::ostringstream ostrm;
|
||||
ostrm << "s" << file_no << ".txt";
|
||||
std::ofstream ous(ostrm.str());
|
||||
display(ous);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool solver::set_root(literal l, literal r) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue