Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abc
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
abc
Commits
3e92b873
Commit
3e92b873
authored
Feb 04, 2011
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added timeout to &reachn.
parent
82e9de90
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
114 additions
and
15 deletions
+114
-15
src/aig/llb/llb2Bad.c
+10
-2
src/aig/llb/llb2Core.c
+19
-3
src/aig/llb/llb3Image.c
+21
-5
src/aig/llb/llb3Nonlin.c
+62
-3
src/aig/llb/llb3Nonlin_multi.c
+0
-0
src/aig/llb/llbInt.h
+2
-2
No files found.
src/aig/llb/llb2Bad.c
View file @
3e92b873
...
...
@@ -42,12 +42,12 @@ ABC_NAMESPACE_IMPL_START
SeeAlso []
***********************************************************************/
DdNode
*
Llb_BddComputeBad
(
Aig_Man_t
*
pInit
,
DdManager
*
dd
)
DdNode
*
Llb_BddComputeBad
(
Aig_Man_t
*
pInit
,
DdManager
*
dd
,
int
TimeOut
)
{
Vec_Ptr_t
*
vNodes
;
DdNode
*
bBdd0
,
*
bBdd1
,
*
bTemp
,
*
bResult
;
Aig_Obj_t
*
pObj
;
int
i
;
int
i
,
k
;
assert
(
Cudd_ReadSize
(
dd
)
==
Aig_ManPiNum
(
pInit
)
);
// initialize elementary variables
Aig_ManConst1
(
pInit
)
->
pData
=
Cudd_ReadOne
(
dd
);
...
...
@@ -64,6 +64,14 @@ DdNode * Llb_BddComputeBad( Aig_Man_t * pInit, DdManager * dd )
bBdd0
=
Cudd_NotCond
(
(
DdNode
*
)
Aig_ObjFanin0
(
pObj
)
->
pData
,
Aig_ObjFaninC0
(
pObj
)
);
bBdd1
=
Cudd_NotCond
(
(
DdNode
*
)
Aig_ObjFanin1
(
pObj
)
->
pData
,
Aig_ObjFaninC1
(
pObj
)
);
pObj
->
pData
=
Cudd_bddAnd
(
dd
,
bBdd0
,
bBdd1
);
Cudd_Ref
(
(
DdNode
*
)
pObj
->
pData
);
if
(
i
%
10
==
0
&&
TimeOut
&&
clock
()
>=
TimeOut
)
{
Vec_PtrForEachEntryStop
(
Aig_Obj_t
*
,
vNodes
,
pObj
,
k
,
i
+
1
)
Cudd_RecursiveDeref
(
dd
,
(
DdNode
*
)
pObj
->
pData
);
Vec_PtrFree
(
vNodes
);
return
NULL
;
}
}
// quantify PIs of each PO
bResult
=
Cudd_ReadLogicZero
(
dd
);
Cudd_Ref
(
bResult
);
...
...
src/aig/llb/llb2Core.c
View file @
3e92b873
...
...
@@ -217,10 +217,17 @@ int Llb_CoreReachability_int( Llb_Img_t * p, Vec_Ptr_t * vQuant0, Vec_Ptr_t * vQ
// compute initial states
if
(
p
->
pPars
->
fBackward
)
{
// create init state in the global manager
bTemp
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
,
p
->
pPars
->
TimeLimit
);
if
(
bTemp
==
NULL
)
{
if
(
!
p
->
pPars
->
fSilent
)
printf
(
"Reached timeout (%d seconds) during constructing the bad states.
\n
"
,
p
->
pPars
->
TimeLimit
);
return
-
1
;
}
Cudd_Ref
(
bTemp
);
// create bad state in the ring manager
p
->
ddR
->
bFunc
=
Llb_CoreComputeCube
(
p
->
ddR
,
p
->
vVarsCs
,
0
,
NULL
);
Cudd_Ref
(
p
->
ddR
->
bFunc
);
// create init state in the global manager
bTemp
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
);
Cudd_Ref
(
bTemp
);
bCurrent
=
Llb_BddQuantifyPis
(
p
->
pInit
,
p
->
ddR
,
bTemp
);
Cudd_Ref
(
bCurrent
);
Cudd_RecursiveDeref
(
p
->
ddR
,
bTemp
);
bReached
=
Cudd_bddTransfer
(
p
->
ddR
,
p
->
ddG
,
bCurrent
);
Cudd_Ref
(
bReached
);
...
...
@@ -231,7 +238,16 @@ int Llb_CoreReachability_int( Llb_Img_t * p, Vec_Ptr_t * vQuant0, Vec_Ptr_t * vQ
else
{
// create bad state in the ring manager
p
->
ddR
->
bFunc
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
);
Cudd_Ref
(
p
->
ddR
->
bFunc
);
p
->
ddR
->
bFunc
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
,
p
->
pPars
->
TimeLimit
);
if
(
p
->
ddR
->
bFunc
==
NULL
)
{
if
(
!
p
->
pPars
->
fSilent
)
printf
(
"Reached timeout (%d seconds) during constructing the bad states.
\n
"
,
p
->
pPars
->
TimeLimit
);
return
-
1
;
}
if
(
p
->
ddR
->
bFunc
==
NULL
)
return
-
1
;
Cudd_Ref
(
p
->
ddR
->
bFunc
);
// create init state in the working and global manager
bCurrent
=
Llb_CoreComputeCube
(
p
->
dd
,
p
->
vVarsCs
,
1
,
NULL
);
Cudd_Ref
(
bCurrent
);
bReached
=
Llb_CoreComputeCube
(
p
->
ddG
,
p
->
vVarsCs
,
0
,
NULL
);
Cudd_Ref
(
bReached
);
...
...
src/aig/llb/llb3Image.c
View file @
3e92b873
...
...
@@ -524,7 +524,7 @@ Vec_Ptr_t * Llb_NonlinCutNodes( Aig_Man_t * p, Vec_Ptr_t * vLower, Vec_Ptr_t * v
SeeAlso []
***********************************************************************/
Vec_Ptr_t
*
Llb_NonlinBuildBdds
(
Aig_Man_t
*
p
,
Vec_Ptr_t
*
vLower
,
Vec_Ptr_t
*
vUpper
,
DdManager
*
dd
)
Vec_Ptr_t
*
Llb_NonlinBuildBdds
(
Aig_Man_t
*
p
,
Vec_Ptr_t
*
vLower
,
Vec_Ptr_t
*
vUpper
,
DdManager
*
dd
,
int
TimeOut
)
{
Vec_Ptr_t
*
vNodes
,
*
vResult
;
Aig_Obj_t
*
pObj
;
...
...
@@ -541,6 +541,15 @@ Vec_Ptr_t * Llb_NonlinBuildBdds( Aig_Man_t * p, Vec_Ptr_t * vLower, Vec_Ptr_t *
bBdd0
=
Cudd_NotCond
(
(
DdNode
*
)
Aig_ObjFanin0
(
pObj
)
->
pData
,
Aig_ObjFaninC0
(
pObj
)
);
bBdd1
=
Cudd_NotCond
(
(
DdNode
*
)
Aig_ObjFanin1
(
pObj
)
->
pData
,
Aig_ObjFaninC1
(
pObj
)
);
pObj
->
pData
=
Cudd_bddAnd
(
dd
,
bBdd0
,
bBdd1
);
Cudd_Ref
(
(
DdNode
*
)
pObj
->
pData
);
if
(
i
%
10
==
0
&&
TimeOut
&&
clock
()
>=
TimeOut
)
{
Vec_PtrForEachEntry
(
Aig_Obj_t
*
,
vNodes
,
pObj
,
i
)
if
(
pObj
->
pData
)
Cudd_RecursiveDeref
(
dd
,
(
DdNode
*
)
pObj
->
pData
);
Vec_PtrFree
(
vNodes
);
return
NULL
;
}
}
vResult
=
Vec_PtrAlloc
(
100
);
...
...
@@ -600,14 +609,16 @@ void Llb_NonlinAddPair( Llb_Mgr_t * p, DdNode * bFunc, int iPart, int iVar )
SeeAlso []
***********************************************************************/
void
Llb_NonlinStart
(
Llb_Mgr_t
*
p
)
int
Llb_NonlinStart
(
Llb_Mgr_t
*
p
,
int
TimeOut
)
{
Vec_Ptr_t
*
vRootBdds
;
Llb_Prt_t
*
pPart
;
DdNode
*
bFunc
;
int
i
,
k
,
nSuppSize
;
// create and collect BDDs
vRootBdds
=
Llb_NonlinBuildBdds
(
p
->
pAig
,
p
->
vLeaves
,
p
->
vRoots
,
p
->
dd
);
// come referenced
vRootBdds
=
Llb_NonlinBuildBdds
(
p
->
pAig
,
p
->
vLeaves
,
p
->
vRoots
,
p
->
dd
,
TimeOut
);
// come referenced
if
(
vRootBdds
==
NULL
)
return
0
;
Vec_PtrPush
(
vRootBdds
,
p
->
bCurrent
);
// add pairs (refs are consumed inside)
Vec_PtrForEachEntry
(
DdNode
*
,
vRootBdds
,
bFunc
,
i
)
...
...
@@ -634,6 +645,7 @@ void Llb_NonlinStart( Llb_Mgr_t * p )
Llb_MgrForEachPart
(
p
,
pPart
,
i
)
if
(
Llb_NonlinHasSingletonVars
(
p
,
pPart
)
)
Llb_NonlinQuantify1
(
p
,
pPart
,
0
);
return
1
;
}
/**Function*************************************************************
...
...
@@ -844,7 +856,7 @@ void Llb_NonlinFree( Llb_Mgr_t * p )
***********************************************************************/
DdNode
*
Llb_NonlinImage
(
Aig_Man_t
*
pAig
,
Vec_Ptr_t
*
vLeaves
,
Vec_Ptr_t
*
vRoots
,
int
*
pVars2Q
,
DdManager
*
dd
,
DdNode
*
bCurrent
,
int
fReorder
,
int
fVerbose
,
int
*
pOrder
,
int
Limit
)
DdManager
*
dd
,
DdNode
*
bCurrent
,
int
fReorder
,
int
fVerbose
,
int
*
pOrder
,
int
Limit
,
int
TimeOut
)
{
Llb_Prt_t
*
pPart
,
*
pPart1
,
*
pPart2
;
Llb_Mgr_t
*
p
;
...
...
@@ -854,7 +866,11 @@ DdNode * Llb_NonlinImage( Aig_Man_t * pAig, Vec_Ptr_t * vLeaves, Vec_Ptr_t * vRo
// start the manager
clk2
=
clock
();
p
=
Llb_NonlinAlloc
(
pAig
,
vLeaves
,
vRoots
,
pVars2Q
,
dd
,
bCurrent
);
Llb_NonlinStart
(
p
);
if
(
!
Llb_NonlinStart
(
p
,
TimeOut
)
)
{
Llb_NonlinFree
(
p
);
return
NULL
;
}
timeBuild
+=
clock
()
-
clk2
;
timeInside
=
clock
()
-
clk2
;
// compute scores
...
...
src/aig/llb/llb3Nonlin.c
View file @
3e92b873
...
...
@@ -294,7 +294,7 @@ Abc_Cex_t * Llb_NonlinDeriveCex( Llb_Mnn_t * p )
//Extra_bddPrintSupport( p->dd, bRing ); printf( "\n" );
// compute the next states
bImage
=
Llb_NonlinImage
(
p
->
pAig
,
p
->
vLeaves
,
p
->
vRoots
,
p
->
pVars2Q
,
p
->
dd
,
bState
,
p
->
pPars
->
fReorder
,
p
->
pPars
->
fVeryVerbose
,
p
->
pOrder
,
ABC_INFINITY
);
// consumed reference
p
->
pPars
->
fReorder
,
p
->
pPars
->
fVeryVerbose
,
p
->
pOrder
,
ABC_INFINITY
,
ABC_INFINITY
);
// consumed reference
assert
(
bImage
!=
NULL
);
Cudd_Ref
(
bImage
);
//Extra_bddPrintSupport( p->dd, bImage ); printf( "\n" );
...
...
@@ -340,6 +340,44 @@ Abc_Cex_t * Llb_NonlinDeriveCex( Llb_Mnn_t * p )
return
pCex
;
}
/**Function*************************************************************
Synopsis [Perform reachability with hints.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Llb_NonlinReoHook
(
DdManager
*
dd
,
char
*
Type
,
void
*
Method
)
{
Aig_Man_t
*
pAig
=
(
Aig_Man_t
*
)
dd
->
bFunc
;
Aig_Obj_t
*
pObj
;
int
i
;
printf
(
"Order: "
);
for
(
i
=
0
;
i
<
Cudd_ReadSize
(
dd
);
i
++
)
{
pObj
=
Aig_ManObj
(
pAig
,
i
);
if
(
pObj
==
NULL
)
continue
;
if
(
Saig_ObjIsPi
(
pAig
,
pObj
)
)
printf
(
"pi"
);
else
if
(
Saig_ObjIsLo
(
pAig
,
pObj
)
)
printf
(
"lo"
);
else
if
(
Saig_ObjIsPo
(
pAig
,
pObj
)
)
printf
(
"po"
);
else
if
(
Saig_ObjIsLi
(
pAig
,
pObj
)
)
printf
(
"li"
);
else
continue
;
printf
(
"%d=%d "
,
i
,
dd
->
perm
[
i
]
);
}
printf
(
"
\n
"
);
return
1
;
}
/**Function*************************************************************
Synopsis [Perform reachability with hints.]
...
...
@@ -364,8 +402,20 @@ int Llb_NonlinReachability( Llb_Mnn_t * p )
else
p
->
pPars
->
TimeTarget
=
0
;
// set reordering hooks
assert
(
p
->
dd
->
bFunc
==
NULL
);
// p->dd->bFunc = (DdNode *)p->pAig;
// Cudd_AddHook( p->dd, Llb_NonlinReoHook, CUDD_POST_REORDERING_HOOK );
// create bad state in the ring manager
p
->
ddR
->
bFunc
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
);
Cudd_Ref
(
p
->
ddR
->
bFunc
);
p
->
ddR
->
bFunc
=
Llb_BddComputeBad
(
p
->
pInit
,
p
->
ddR
,
p
->
pPars
->
TimeTarget
);
if
(
p
->
ddR
->
bFunc
==
NULL
)
{
if
(
!
p
->
pPars
->
fSilent
)
printf
(
"Reached timeout (%d seconds) during constructing the bad states.
\n
"
,
p
->
pPars
->
TimeLimit
);
return
-
1
;
}
Cudd_Ref
(
p
->
ddR
->
bFunc
);
// compute the starting set of states
bCurrent
=
Llb_NonlinComputeInitState
(
p
->
pAig
,
p
->
dd
);
Cudd_Ref
(
bCurrent
);
p
->
ddG
->
bFunc
=
Llb_NonlinComputeInitState
(
p
->
pAig
,
p
->
ddG
);
Cudd_Ref
(
p
->
ddG
->
bFunc
);
// reached
...
...
@@ -429,8 +479,16 @@ int Llb_NonlinReachability( Llb_Mnn_t * p )
nBddSize0
=
Cudd_DagSize
(
bCurrent
);
bNext
=
Llb_NonlinImage
(
p
->
pAig
,
p
->
vLeaves
,
p
->
vRoots
,
p
->
pVars2Q
,
p
->
dd
,
bCurrent
,
// p->pPars->fReorder, p->pPars->fVeryVerbose, p->pOrder, nIters ? p->pPars->nBddMax : ABC_INFINITY );
p
->
pPars
->
fReorder
,
p
->
pPars
->
fVeryVerbose
,
p
->
pOrder
,
ABC_INFINITY
);
p
->
pPars
->
fReorder
,
p
->
pPars
->
fVeryVerbose
,
p
->
pOrder
,
ABC_INFINITY
,
p
->
pPars
->
TimeTarget
);
// Abc_PrintTime( 1, "Image time", clock() - clk3 );
if
(
bNext
==
NULL
)
{
if
(
!
p
->
pPars
->
fSilent
)
printf
(
"Reached timeout during image computation (%d seconds).
\n
"
,
p
->
pPars
->
TimeLimit
);
p
->
pPars
->
iFrame
=
nIters
-
1
;
Cudd_RecursiveDeref
(
p
->
dd
,
bCurrent
);
bCurrent
=
NULL
;
return
-
1
;
}
if
(
bNext
==
NULL
)
// Llb_NonlimImage() consumes reference of bCurrent!!!
{
DdNode
*
bVar
,
*
bVarG
;
...
...
@@ -632,6 +690,7 @@ void Llb_MnnStop( Llb_Mnn_t * p )
ABC_PRTP
(
" reo "
,
p
->
timeReo
,
p
->
timeTotal
);
ABC_PRTP
(
" reoG "
,
p
->
timeReoG
,
p
->
timeTotal
);
}
p
->
dd
->
bFunc
=
NULL
;
if
(
p
->
ddR
->
bFunc
)
Cudd_RecursiveDeref
(
p
->
ddR
,
p
->
ddR
->
bFunc
);
Vec_PtrForEachEntry
(
DdNode
*
,
p
->
vRings
,
bTemp
,
i
)
...
...
src/aig/llb/llb3Nonlin_multi.c
deleted
100644 → 0
View file @
82e9de90
This diff is collapsed.
Click to expand it.
src/aig/llb/llbInt.h
View file @
3e92b873
...
...
@@ -146,7 +146,7 @@ extern int Llb_ManReachability( Llb_Man_t * p, Vec_Int_t * vHints, D
extern
void
Llb_MtrSchedule
(
Llb_Mtr_t
*
p
);
/*=== llb2Bad.c ======================================================*/
extern
DdNode
*
Llb_BddComputeBad
(
Aig_Man_t
*
pInit
,
DdManager
*
dd
);
extern
DdNode
*
Llb_BddComputeBad
(
Aig_Man_t
*
pInit
,
DdManager
*
dd
,
int
TimeOut
);
extern
DdNode
*
Llb_BddQuantifyPis
(
Aig_Man_t
*
pInit
,
DdManager
*
dd
,
DdNode
*
bFunc
);
/*=== llb2Core.c ======================================================*/
extern
DdNode
*
Llb_CoreComputeCube
(
DdManager
*
dd
,
Vec_Int_t
*
vVars
,
int
fUseVarIndex
,
char
*
pValues
);
...
...
@@ -168,7 +168,7 @@ extern DdNode * Llb_ImgComputeImage( Aig_Man_t * pAig, Vec_Ptr_t * vDdMan
/*=== llb3Image.c ======================================================*/
extern
DdNode
*
Llb_NonlinImage
(
Aig_Man_t
*
pAig
,
Vec_Ptr_t
*
vLeaves
,
Vec_Ptr_t
*
vRoots
,
int
*
pVars2Q
,
DdManager
*
dd
,
DdNode
*
bCurrent
,
int
fReorder
,
int
fVerbose
,
int
*
pOrder
,
int
Limit
);
DdManager
*
dd
,
DdNode
*
bCurrent
,
int
fReorder
,
int
fVerbose
,
int
*
pOrder
,
int
Limit
,
int
TimeLimit
);
ABC_NAMESPACE_HEADER_END
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment