58 p->vCutsNew = Vec_PtrAlloc( pParams->
nIdsMax );
59 Vec_PtrFill(
p->vCutsNew, pParams->
nIdsMax, NULL );
63 p->pParams->fFilter = 1;
64 p->vCutsOld = Vec_PtrAlloc( pParams->
nIdsMax );
65 Vec_PtrFill(
p->vCutsOld, pParams->
nIdsMax, NULL );
66 p->vCutsTemp = Vec_PtrAlloc( pParams->
nCutSet );
67 Vec_PtrFill(
p->vCutsTemp, pParams->
nCutSet, NULL );
71 printf(
"Skipping computation of truth tables for sequential cuts with more than 5 inputs.\n" );
81 printf(
"Skipping computation of truth table for more than %d inputs.\n", 14 );
85 p->nTruthWords = Cut_TruthWords( pParams->
nVarsMax );
86 p->EntrySize +=
p->nTruthWords *
sizeof(unsigned);
88 p->puTemp[0] =
ABC_ALLOC(
unsigned, 4 *
p->nTruthWords );
89 p->puTemp[1] =
p->puTemp[0] +
p->nTruthWords;
90 p->puTemp[2] =
p->puTemp[1] +
p->nTruthWords;
91 p->puTemp[3] =
p->puTemp[2] +
p->nTruthWords;
96 p->vNodeCuts = Vec_IntStart( pParams->
nIdsMax );
97 p->vNodeStarts = Vec_IntStart( pParams->
nIdsMax );
98 p->vCutPairs = Vec_IntAlloc( 0 );
101 if ( pParams->
fMap && !
p->pParams->fSeq )
103 p->vDelays = Vec_IntStart( pParams->
nIdsMax );
104 p->vDelays2 = Vec_IntStart( pParams->
nIdsMax );
105 p->vCutsMax = Vec_PtrStart( pParams->
nIdsMax );
109 p->vTemp = Vec_PtrAlloc( 100 );
126 if (
p->vCutsNew ) Vec_PtrFree(
p->vCutsNew );
127 if (
p->vCutsOld ) Vec_PtrFree(
p->vCutsOld );
128 if (
p->vCutsTemp ) Vec_PtrFree(
p->vCutsTemp );
129 if (
p->vFanCounts ) Vec_IntFree(
p->vFanCounts );
130 if (
p->vTemp ) Vec_PtrFree(
p->vTemp );
132 if (
p->vCutsMax ) Vec_PtrFree(
p->vCutsMax );
133 if (
p->vDelays ) Vec_IntFree(
p->vDelays );
134 if (
p->vDelays2 ) Vec_IntFree(
p->vDelays2 );
135 if (
p->vNodeCuts ) Vec_IntFree(
p->vNodeCuts );
136 if (
p->vNodeStarts ) Vec_IntFree(
p->vNodeStarts );
137 if (
p->vCutPairs ) Vec_IntFree(
p->vCutPairs );
162 printf(
"Cut computation statistics:\n" );
163 printf(
"Current cuts = %8d. (Trivial = %d.)\n",
p->nCutsCur-
p->nCutsTriv,
p->nCutsTriv );
164 printf(
"Peak cuts = %8d.\n",
p->nCutsPeak );
165 printf(
"Total allocated = %8d.\n",
p->nCutsAlloc );
166 printf(
"Total deallocated = %8d.\n",
p->nCutsDealloc );
167 printf(
"Cuts filtered = %8d.\n",
p->nCutsFilter );
168 printf(
"Nodes saturated = %8d. (Max cuts = %d.)\n",
p->nCutsLimit,
p->pParams->nKeepMax );
169 printf(
"Cuts per node = %8.1f\n", ((
float)(
p->nCutsCur-
p->nCutsTriv))/
p->nNodes );
170 printf(
"The cut size = %8d bytes.\n",
p->EntrySize );
171 printf(
"Peak memory = %8.2f MB.\n", (
float)
p->nCutsPeak *
p->EntrySize / (1<<20) );
172 printf(
"Total nodes = %8d.\n",
p->nNodes );
173 if (
p->pParams->fDag ||
p->pParams->fTree )
175 printf(
"DAG nodes = %8d.\n",
p->nNodesDag );
176 printf(
"Tree nodes = %8d.\n",
p->nNodes -
p->nNodesDag );
178 printf(
"Nodes w/o cuts = %8d.\n",
p->nNodesNoCuts );
179 if (
p->pParams->fMap && !
p->pParams->fSeq )
180 printf(
"Mapping delay = %8d.\n",
p->nDelayMin );
207 pTable = fopen(
"cut_stats.txt",
"a+" );
208 fprintf( pTable,
"%-20s ", pFileName );
209 fprintf( pTable,
"%8d ",
p->nNodes );
210 fprintf( pTable,
"%6.1f ", ((
float)(
p->nCutsCur))/
p->nNodes );
211 fprintf( pTable,
"%6.2f ", ((
float)(100.0 *
p->nCutsLimit))/
p->nNodes );
212 fprintf( pTable,
"%6.2f ", (
float)
p->nCutsPeak *
p->EntrySize / (1<<20) );
213 fprintf( pTable,
"%6.2f ", (
float)(TimeTotal)/(
float)(CLOCKS_PER_SEC) );
214 fprintf( pTable,
"\n" );
231 p->vFanCounts = vFanCounts;
247 p->vNodeAttrs = vNodeAttrs;
263 return p->pParams->nVarsMax;
295 return p->vNodeAttrs;
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Cut_CutRecycle(Cut_Man_t *p, Cut_Cut_t *pCut)
ABC_NAMESPACE_IMPL_START void Npn_StartTruth8(uint8 uTruths[][32])
DECLARATIONS ///.
void Cut_ManIncrementDagNodes(Cut_Man_t *p)
void Cut_ManPrintStatsToFile(Cut_Man_t *p, char *pFileName, abctime TimeTotal)
void Cut_ManPrintStats(Cut_Man_t *p)
void Cut_ManSetNodeAttrs(Cut_Man_t *p, Vec_Int_t *vNodeAttrs)
Cut_Man_t * Cut_ManStart(Cut_Params_t *pParams)
FUNCTION DEFINITIONS ///.
Vec_Int_t * Cut_ManReadNodeAttrs(Cut_Man_t *p)
void Cut_ManSetFanoutCounts(Cut_Man_t *p, Vec_Int_t *vFanCounts)
int Cut_ManReadVarsMax(Cut_Man_t *p)
Cut_Params_t * Cut_ManReadParams(Cut_Man_t *p)
void Cut_ManStop(Cut_Man_t *p)
struct Cut_ParamsStruct_t_ Cut_Params_t
struct Cut_ManStruct_t_ Cut_Man_t
BASIC TYPES ///.
struct Cut_CutStruct_t_ Cut_Cut_t