Allowing more aggressive restructuring in "stochmap".

This commit is contained in:
Alan Mishchenko 2025-04-16 16:58:04 -07:00
parent 1626a337a1
commit 3a063c5901
1 changed files with 7 additions and 7 deletions

View File

@ -1219,7 +1219,7 @@ void Abc_NtkFraigPartitionedTime( Abc_Ntk_t * pNtk, void * pParams )
***********************************************************************/ ***********************************************************************/
Vec_Int_t * Abc_NtkStochSynthesis( Vec_Ptr_t * vWins, char * pScript ) Vec_Int_t * Abc_NtkStochSynthesis( Vec_Ptr_t * vWins, char * pScript )
{ {
Vec_Int_t * vGains = Vec_IntStart( Vec_PtrSize(vWins) ); Vec_Int_t * vGains = Vec_IntStartFull( Vec_PtrSize(vWins) );
Abc_Ntk_t * pNtk, * pNew; int i; Abc_Ntk_t * pNtk, * pNew; int i;
Vec_PtrForEachEntry( Abc_Ntk_t *, vWins, pNtk, i ) Vec_PtrForEachEntry( Abc_Ntk_t *, vWins, pNtk, i )
{ {
@ -1248,7 +1248,7 @@ Vec_Int_t * Abc_NtkStochSynthesis( Vec_Ptr_t * vWins, char * pScript )
{ {
double Before = Abc_NtkGetMappedArea(pNtk); double Before = Abc_NtkGetMappedArea(pNtk);
double After = Abc_NtkGetMappedArea(pNew); double After = Abc_NtkGetMappedArea(pNew);
if ( After < Before ) if ( Before >= After )
{ {
Vec_IntWriteEntry( vGains, i, (int)(Before - After) ); Vec_IntWriteEntry( vGains, i, (int)(Before - After) );
Abc_NtkDelete( pNtk ); Abc_NtkDelete( pNtk );
@ -1257,7 +1257,7 @@ Vec_Int_t * Abc_NtkStochSynthesis( Vec_Ptr_t * vWins, char * pScript )
} }
else else
{ {
if ( Abc_NtkNodeNum(pNew) < Abc_NtkNodeNum(pNtk) ) if ( Abc_NtkNodeNum(pNtk) >= Abc_NtkNodeNum(pNew) )
{ {
Vec_IntWriteEntry( vGains, i, Abc_NtkNodeNum(pNtk) - Abc_NtkNodeNum(pNew) ); Vec_IntWriteEntry( vGains, i, Abc_NtkNodeNum(pNtk) - Abc_NtkNodeNum(pNew) );
Abc_NtkDelete( pNtk ); Abc_NtkDelete( pNtk );
@ -1320,7 +1320,7 @@ Abc_Ntk_t * Abc_NtkStochProcessOne( Abc_Ntk_t * p, char * pScript0, int Rand, in
ABC_FREE( pScript ); ABC_FREE( pScript );
pNew = Abc_NtkReadFromFile( FileName ); pNew = Abc_NtkReadFromFile( FileName );
unlink( FileName ); unlink( FileName );
if ( pNew && Abc_NtkGetMappedArea(pNew) < Abc_NtkGetMappedArea(p) ) { if ( pNew && Abc_NtkGetMappedArea(pNew) <= Abc_NtkGetMappedArea(p) ) {
pNew = Abc_NtkDupDfs( pTemp = pNew ); pNew = Abc_NtkDupDfs( pTemp = pNew );
Abc_NtkDelete( pTemp ); Abc_NtkDelete( pTemp );
return pNew; return pNew;
@ -1343,7 +1343,7 @@ Vec_Int_t * Abc_NtkStochProcess( Vec_Ptr_t * vWins, char * pScript, int nProcs,
if ( nProcs <= 2 ) { if ( nProcs <= 2 ) {
return Abc_NtkStochSynthesis( vWins, pScript ); return Abc_NtkStochSynthesis( vWins, pScript );
} }
Vec_Int_t * vGains = Vec_IntStart( Vec_PtrSize(vWins) ); Vec_Int_t * vGains = Vec_IntStartFull( Vec_PtrSize(vWins) );
StochSynData_t * pData = ABC_CALLOC( StochSynData_t, Vec_PtrSize(vWins) ); StochSynData_t * pData = ABC_CALLOC( StochSynData_t, Vec_PtrSize(vWins) );
Vec_Ptr_t * vData = Vec_PtrAlloc( Vec_PtrSize(vWins) ); Vec_Ptr_t * vData = Vec_PtrAlloc( Vec_PtrSize(vWins) );
Abc_Ntk_t * pNtk; int i; Abc_Ntk_t * pNtk; int i;
@ -1481,7 +1481,7 @@ Abc_Ntk_t * Abc_NtkInsertPartitions( Abc_Ntk_t * p, Vec_Ptr_t * vvIns, Vec_Ptr_t
Abc_NtkIncrementTravId( p ); Abc_NtkIncrementTravId( p );
while ( 1 ) { while ( 1 ) {
int i, Gain, iEntry = Vec_IntArgMax(vGains); int i, Gain, iEntry = Vec_IntArgMax(vGains);
if ( iEntry == -1 || Vec_IntEntry(vGains, iEntry) <= 0 ) if ( iEntry == -1 || Vec_IntEntry(vGains, iEntry) < 0 )
break; break;
//printf( "Selecting partition %d with gain %d.\n", iEntry, Vec_IntEntry(vGains, iEntry) ); //printf( "Selecting partition %d with gain %d.\n", iEntry, Vec_IntEntry(vGains, iEntry) );
Vec_IntWriteEntry( vGains, iEntry, -1 ); Vec_IntWriteEntry( vGains, iEntry, -1 );
@ -1491,7 +1491,7 @@ Abc_Ntk_t * Abc_NtkInsertPartitions( Abc_Ntk_t * p, Vec_Ptr_t * vvIns, Vec_Ptr_t
extern void Abc_NtKMarkTfiTfo( Vec_Int_t * vOne, Abc_Ntk_t * pNtk ); extern void Abc_NtKMarkTfiTfo( Vec_Int_t * vOne, Abc_Ntk_t * pNtk );
Abc_NtKMarkTfiTfo( (Vec_Int_t *)Vec_PtrEntryLast(vvInsNew), p ); Abc_NtKMarkTfiTfo( (Vec_Int_t *)Vec_PtrEntryLast(vvInsNew), p );
Vec_IntForEachEntry( vGains, Gain, i ) { Vec_IntForEachEntry( vGains, Gain, i ) {
if ( Gain <= 0 ) if ( Gain < 0 )
continue; continue;
Vec_Int_t * vNodes = (Vec_Int_t *)Vec_PtrEntry(vvNodes, i); Vec_Int_t * vNodes = (Vec_Int_t *)Vec_PtrEntry(vvNodes, i);
Abc_Obj_t * pNode; int j; Abc_Obj_t * pNode; int j;