Commit 3b946e76 by MyskYko

options

parent 920f4dbb
...@@ -41,13 +41,13 @@ Gia_Man_t *Gia_ManTransductionBdd(Gia_Man_t *pGia, int nType, int fMspf, int nRa ...@@ -41,13 +41,13 @@ Gia_Man_t *Gia_ManTransductionBdd(Gia_Man_t *pGia, int nType, int fMspf, int nRa
break; break;
case 6: { case 6: {
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
count -= t.RepeatResubInner(fMspf, fInner); count -= t.RepeatInner(fMspf, fInner);
break; break;
} }
case 7: { case 7: {
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
bool fOuter = (nParameter / 8) % 2; bool fOuter = (nParameter / 8) % 2;
count -= t.RepeatResubOuter(fMspf, fInner, fOuter); count -= t.RepeatOuter(fMspf, fInner, fOuter);
break; break;
} }
case 8: { case 8: {
...@@ -55,12 +55,11 @@ Gia_Man_t *Gia_ManTransductionBdd(Gia_Man_t *pGia, int nType, int fMspf, int nRa ...@@ -55,12 +55,11 @@ Gia_Man_t *Gia_ManTransductionBdd(Gia_Man_t *pGia, int nType, int fMspf, int nRa
bool fMspfMerge = fMspf? (nParameter / 2) % 2: false; bool fMspfMerge = fMspf? (nParameter / 2) % 2: false;
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
bool fOuter = (nParameter / 8) % 2; bool fOuter = (nParameter / 8) % 2;
count -= t.Optimize(fFirstMerge, fMspfMerge, fMspf, fInner, fOuter); count -= t.RepeatAll(fFirstMerge, fMspfMerge, fMspf, fInner, fOuter);
break; break;
} }
default: default:
std::cout << "Invalid transduction type" << std::endl; std::cout << "Unknown transduction type " << nType << std::endl;
assert(0);
} }
assert(t.Verify()); assert(t.Verify());
assert(count == t.CountWires()); assert(count == t.CountWires());
...@@ -98,13 +97,13 @@ Gia_Man_t *Gia_ManTransductionTt(Gia_Man_t *pGia, int nType, int fMspf, int nRan ...@@ -98,13 +97,13 @@ Gia_Man_t *Gia_ManTransductionTt(Gia_Man_t *pGia, int nType, int fMspf, int nRan
break; break;
case 6: { case 6: {
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
count -= t.RepeatResubInner(fMspf, fInner); count -= t.RepeatInner(fMspf, fInner);
break; break;
} }
case 7: { case 7: {
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
bool fOuter = (nParameter / 8) % 2; bool fOuter = (nParameter / 8) % 2;
count -= t.RepeatResubOuter(fMspf, fInner, fOuter); count -= t.RepeatOuter(fMspf, fInner, fOuter);
break; break;
} }
case 8: { case 8: {
...@@ -112,12 +111,11 @@ Gia_Man_t *Gia_ManTransductionTt(Gia_Man_t *pGia, int nType, int fMspf, int nRan ...@@ -112,12 +111,11 @@ Gia_Man_t *Gia_ManTransductionTt(Gia_Man_t *pGia, int nType, int fMspf, int nRan
bool fMspfMerge = fMspf? (nParameter / 2) % 2: false; bool fMspfMerge = fMspf? (nParameter / 2) % 2: false;
bool fInner = (nParameter / 4) % 2; bool fInner = (nParameter / 4) % 2;
bool fOuter = (nParameter / 8) % 2; bool fOuter = (nParameter / 8) % 2;
count -= t.Optimize(fFirstMerge, fMspfMerge, fMspf, fInner, fOuter); count -= t.RepeatAll(fFirstMerge, fMspfMerge, fMspf, fInner, fOuter);
break; break;
} }
default: default:
std::cout << "Invalid transduction type" << std::endl; std::cout << "Unknown transduction type " << nType << std::endl;
assert(0);
} }
assert(t.Verify()); assert(t.Verify());
assert(count == t.CountWires()); assert(count == t.CountWires());
......
...@@ -1386,7 +1386,7 @@ public: // Optimization scripts ...@@ -1386,7 +1386,7 @@ public: // Optimization scripts
count += diff; count += diff;
return count; return count;
} }
int RepeatResubInner(bool fMspf, bool fInner) { int RepeatInner(bool fMspf, bool fInner) {
int count = 0; int count = 0;
while(int diff = RepeatResub(true, fMspf) + RepeatResub(false, fMspf)) { while(int diff = RepeatResub(true, fMspf) + RepeatResub(false, fMspf)) {
count += diff; count += diff;
...@@ -1395,30 +1395,30 @@ public: // Optimization scripts ...@@ -1395,30 +1395,30 @@ public: // Optimization scripts
} }
return count; return count;
} }
int RepeatResubOuter(bool fMspf, bool fInner, bool fOuter) { int RepeatOuter(bool fMspf, bool fInner, bool fOuter) {
int count = 0; int count = 0;
while(int diff = fMspf? RepeatResubInner(false, fInner) + RepeatResubInner(true, fInner): RepeatResubInner(false, fInner)) { while(int diff = fMspf? RepeatInner(false, fInner) + RepeatInner(true, fInner): RepeatInner(false, fInner)) {
count += diff; count += diff;
if(!fOuter) if(!fOuter)
break; break;
} }
return count; return count;
} }
int Optimize(bool fFirstMerge, bool fMspfMerge, bool fMspfResub, bool fInner, bool fOuter) { int RepeatAll(bool fFirstMerge, bool fMspfMerge, bool fMspfResub, bool fInner, bool fOuter) {
TransductionBackup<Man, lit, LitMax> b; TransductionBackup<Man, lit, LitMax> b;
Save(b); Save(b);
int count = 0; int count = 0;
int diff = 0; int diff = 0;
if(fFirstMerge) if(fFirstMerge)
diff = ResubShared(fMspfMerge); diff = ResubShared(fMspfMerge);
diff += RepeatResubOuter(fMspfResub, fInner, fOuter); diff += RepeatOuter(fMspfResub, fInner, fOuter);
if(diff > 0) { if(diff > 0) {
count = diff; count = diff;
Save(b); Save(b);
diff = 0; diff = 0;
} }
while(true) { while(true) {
diff += ResubShared(fMspfMerge) + RepeatResubOuter(fMspfResub, fInner, fOuter); diff += ResubShared(fMspfMerge) + RepeatOuter(fMspfResub, fInner, fOuter);
if(diff > 0) { if(diff > 0) {
count += diff; count += diff;
Save(b); Save(b);
...@@ -1591,7 +1591,7 @@ public: // Constructor ...@@ -1591,7 +1591,7 @@ public: // Constructor
startclk = Abc_Clock(); startclk = Abc_Clock();
p.nGbc = 1; p.nGbc = 1;
p.nReo = 4000; p.nReo = 4000;
if(nSortType) if(nSortType && nSortType < 4)
p.fCountOnes = true; p.fCountOnes = true;
this->man = new Man(Gia_ManCiNum(pGia), p); this->man = new Man(Gia_ManCiNum(pGia), p);
ImportAig(pGia); ImportAig(pGia);
......
...@@ -42586,7 +42586,7 @@ usage: ...@@ -42586,7 +42586,7 @@ usage:
int Abc_CommandAbc9Transduction( Abc_Frame_t * pAbc, int argc, char ** argv ) int Abc_CommandAbc9Transduction( Abc_Frame_t * pAbc, int argc, char ** argv )
{ {
Gia_Man_t * pTemp, * pExdc = NULL; Gia_Man_t * pTemp, * pExdc = NULL;
int c, nType = 8, fMspf = 1, nRandom = 0, nSortType = 0, nPiShuffle = 0, nParameter = 0, fLevel = 0, fTruth = 0, fNewLine = 0, nVerbose = 0; int c, nType = 1, fMspf = 0, nRandom = 0, nSortType = 0, nPiShuffle = 0, nParameter = 0, fLevel = 0, fTruth = 0, fNewLine = 0, nVerbose = 2;
Extra_UtilGetoptReset(); Extra_UtilGetoptReset();
while ( ( c = Extra_UtilGetopt( argc, argv, "TSIPRVtmnl" ) ) != EOF ) while ( ( c = Extra_UtilGetopt( argc, argv, "TSIPRVtmnl" ) ) != EOF )
{ {
...@@ -42692,7 +42692,7 @@ int Abc_CommandAbc9Transduction( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -42692,7 +42692,7 @@ int Abc_CommandAbc9Transduction( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fLevel && (nType == 3 || nType == 8) ) if ( fLevel && (nType == 3 || nType == 8) )
{ {
Abc_Print( -1, "Level preserving optimization does not work with type 3 and 8.\n" ); Abc_Print( -1, "Level preserving optimization does not work with transduction type 3 and 8.\n" );
return 1; return 1;
} }
...@@ -42715,12 +42715,17 @@ usage: ...@@ -42715,12 +42715,17 @@ usage:
Abc_Print( -2, "\t 3: ResubShared\n" ); Abc_Print( -2, "\t 3: ResubShared\n" );
Abc_Print( -2, "\t 4: repeat Resub\n" ); Abc_Print( -2, "\t 4: repeat Resub\n" );
Abc_Print( -2, "\t 5: repeat ResubMono\n" ); Abc_Print( -2, "\t 5: repeat ResubMono\n" );
Abc_Print( -2, "\t 6: RepeatResubInner\n" ); Abc_Print( -2, "\t 6: script RepeatInner\n" );
Abc_Print( -2, "\t 7: RepeatResubOuter\n" ); Abc_Print( -2, "\t 7: script RepeatOuter\n" );
Abc_Print( -2, "\t 8: Optimize\n" ); Abc_Print( -2, "\t 8: script RepeatAll\n" );
Abc_Print( -2, "\t-S num : fanin sort type [default = %d]\n", nSortType ); Abc_Print( -2, "\t-S num : fanin sort type [default = %d]\n", nSortType );
Abc_Print( -2, "\t-I num : random seed to shuffle pis (0 = no shuffle) [default = %d]\n", nPiShuffle ); Abc_Print( -2, "\t 0: topological order\n" );
Abc_Print( -2, "\t-P num : internal parameter [default = %d]\n", nParameter ); Abc_Print( -2, "\t 1: number of ones\n" );
Abc_Print( -2, "\t 2: number of ones before complemented edges\n" );
Abc_Print( -2, "\t 3: pseudo random\n" );
Abc_Print( -2, "\t 4: no sorting\n" );
Abc_Print( -2, "\t-I num : random seed to shuffle PIs (0 = no shuffle) [default = %d]\n", nPiShuffle );
Abc_Print( -2, "\t-P num : parameters for scripts [default = %d]\n", nParameter );
Abc_Print( -2, "\t-R num : random seed to set all parameters (0 = no random) ([default = %d]\n", nRandom ); Abc_Print( -2, "\t-R num : random seed to set all parameters (0 = no random) ([default = %d]\n", nRandom );
Abc_Print( -2, "\t-V num : verbosity level [default = %d]\n", nVerbose); Abc_Print( -2, "\t-V num : verbosity level [default = %d]\n", nVerbose);
Abc_Print( -2, "\t-t : toggles using truth table instead of BDD [default = %s]\n", fTruth? "yes": "no" ); Abc_Print( -2, "\t-t : toggles using truth table instead of BDD [default = %s]\n", fTruth? "yes": "no" );
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