From b06dd8ee013c6dbafa31fb3d40d5946d3b5a7f75 Mon Sep 17 00:00:00 2001 From: Brandon Rozek Date: Tue, 10 Dec 2024 17:17:14 -0800 Subject: [PATCH] Don't rely on shared memory for logic operators --- vsp.py | 5 +---- vspursuer.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/vsp.py b/vsp.py index 6a50c63..ad2849b 100644 --- a/vsp.py +++ b/vsp.py @@ -98,14 +98,11 @@ Subalgebra 1: {set_to_str(self.subalgebra1)} Subalgebra 2: {set_to_str(self.subalgebra2)} """ -def has_vsp(model: Model, interpretation: Dict[Operation, ModelFunction]) -> VSP_Result: +def has_vsp(model: Model, impfunction: ModelFunction, mconjunction: Optional[ModelFunction] = None, mdisjunction: Optional[ModelFunction] = None) -> VSP_Result: """ Checks whether a model has the variable sharing property. """ - impfunction = interpretation[Implication] - mconjunction = interpretation.get(Conjunction) - mdisjunction = interpretation.get(Disjunction) top = find_top(model.carrier_set, mconjunction, mdisjunction) bottom = find_bottom(model.carrier_set, mconjunction, mdisjunction) diff --git a/vspursuer.py b/vspursuer.py index 5a6ee55..70e0f02 100755 --- a/vspursuer.py +++ b/vspursuer.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 from os import cpu_count import argparse -import multiprocessing +import multiprocessing as mp +from logic import Implication, Conjunction, Disjunction from parse_magic import ( SourceFile, @@ -24,11 +25,18 @@ if __name__ == "__main__": solutions = parse_matrices(SourceFile(data_file)) print(f"Parsed {len(solutions)} matrices") + solutions_prep = [] + for model, interpretation in solutions: + impfunction = interpretation[Implication] + mconjunction = interpretation.get(Conjunction) + mdisjunction = interpretation.get(Disjunction) + solutions_prep.append((model, impfunction, mconjunction, mdisjunction)) + num_has_vsp = 0 - with multiprocessing.Pool(processes=max(cpu_count() - 2, 1)) as pool: + with mp.Pool(processes=max(cpu_count() - 2, 1)) as pool: results = [ - pool.apply_async(has_vsp, (model, interpretation,)) - for model, interpretation in solutions + pool.apply_async(has_vsp, (model, impfunction, mconjunction, mdisjunction,)) + for model, impfunction, mconjunction, mdisjunction in solutions_prep ] for i, result in enumerate(results):