Commit 184c5d4e by Alan Mishchenko

Adding timeout to the interpolant computation procedure.

parent e93cfb18
...@@ -271,7 +271,7 @@ timeSat += Abc_Clock() - clk; ...@@ -271,7 +271,7 @@ timeSat += Abc_Clock() - clk;
// create the resulting manager // create the resulting manager
clk = Abc_Clock(); clk = Abc_Clock();
pManInter = Inta_ManAlloc(); pManInter = Inta_ManAlloc();
pRes = (Aig_Man_t *)Inta_ManInterpolate( pManInter, (Sto_Man_t *)pSatCnf, vVarsAB, fVerbose ); pRes = (Aig_Man_t *)Inta_ManInterpolate( pManInter, (Sto_Man_t *)pSatCnf, 0, vVarsAB, fVerbose );
Inta_ManFree( pManInter ); Inta_ManFree( pManInter );
timeInt += Abc_Clock() - clk; timeInt += Abc_Clock() - clk;
/* /*
......
...@@ -304,11 +304,13 @@ clk = Abc_Clock(); ...@@ -304,11 +304,13 @@ clk = Abc_Clock();
*/ */
pManInterA = Inta_ManAlloc(); pManInterA = Inta_ManAlloc();
p->pInterNew = (Aig_Man_t *)Inta_ManInterpolate( pManInterA, (Sto_Man_t *)pSatCnf, p->vVarsAB, 0 ); p->pInterNew = (Aig_Man_t *)Inta_ManInterpolate( pManInterA, (Sto_Man_t *)pSatCnf, nTimeNewOut, p->vVarsAB, 0 );
Inta_ManFree( pManInterA ); Inta_ManFree( pManInterA );
p->timeInt += Abc_Clock() - clk; p->timeInt += Abc_Clock() - clk;
Sto_ManFree( (Sto_Man_t *)pSatCnf ); Sto_ManFree( (Sto_Man_t *)pSatCnf );
if ( p->pInterNew == NULL )
RetValue = -1;
return RetValue; return RetValue;
} }
......
...@@ -948,7 +948,7 @@ void Inta_ManPrepareInter( Inta_Man_t * p ) ...@@ -948,7 +948,7 @@ void Inta_ManPrepareInter( Inta_Man_t * p )
SeeAlso [] SeeAlso []
***********************************************************************/ ***********************************************************************/
void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, int fVerbose ) void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, abctime TimeToStop, void * vVarsAB, int fVerbose )
{ {
Aig_Man_t * pRes; Aig_Man_t * pRes;
Aig_Obj_t * pObj; Aig_Obj_t * pObj;
...@@ -956,6 +956,9 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in ...@@ -956,6 +956,9 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in
int RetValue = 1; int RetValue = 1;
abctime clkTotal = Abc_Clock(); abctime clkTotal = Abc_Clock();
if ( Abc_Clock() > TimeToStop )
return NULL;
// check that the CNF makes sense // check that the CNF makes sense
assert( pCnf->nVars > 0 && pCnf->nClauses > 0 ); assert( pCnf->nVars > 0 && pCnf->nClauses > 0 );
p->pCnf = pCnf; p->pCnf = pCnf;
...@@ -980,7 +983,15 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in ...@@ -980,7 +983,15 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in
// write the root clauses // write the root clauses
Sto_ManForEachClauseRoot( p->pCnf, pClause ) Sto_ManForEachClauseRoot( p->pCnf, pClause )
{
Inta_ManProofWriteOne( p, pClause ); Inta_ManProofWriteOne( p, pClause );
if ( TimeToStop && Abc_Clock() > TimeToStop )
{
Aig_ManStop( pRes );
p->pAig = NULL;
return NULL;
}
}
// propagate root level assignments // propagate root level assignments
if ( Inta_ManProcessRoots( p ) ) if ( Inta_ManProcessRoots( p ) )
...@@ -995,6 +1006,12 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in ...@@ -995,6 +1006,12 @@ void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, in
RetValue = 0; RetValue = 0;
break; break;
} }
if ( TimeToStop && Abc_Clock() > TimeToStop )
{
Aig_ManStop( pRes );
p->pAig = NULL;
return NULL;
}
} }
} }
......
...@@ -130,7 +130,7 @@ extern int Int_ManInterpolate( Int_Man_t * p, Sto_Man_t * pCnf, int fVe ...@@ -130,7 +130,7 @@ extern int Int_ManInterpolate( Int_Man_t * p, Sto_Man_t * pCnf, int fVe
typedef struct Inta_Man_t_ Inta_Man_t; typedef struct Inta_Man_t_ Inta_Man_t;
extern Inta_Man_t * Inta_ManAlloc(); extern Inta_Man_t * Inta_ManAlloc();
extern void Inta_ManFree( Inta_Man_t * p ); extern void Inta_ManFree( Inta_Man_t * p );
extern void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, void * vVarsAB, int fVerbose ); extern void * Inta_ManInterpolate( Inta_Man_t * p, Sto_Man_t * pCnf, abctime TimeToStop, void * vVarsAB, int fVerbose );
/*=== satInterB.c ==========================================================*/ /*=== satInterB.c ==========================================================*/
typedef struct Intb_Man_t_ Intb_Man_t; typedef struct Intb_Man_t_ Intb_Man_t;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment