mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 10:52:02 +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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue