diff options
author | Liana Hadarean <lianah@cs.nyu.edu> | 2014-11-17 15:26:42 -0500 |
---|---|---|
committer | Morgan Deters <mdeters@cs.nyu.edu> | 2014-11-17 15:26:42 -0500 |
commit | 3ba7ed6b1b09739385ae2ffb77a5c7ccd18b40a5 (patch) | |
tree | 845ae47600ffff9c68fa654c0f78d3474e406beb /src/theory/bv | |
parent | d8da3b13bc9df7750723cf3da38edc8cb6f67d3d (diff) |
Resource-limiting work.
Signed-off-by: Morgan Deters <mdeters@cs.nyu.edu>
Diffstat (limited to 'src/theory/bv')
-rw-r--r-- | src/theory/bv/bitblaster_template.h | 8 | ||||
-rw-r--r-- | src/theory/bv/bv_eager_solver.cpp | 1 | ||||
-rw-r--r-- | src/theory/bv/bv_subtheory_algebraic.cpp | 1 | ||||
-rw-r--r-- | src/theory/bv/bv_subtheory_bitblast.cpp | 8 | ||||
-rw-r--r-- | src/theory/bv/bv_subtheory_core.cpp | 3 | ||||
-rw-r--r-- | src/theory/bv/bv_subtheory_inequality.cpp | 1 | ||||
-rw-r--r-- | src/theory/bv/eager_bitblaster.cpp | 1 | ||||
-rw-r--r-- | src/theory/bv/lazy_bitblaster.cpp | 5 | ||||
-rw-r--r-- | src/theory/bv/theory_bv.cpp | 5 | ||||
-rw-r--r-- | src/theory/bv/theory_bv.h | 2 |
10 files changed, 32 insertions, 3 deletions
diff --git a/src/theory/bv/bitblaster_template.h b/src/theory/bv/bitblaster_template.h index 0ff12da95..e13587323 100644 --- a/src/theory/bv/bitblaster_template.h +++ b/src/theory/bv/bitblaster_template.h @@ -28,6 +28,7 @@ #include "prop/sat_solver.h" #include "theory/valuation.h" #include "theory/theory_registrar.h" +#include "util/resource_manager.h" class Abc_Obj_t_; typedef Abc_Obj_t_ Abc_Obj_t; @@ -134,6 +135,7 @@ class TLazyBitblaster : public TBitblaster<Node> { {} bool notify(prop::SatLiteral lit); void notify(prop::SatClause& clause); + void spendResource(); void safePoint(); }; @@ -228,7 +230,8 @@ private: Statistics(const std::string& name); ~Statistics(); }; - std::string d_name; + std::string d_name; +public: Statistics d_statistics; }; @@ -237,6 +240,9 @@ public: MinisatEmptyNotify() {} bool notify(prop::SatLiteral lit) { return true; } void notify(prop::SatClause& clause) { } + void spendResource() { + NodeManager::currentResourceManager()->spendResource(); + } void safePoint() {} }; diff --git a/src/theory/bv/bv_eager_solver.cpp b/src/theory/bv/bv_eager_solver.cpp index f9f8ff581..57a635c20 100644 --- a/src/theory/bv/bv_eager_solver.cpp +++ b/src/theory/bv/bv_eager_solver.cpp @@ -67,6 +67,7 @@ bool EagerBitblastSolver::isInitialized() { } void EagerBitblastSolver::assertFormula(TNode formula) { + d_bv->spendResource(); Assert (isInitialized()); Debug("bitvector-eager") << "EagerBitblastSolver::assertFormula "<< formula <<"\n"; d_assertionSet.insert(formula); diff --git a/src/theory/bv/bv_subtheory_algebraic.cpp b/src/theory/bv/bv_subtheory_algebraic.cpp index e8acf268f..5b139e327 100644 --- a/src/theory/bv/bv_subtheory_algebraic.cpp +++ b/src/theory/bv/bv_subtheory_algebraic.cpp @@ -557,6 +557,7 @@ bool AlgebraicSolver::isSubstitutableIn(TNode node, TNode in) { void AlgebraicSolver::processAssertions(std::vector<WorklistElement>& worklist, SubstitutionEx& subst) { bool changed = true; while(changed) { + // d_bv->spendResource(); changed = false; for (unsigned i = 0; i < worklist.size(); ++i) { // apply current substitutions diff --git a/src/theory/bv/bv_subtheory_bitblast.cpp b/src/theory/bv/bv_subtheory_bitblast.cpp index d0b99f869..c86572ead 100644 --- a/src/theory/bv/bv_subtheory_bitblast.cpp +++ b/src/theory/bv/bv_subtheory_bitblast.cpp @@ -103,8 +103,11 @@ void BitblastSolver::bitblastQueue() { // don't bit-blast lemma atoms continue; } - Debug("bitblast-queue") << "Bitblasting atom " << atom <<"\n"; - d_bitblaster->bbAtom(atom); + Debug("bitblast-queue") << "Bitblasting atom " << atom <<"\n"; + { + TimerStat::CodeTimer codeTimer(d_bitblaster->d_statistics.d_bitblastTimer); + d_bitblaster->bbAtom(atom); + } } } @@ -149,6 +152,7 @@ bool BitblastSolver::check(Theory::Effort e) { // We need to ensure we are fully propagated, so propagate now if (d_useSatPropagation) { + d_bv->spendResource(); bool ok = d_bitblaster->propagate(); if (!ok) { std::vector<TNode> conflictAtoms; diff --git a/src/theory/bv/bv_subtheory_core.cpp b/src/theory/bv/bv_subtheory_core.cpp index d2c79fec2..938a93b85 100644 --- a/src/theory/bv/bv_subtheory_core.cpp +++ b/src/theory/bv/bv_subtheory_core.cpp @@ -166,6 +166,9 @@ bool CoreSolver::decomposeFact(TNode fact) { bool CoreSolver::check(Theory::Effort e) { Trace("bitvector::core") << "CoreSolver::check \n"; + + d_bv->spendResource(); + d_checkCalled = true; Assert (!d_bv->inConflict()); ++(d_statistics.d_numCallstoCheck); diff --git a/src/theory/bv/bv_subtheory_inequality.cpp b/src/theory/bv/bv_subtheory_inequality.cpp index 917b10c33..660551fe2 100644 --- a/src/theory/bv/bv_subtheory_inequality.cpp +++ b/src/theory/bv/bv_subtheory_inequality.cpp @@ -29,6 +29,7 @@ using namespace CVC4::theory::bv::utils; bool InequalitySolver::check(Theory::Effort e) { Debug("bv-subtheory-inequality") << "InequalitySolveR::check("<< e <<")\n"; ++(d_statistics.d_numCallstoCheck); + d_bv->spendResource(); bool ok = true; while (!done() && ok) { diff --git a/src/theory/bv/eager_bitblaster.cpp b/src/theory/bv/eager_bitblaster.cpp index 877baec4e..065d5d5ef 100644 --- a/src/theory/bv/eager_bitblaster.cpp +++ b/src/theory/bv/eager_bitblaster.cpp @@ -103,6 +103,7 @@ void EagerBitblaster::bbTerm(TNode node, Bits& bits) { return; } + d_bv->spendResource(); Debug("bitvector-bitblast") << "Bitblasting node " << node <<"\n"; d_termBBStrategies[node.getKind()] (node, bits, this); diff --git a/src/theory/bv/lazy_bitblaster.cpp b/src/theory/bv/lazy_bitblaster.cpp index b74506e4d..e5b5ed664 100644 --- a/src/theory/bv/lazy_bitblaster.cpp +++ b/src/theory/bv/lazy_bitblaster.cpp @@ -170,6 +170,7 @@ void TLazyBitblaster::bbTerm(TNode node, Bits& bits) { return; } + d_bv->spendResource(); Debug("bitvector-bitblast") << "Bitblasting node " << node <<"\n"; ++d_statistics.d_numTerms; @@ -355,6 +356,10 @@ void TLazyBitblaster::MinisatNotify::notify(prop::SatClause& clause) { } } +void TLazyBitblaster::MinisatNotify::spendResource() { + d_bv->spendResource(); +} + void TLazyBitblaster::MinisatNotify::safePoint() { d_bv->d_out->safePoint(); } diff --git a/src/theory/bv/theory_bv.cpp b/src/theory/bv/theory_bv.cpp index 99bc764dd..eddd5017c 100644 --- a/src/theory/bv/theory_bv.cpp +++ b/src/theory/bv/theory_bv.cpp @@ -107,6 +107,10 @@ void TheoryBV::setMasterEqualityEngine(eq::EqualityEngine* eq) { } } +void TheoryBV::spendResource() throw(UnsafeInterruptException) { + getOutputChannel().spendResource(); +} + TheoryBV::Statistics::Statistics(): d_avgConflictSize("theory::bv::AvgBVConflictSize"), d_solveSubstitutions("theory::bv::NumberOfSolveSubstitutions", 0), @@ -362,6 +366,7 @@ void TheoryBV::check(Effort e) return; } Debug("bitvector") << "TheoryBV::check(" << e << ")" << std::endl; + TimerStat::CodeTimer codeTimer(d_statistics.d_solveTimer); // we may be getting new assertions so the model cache may not be sound d_invalidateModelCache.set(true); // if we are using the eager solver diff --git a/src/theory/bv/theory_bv.h b/src/theory/bv/theory_bv.h index a37a4019e..11d8cb895 100644 --- a/src/theory/bv/theory_bv.h +++ b/src/theory/bv/theory_bv.h @@ -103,6 +103,7 @@ private: Statistics d_statistics; + void spendResource() throw(UnsafeInterruptException); /** * Return the uninterpreted function symbol corresponding to division-by-zero @@ -218,6 +219,7 @@ private: friend class CoreSolver; friend class InequalitySolver; friend class AlgebraicSolver; + friend class EagerBitblastSolver; };/* class TheoryBV */ }/* CVC4::theory::bv namespace */ |