diff options
| author | Alan Mishchenko <alanmi@berkeley.edu> | 2014-04-23 10:22:30 -0700 | 
|---|---|---|
| committer | Alan Mishchenko <alanmi@berkeley.edu> | 2014-04-23 10:22:30 -0700 | 
| commit | 4172fb02c691d37a826031438031a79ca6145f27 (patch) | |
| tree | 1601cb9c50a1f352042acd31a23b9ca5560f5cef | |
| parent | 6fdb52cabc9e44fc3d7b58f7d43da3324c3de234 (diff) | |
| download | abc-4172fb02c691d37a826031438031a79ca6145f27.tar.gz abc-4172fb02c691d37a826031438031a79ca6145f27.tar.bz2 abc-4172fb02c691d37a826031438031a79ca6145f27.zip | |
Experiments with permutations.
| -rw-r--r-- | src/misc/extra/extraUtilPerm.c | 32 | 
1 files changed, 10 insertions, 22 deletions
| diff --git a/src/misc/extra/extraUtilPerm.c b/src/misc/extra/extraUtilPerm.c index 25c221ec..5c9081d9 100644 --- a/src/misc/extra/extraUtilPerm.c +++ b/src/misc/extra/extraUtilPerm.c @@ -42,7 +42,6 @@ typedef enum      ABC_ZDD_OPER_PERM_PROD,      ABC_ZDD_OPER_COF0,      ABC_ZDD_OPER_COF1, -    ABC_ZDD_OPER_MULTIPLY,      ABC_ZDD_OPER_THRESH,      ABC_ZDD_OPER_DOT_PROD,      ABC_ZDD_OPER_DOT_PROD_6, @@ -227,7 +226,7 @@ void Abc_ZddManCreatePerms( Abc_ZddMan * p, int nPermSize )  }  void Abc_ZddManFree( Abc_ZddMan * p )  { -    printf( "ZDD stats: Var = %d  Obj = %d  All = %d  Hits = %d  Miss = %d  ",  +    printf( "ZDD stats: Var = %d  Obj = %d  Alloc = %d  Hit = %d  Miss = %d  ",           p->nVars, p->nObjs, p->nObjsAlloc, p->nCacheLookups-p->nCacheMisses, p->nCacheMisses );      printf( "Mem = %.2f MB\n", 4.0*(int)(p->nMemory/(1<<20)) );      ABC_FREE( p->pT2V ); @@ -383,25 +382,6 @@ int Abc_ZddCof1( Abc_ZddMan * p, int a, int Var )      r = Abc_ZddUniqueCreate( p, A->Var, r1, r0 );      return Abc_ZddCacheInsert( p, a, Var, ABC_ZDD_OPER_COF1, r );  } -int Abc_ZddMultiply( Abc_ZddMan * p, int a, int Var ) -{ -    Abc_ZddObj * A;  -    int r0, r1, r; -    if ( a == 0 )  return 0; -    if ( a == 1 )  return Abc_ZddIthVar(Var); -    if ( (r = Abc_ZddCacheLookup(p, a, Var, ABC_ZDD_OPER_MULTIPLY)) >= 0 ) -        return r; -    A = Abc_ZddNode( p, a ); -    if ( (int)A->Var > Var ) -        r = Abc_ZddUniqueCreate( p, Var, a, 0 ); -    else if ( (int)A->Var < Var ) -        r0 = Abc_ZddMultiply( p, A->False, Var ), -        r1 = Abc_ZddMultiply( p, A->True, Var ), -        r  = Abc_ZddUniqueCreate( p, A->Var, r1, r0 ); -    else -        r  = Abc_ZddUniqueCreate( p, A->Var, A->False, A->True ); -    return Abc_ZddCacheInsert( p, a, Var, ABC_ZDD_OPER_MULTIPLY, r ); -}  int Abc_ZddCountPaths( Abc_ZddMan * p, int a )  {      Abc_ZddObj * A;   @@ -413,6 +393,7 @@ int Abc_ZddCountPaths( Abc_ZddMan * p, int a )      r = Abc_ZddCountPaths( p, A->False ) + Abc_ZddCountPaths( p, A->True );      return Abc_ZddCacheInsert( p, a, 0, ABC_ZDD_OPER_PATHS, r );  } +/*  int Abc_ZddCountNodes( Abc_ZddMan * p, int a )  {      Abc_ZddObj * A;   @@ -424,6 +405,7 @@ int Abc_ZddCountNodes( Abc_ZddMan * p, int a )      r = 1 + Abc_ZddCountNodes( p, A->False ) + Abc_ZddCountNodes( p, A->True );      return Abc_ZddCacheInsert( p, a, 0, ABC_ZDD_OPER_NODES, r );  } +*/  int Abc_ZddCount_rec( Abc_ZddMan * p, int i )  {      Abc_ZddObj * A; @@ -447,6 +429,12 @@ void Abc_ZddUnmark_rec( Abc_ZddMan * p, int i )      Abc_ZddUnmark_rec( p, A->False );      Abc_ZddUnmark_rec( p, A->True );  } +int Abc_ZddCountNodes( Abc_ZddMan * p, int i ) +{ +    int Count = Abc_ZddCount_rec( p, i ); +    Abc_ZddUnmark_rec( p, i ); +    return Count; +}  int Abc_ZddCountNodesArray( Abc_ZddMan * p, Vec_Int_t * vNodes )  {      int i, Id, Count = 0; @@ -906,7 +894,7 @@ void Abc_EnumerateCubeStatesZdd()      {          int ZddAllPrev = ZddAll;          ZddAll = Abc_ZddPermProduct( p, ZddAll, ZddTurns ); -        printf( "Iter %2d -> %8d   ", i, Abc_ZddCountPaths(p, ZddAll) ); +        printf( "Iter %2d -> %8d  Nodes = %8d  ", i, Abc_ZddCountPaths(p, ZddAll), Abc_ZddCountNodes(p, ZddAll) );          Abc_PrintTime( 1, "Time", Abc_Clock() - clk );          if ( ZddAllPrev == ZddAll )              break; | 
