Skip to content

Commit 68c576c

Browse files
authored
Merge pull request berkeley-abc#400 from MyskYko/rrr
update rrr
2 parents 3846c19 + 27f2429 commit 68c576c

File tree

14 files changed

+1337
-314
lines changed

14 files changed

+1337
-314
lines changed

src/aig/gia/gia.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1808,7 +1808,7 @@ extern Gia_Man_t * Gia_ManTransductionBdd( Gia_Man_t * pGia, int nType,
18081808
extern Gia_Man_t * Gia_ManTransductionTt( Gia_Man_t * pGia, int nType, int fMspf, int nRandom, int nSortType, int nPiShuffle, int nParameter, int fLevel, Gia_Man_t * pExdc, int fNewLine, int nVerbose );
18091809

18101810
/*=== giaRrr.cpp ===========================================================*/
1811-
extern Gia_Man_t * Gia_ManRrr( Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int nSchedulerVerbose, int nPartitionerVerbose, int nOptimizerVerbose, int nAnalyzerVerbose, int nSimulatorVerbose, int nSatSolverVerbose, int fUseBddCspf, int fUseBddMspf, int nConflictLimit, int nSortType, int nOptimizerFlow, int nSchedulerFlow, int nDistance, int nRestarts, int nThreads, int nWindowSize, int fDeterministic );
1811+
extern Gia_Man_t * Gia_ManRrr( Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int nSchedulerVerbose, int nPartitionerVerbose, int nOptimizerVerbose, int nAnalyzerVerbose, int nSimulatorVerbose, int nSatSolverVerbose, int fUseBddCspf, int fUseBddMspf, int nConflictLimit, int nSortType, int nOptimizerFlow, int nSchedulerFlow, int nPartitionType, int nDistance, int nJobs, int nThreads, int nPartitionSize, int nPartitionSizeMin, int fDeterministic, int nParallelPartitions, int fOptOnInsert, int fGreedy );
18121812

18131813
/*=== giaCTas.c ===========================================================*/
18141814
typedef struct Tas_Man_t_ Tas_Man_t;

src/aig/gia/giaRrr.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
ABC_NAMESPACE_IMPL_START
77

8-
Gia_Man_t *Gia_ManRrr(Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int nSchedulerVerbose, int nPartitionerVerbose, int nOptimizerVerbose, int nAnalyzerVerbose, int nSimulatorVerbose, int nSatSolverVerbose, int fUseBddCspf, int fUseBddMspf, int nConflictLimit, int nSortType, int nOptimizerFlow, int nSchedulerFlow, int nDistance, int nRestarts, int nThreads, int nWindowSize, int fDeterministic) {
8+
Gia_Man_t *Gia_ManRrr(Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int nSchedulerVerbose, int nPartitionerVerbose, int nOptimizerVerbose, int nAnalyzerVerbose, int nSimulatorVerbose, int nSatSolverVerbose, int fUseBddCspf, int fUseBddMspf, int nConflictLimit, int nSortType, int nOptimizerFlow, int nSchedulerFlow, int nPartitionType, int nDistance, int nJobs, int nThreads, int nPartitionSize, int nPartitionSizeMin, int fDeterministic, int nParallelPartitions, int fOptOnInsert, int fGreedy) {
99
rrr::AndNetwork ntk;
1010
ntk.Read(pGia, rrr::GiaReader<rrr::AndNetwork>);
1111
rrr::Parameter Par;
@@ -24,11 +24,16 @@ Gia_Man_t *Gia_ManRrr(Gia_Man_t *pGia, int iSeed, int nWords, int nTimeout, int
2424
Par.nSortType = nSortType;
2525
Par.nOptimizerFlow = nOptimizerFlow;
2626
Par.nSchedulerFlow = nSchedulerFlow;
27+
Par.nPartitionType = nPartitionType;
2728
Par.nDistance = nDistance;
28-
Par.nRestarts = nRestarts;
29+
Par.nJobs = nJobs;
2930
Par.nThreads = nThreads;
30-
Par.nWindowSize = nWindowSize;
31+
Par.nPartitionSize = nPartitionSize;
32+
Par.nPartitionSizeMin = nPartitionSizeMin;
3133
Par.fDeterministic = fDeterministic;
34+
Par.nParallelPartitions = nParallelPartitions;
35+
Par.fOptOnInsert = fOptOnInsert;
36+
Par.fGreedy = fGreedy;
3237
rrr::Perform(&ntk, &Par);
3338
Gia_Man_t *pNew = rrr::CreateGia(&ntk);
3439
return pNew;

src/base/abci/abc.c

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46147,9 +46147,9 @@ int Abc_CommandAbc9Rrr( Abc_Frame_t * pAbc, int argc, char ** argv )
4614746147
{
4614846148
Gia_Man_t *pNew;
4614946149
int c;
46150-
int iSeed = 0, nWords = 10, nTimeout = 0, nSchedulerVerbose = 1, nPartitionerVerbose = 0, nOptimizerVerbose = 0, nAnalyzerVerbose = 0, nSimulatorVerbose = 0, nSatSolverVerbose = 0, fUseBddCspf = 0, fUseBddMspf = 0, nConflictLimit = 0, nSortType = 12, nOptimizerFlow = 0, nSchedulerFlow = 0, nDistance = 0, nRestarts = 0, nThreads = 1, nWindowSize = 0, fDeterministic = 1;
46150+
int iSeed = 0, nWords = 10, nTimeout = 0, nSchedulerVerbose = 1, nPartitionerVerbose = 0, nOptimizerVerbose = 0, nAnalyzerVerbose = 0, nSimulatorVerbose = 0, nSatSolverVerbose = 0, fUseBddCspf = 0, fUseBddMspf = 0, nConflictLimit = 0, nSortType = -1, nOptimizerFlow = 0, nSchedulerFlow = 0, nPartitionType = 0, nDistance = 0, nJobs = 1, nThreads = 1, nPartitionSize = 0, nPartitionSizeMin = 0, fDeterministic = 1, nParallelPartitions = 1, fOptOnInsert = 0, fGreedy = 1;
4615146151
Extra_UtilGetoptReset();
46152-
while ( ( c = Extra_UtilGetopt( argc, argv, "XYNJKDRWTCGVPOAQSabdh" ) ) != EOF )
46152+
while ( ( c = Extra_UtilGetopt( argc, argv, "XYZNJKLBDRWTCGVPOAQSabdegh" ) ) != EOF )
4615346153
{
4615446154
switch ( c )
4615546155
{
@@ -46161,16 +46161,28 @@ int Abc_CommandAbc9Rrr( Abc_Frame_t * pAbc, int argc, char ** argv )
4616146161
nSchedulerFlow = atoi(argv[globalUtilOptind]);
4616246162
globalUtilOptind++;
4616346163
break;
46164+
case 'Z':
46165+
nPartitionType = atoi(argv[globalUtilOptind]);
46166+
globalUtilOptind++;
46167+
break;
4616446168
case 'N':
46165-
nRestarts = atoi(argv[globalUtilOptind]);
46169+
nJobs = atoi(argv[globalUtilOptind]);
4616646170
globalUtilOptind++;
4616746171
break;
4616846172
case 'J':
4616946173
nThreads = atoi(argv[globalUtilOptind]);
4617046174
globalUtilOptind++;
4617146175
break;
4617246176
case 'K':
46173-
nWindowSize = atoi(argv[globalUtilOptind]);
46177+
nPartitionSize = atoi(argv[globalUtilOptind]);
46178+
globalUtilOptind++;
46179+
break;
46180+
case 'L':
46181+
nPartitionSizeMin = atoi(argv[globalUtilOptind]);
46182+
globalUtilOptind++;
46183+
break;
46184+
case 'B':
46185+
nParallelPartitions = atoi(argv[globalUtilOptind]);
4617446186
globalUtilOptind++;
4617546187
break;
4617646188
case 'D':
@@ -46230,6 +46242,12 @@ int Abc_CommandAbc9Rrr( Abc_Frame_t * pAbc, int argc, char ** argv )
4623046242
case 'd':
4623146243
fDeterministic ^= 1;
4623246244
break;
46245+
case 'e':
46246+
fOptOnInsert ^= 1;
46247+
break;
46248+
case 'g':
46249+
fGreedy ^= 1;
46250+
break;
4623346251
case 'h':
4623446252
goto usage;
4623546253
default:
@@ -46248,32 +46266,38 @@ int Abc_CommandAbc9Rrr( Abc_Frame_t * pAbc, int argc, char ** argv )
4624846266
return 1;
4624946267
}
4625046268

46251-
pNew = Gia_ManRrr( pAbc->pGia, iSeed, nWords, nTimeout, nSchedulerVerbose, nPartitionerVerbose, nOptimizerVerbose, nAnalyzerVerbose, nSimulatorVerbose, nSatSolverVerbose, fUseBddCspf, fUseBddMspf, nConflictLimit, nSortType, nOptimizerFlow, nSchedulerFlow, nDistance, nRestarts, nThreads, nWindowSize, fDeterministic );
46269+
pNew = Gia_ManRrr( pAbc->pGia, iSeed, nWords, nTimeout, nSchedulerVerbose, nPartitionerVerbose, nOptimizerVerbose, nAnalyzerVerbose, nSimulatorVerbose, nSatSolverVerbose, fUseBddCspf, fUseBddMspf, nConflictLimit, nSortType, nOptimizerFlow, nSchedulerFlow, nPartitionType, nDistance, nJobs, nThreads, nPartitionSize, nPartitionSizeMin, fDeterministic, nParallelPartitions, fOptOnInsert, fGreedy );
4625246270

4625346271
Abc_FrameUpdateGia( pAbc, pNew );
4625446272

4625546273
return 0;
4625646274

4625746275
usage:
46258-
Abc_Print( -2, "usage: rrr [-XYNJKDRWTCGVPOAQS num] [-abdh]\n" );
46276+
Abc_Print( -2, "usage: rrr [-XYZNJKLBDRWTCGVPOAQS num] [-abdegh]\n" );
4625946277
Abc_Print( -2, "\t perform optimization\n" );
4626046278
Abc_Print( -2, "\t-X num : method [default = %d]\n", nOptimizerFlow );
4626146279
Abc_Print( -2, "\t 0: single-add resub\n" );
4626246280
Abc_Print( -2, "\t 1: multi-add resub\n" );
4626346281
Abc_Print( -2, "\t 2: repeat 0 and 1\n" );
46282+
Abc_Print( -2, "\t 3: random one meaningful resub\n" );
4626446283
Abc_Print( -2, "\t-Y num : flow [default = %d]\n", nSchedulerFlow );
4626546284
Abc_Print( -2, "\t 0: apply method once\n" );
4626646285
Abc_Print( -2, "\t 1: iterate like transtoch\n" );
4626746286
Abc_Print( -2, "\t 2: iterate like deepsyn\n" );
46268-
Abc_Print( -2, "\t-N num : number of restarts or windows [default = %d]\n", nRestarts );
46287+
Abc_Print( -2, "\t-Z num : partition [default = %d]\n", nPartitionType );
46288+
Abc_Print( -2, "\t 0: distance base\n" );
46289+
Abc_Print( -2, "\t 1: level base\n" );
46290+
Abc_Print( -2, "\t-N num : number of jobs to create by restarting or partitioning [default = %d]\n", nJobs );
4626946291
Abc_Print( -2, "\t-J num : number of threads [default = %d]\n", nThreads );
46270-
Abc_Print( -2, "\t-K num : window size (0 = no partitioning) [default = %d]\n", nWindowSize );
46292+
Abc_Print( -2, "\t-K num : partition size (0 = no partitioning) [default = %d]\n", nPartitionSize );
46293+
Abc_Print( -2, "\t-K num : minimum partition size [default = %d]\n", nPartitionSizeMin );
46294+
Abc_Print( -2, "\t-B num : max number of partitions in parallel [default = %d]\n", nParallelPartitions );
4627146295
Abc_Print( -2, "\t-D num : distance between nodes (0 = no limit) [default = %d]\n", nDistance );
4627246296
Abc_Print( -2, "\t-R num : random number generator seed [default = %d]\n", iSeed );
4627346297
Abc_Print( -2, "\t-W num : number of simulation words [default = %d]\n", nWords );
4627446298
Abc_Print( -2, "\t-T num : timeout in seconds (0 = no timeout) [default = %d]\n", nTimeout );
4627546299
Abc_Print( -2, "\t-C num : conflict limit (0 = no limit) [default = %d]\n", nConflictLimit );
46276-
Abc_Print( -2, "\t-G num : fanin cost function [default = %d]\n", nSortType );
46300+
Abc_Print( -2, "\t-G num : fanin cost function (-1 = random) [default = %d]\n", nSortType );
4627746301
Abc_Print( -2, "\t-V num : scheduler verbosity level [default = %d]\n", nSchedulerVerbose );
4627846302
Abc_Print( -2, "\t-P num : partitioner verbosity level [default = %d]\n", nPartitionerVerbose );
4627946303
Abc_Print( -2, "\t-O num : optimizer verbosity level [default = %d]\n", nOptimizerVerbose );
@@ -46283,6 +46307,8 @@ int Abc_CommandAbc9Rrr( Abc_Frame_t * pAbc, int argc, char ** argv )
4628346307
Abc_Print( -2, "\t-a : use BDD-based analyzer (CSPF) [default = %s]\n", fUseBddCspf? "yes": "no" );
4628446308
Abc_Print( -2, "\t-b : use BDD-based analyzer (MSPF) [default = %s]\n", fUseBddMspf? "yes": "no" );
4628546309
Abc_Print( -2, "\t-d : ensure deterministic execution [default = %s]\n", fDeterministic? "yes": "no" );
46310+
Abc_Print( -2, "\t-e : apply c2rs; dc2 after importing changes of partitions [default = %s]\n", fOptOnInsert? "yes": "no" );
46311+
Abc_Print( -2, "\t-g : discard changes that increased the cost [default = %s]\n", fGreedy? "yes": "no" );
4628646312
Abc_Print( -2, "\t-h : print the command usage\n");
4628746313
return 1;
4628846314
}

src/opt/rrr/rrr.h

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include "rrrAnalyzer.h"
99
#include "rrrSatSolver.h"
1010
#include "rrrSimulator.h"
11+
#include "rrrPartitioner.h"
12+
#include "rrrLevelBasePartitioner.h"
1113

1214
ABC_NAMESPACE_CXX_HEADER_START
1315

@@ -16,15 +18,33 @@ namespace rrr {
1618
template <typename Ntk>
1719
void Perform(Ntk *pNtk, Parameter const *pPar) {
1820
assert(!pPar->fUseBddCspf || !pPar->fUseBddMspf);
19-
if(pPar->fUseBddCspf) {
20-
Scheduler<Ntk, rrr::Optimizer<Ntk, rrr::BddAnalyzer<Ntk>>> sch(pNtk, pPar);
21-
sch.Run();
22-
} else if(pPar->fUseBddMspf) {
23-
Scheduler<Ntk, rrr::Optimizer<Ntk, rrr::BddMspfAnalyzer<Ntk>>> sch(pNtk, pPar);
24-
sch.Run();
25-
} else {
26-
Scheduler<Ntk, rrr::Optimizer<Ntk, rrr::Analyzer<Ntk, rrr::Simulator<Ntk>, rrr::SatSolver<Ntk>>>> sch(pNtk, pPar);
27-
sch.Run();
21+
switch(pPar->nPartitionType) {
22+
case 0:
23+
if(pPar->fUseBddCspf) {
24+
Scheduler<Ntk, Optimizer<Ntk, BddAnalyzer<Ntk>>, Partitioner<Ntk>> sch(pNtk, pPar);
25+
sch.Run();
26+
} else if(pPar->fUseBddMspf) {
27+
Scheduler<Ntk, Optimizer<Ntk, BddMspfAnalyzer<Ntk>>, Partitioner<Ntk>> sch(pNtk, pPar);
28+
sch.Run();
29+
} else {
30+
Scheduler<Ntk, Optimizer<Ntk, Analyzer<Ntk, Simulator<Ntk>, SatSolver<Ntk>>>, Partitioner<Ntk>> sch(pNtk, pPar);
31+
sch.Run();
32+
}
33+
break;
34+
case 1:
35+
if(pPar->fUseBddCspf) {
36+
Scheduler<Ntk, Optimizer<Ntk, BddAnalyzer<Ntk>>, LevelBasePartitioner<Ntk>> sch(pNtk, pPar);
37+
sch.Run();
38+
} else if(pPar->fUseBddMspf) {
39+
Scheduler<Ntk, Optimizer<Ntk, BddMspfAnalyzer<Ntk>>, LevelBasePartitioner<Ntk>> sch(pNtk, pPar);
40+
sch.Run();
41+
} else {
42+
Scheduler<Ntk, Optimizer<Ntk, Analyzer<Ntk, Simulator<Ntk>, SatSolver<Ntk>>>, LevelBasePartitioner<Ntk>> sch(pNtk, pPar);
43+
sch.Run();
44+
}
45+
break;
46+
default:
47+
assert(0);
2848
}
2949
}
3050

0 commit comments

Comments
 (0)