ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
rrr::Optimizer< Ntk, Ana > Class Template Reference

#include <rrrOptimizer.h>

Classes

struct  Stats
 

Public Member Functions

 Optimizer (Parameter const *pPar, std::function< double(Ntk *)> CostFunction)
 
void AssignNetwork (Ntk *pNtk_, bool fReuse=false)
 
void SetPrintLine (std::function< void(std::string)> const &PrintLine_)
 
void Run (int iSeed=0, seconds nTimeout_=0)
 
void ResetSummary ()
 
summary< int > GetStatsSummary () const
 
summary< double > GetTimesSummary () const
 

Detailed Description

template<typename Ntk, typename Ana>
class rrr::Optimizer< Ntk, Ana >

Definition at line 17 of file rrrOptimizer.h.

Constructor & Destructor Documentation

◆ Optimizer()

template<typename Ntk, typename Ana>
rrr::Optimizer< Ntk, Ana >::Optimizer ( Parameter const * pPar,
std::function< double(Ntk *)> CostFunction )

Definition at line 1277 of file rrrOptimizer.h.

1277 :
1278 pNtk(NULL),
1279 nVerbose(pPar->nOptimizerVerbose),
1280 CostFunction(CostFunction),
1281 nSortTypeOriginal(pPar->nSortType),
1282 nSortType(pPar->nSortType),
1283 nFlow(pPar->nOptimizerFlow),
1284 nDistance(pPar->nDistance),
1285 fCompatible(pPar->fUseBddCspf),
1286 fGreedy(pPar->fGreedy),
1287 ana(pPar),
1288 target(-1) {
1289 }

Member Function Documentation

◆ AssignNetwork()

template<typename Ntk, typename Ana>
void rrr::Optimizer< Ntk, Ana >::AssignNetwork ( Ntk * pNtk_,
bool fReuse = false )

Definition at line 1292 of file rrrOptimizer.h.

1292 {
1293 pNtk = pNtk_;
1294 target = -1;
1296 ana.AssignNetwork(pNtk, fReuse);
1297 }
void AssignNetwork(Ntk *pNtk_, bool fReuse=false)

◆ GetStatsSummary()

template<typename Ntk, typename Ana>
summary< int > rrr::Optimizer< Ntk, Ana >::GetStatsSummary ( ) const

Definition at line 1441 of file rrrOptimizer.h.

1441 {
1443 for(auto const &entry: stats) {
1444 v.emplace_back("opt " + entry.first + " tried node", entry.second.nTried);
1445 v.emplace_back("opt " + entry.first + " tried fanin", entry.second.nTriedFis);
1446 v.emplace_back("opt " + entry.first + " added node", entry.second.nAdded);
1447 v.emplace_back("opt " + entry.first + " added fanin", entry.second.nAddedFis);
1448 v.emplace_back("opt " + entry.first + " changed", entry.second.nChanged);
1449 v.emplace_back("opt " + entry.first + " up", entry.second.nUps);
1450 v.emplace_back("opt " + entry.first + " eq", entry.second.nEqs);
1451 v.emplace_back("opt " + entry.first + " dn", entry.second.nDowns);
1452 }
1454 v.insert(v.end(), v2.begin(), v2.end());
1455 return v;
1456 }
summary< int > GetStatsSummary() const

◆ GetTimesSummary()

template<typename Ntk, typename Ana>
summary< double > rrr::Optimizer< Ntk, Ana >::GetTimesSummary ( ) const

Definition at line 1459 of file rrrOptimizer.h.

1459 {
1461 for(auto const &entry: stats) {
1462 v.emplace_back("opt " + entry.first + " add", entry.second.durationAdd);
1463 v.emplace_back("opt " + entry.first + " reduce", entry.second.durationReduce);
1464 }
1466 v.insert(v.end(), v2.begin(), v2.end());
1467 return v;
1468 }
summary< double > GetTimesSummary() const

◆ ResetSummary()

template<typename Ntk, typename Ana>
void rrr::Optimizer< Ntk, Ana >::ResetSummary ( )

Definition at line 1435 of file rrrOptimizer.h.

1435 {
1436 stats.clear();
1437 ana.ResetSummary();
1438 }

◆ Run()

template<typename Ntk, typename Ana>
void rrr::Optimizer< Ntk, Ana >::Run ( int iSeed = 0,
seconds nTimeout_ = 0 )

Definition at line 1309 of file rrrOptimizer.h.

1309 {
1310 rng.seed(iSeed);
1311 vRandPiOrder.clear();
1312 vRandCosts.clear();
1313 if(nSortTypeOriginal < 0) {
1314 nSortType = rng() % 18;
1315 Print(0, "fanin cost function =", nSortType);
1316 }
1317 nTimeout = nTimeout_;
1318 start = GetCurrentTime();
1319 switch(nFlow) {
1320 case 0:
1321 RemoveRedundancy();
1322 statsLocal.Reset();
1323 ApplyReverseTopologically([&](int id) {
1325 if(nDistance) {
1326 vCands = pNtk->GetNeighbors(id, true, nDistance);
1327 } else {
1328 vCands = pNtk->GetPisInts();
1329 }
1330 SingleResub(id, vCands);
1331 });
1332 stats["single"] += statsLocal;
1333 Print(0, statsLocal.GetString());
1334 break;
1335 case 1:
1336 RemoveRedundancy();
1337 statsLocal.Reset();
1338 ApplyReverseTopologically([&](int id) {
1340 if(nDistance) {
1341 vCands = pNtk->GetNeighbors(id, true, nDistance);
1342 } else {
1343 vCands = pNtk->GetPisInts();
1344 }
1345 MultiResub(id, vCands);
1346 });
1347 stats["multi"] += statsLocal;
1348 Print(0, statsLocal.GetString());
1349 break;
1350 case 2: {
1351 RemoveRedundancy();
1352 double dCost = CostFunction(pNtk);
1353 while(true) {
1354 statsLocal.Reset();
1355 ApplyReverseTopologically([&](int id) {
1357 if(nDistance) {
1358 vCands = pNtk->GetNeighbors(id, true, nDistance);
1359 } else {
1360 vCands = pNtk->GetPisInts();
1361 }
1362 SingleResub(id, vCands);
1363 });
1364 stats["single"] += statsLocal;
1365 Print(0, "single", ":", "cost", "=", CostFunction(pNtk), ",", statsLocal.GetString());
1366 statsLocal.Reset();
1367 ApplyReverseTopologically([&](int id) {
1369 if(nDistance) {
1370 vCands = pNtk->GetNeighbors(id, true, nDistance);
1371 } else {
1372 vCands = pNtk->GetPisInts();
1373 // vCands = pNtk->GetInts();
1374 }
1375 MultiResub(id, vCands);
1376 });
1377 stats["multi"] += statsLocal;
1378 Print(0, "multi ", ":", "cost", "=", CostFunction(pNtk), ",", statsLocal.GetString());
1379 double dNewCost = CostFunction(pNtk);
1380 if(dNewCost < dCost) {
1381 dCost = dNewCost;
1382 } else {
1383 break;
1384 }
1385 }
1386 break;
1387 }
1388 case 3: {
1389 RemoveRedundancy();
1391 if(!nDistance) {
1392 vCands = pNtk->GetPisInts();
1393 std::shuffle(vCands.begin(), vCands.end(), rng);
1394 }
1396 ApplyRandomlyStop([&](int id) {
1397 statsLocal.Reset();
1398 if(nDistance) {
1399 vCands = pNtk->GetNeighbors(id, true, nDistance);
1400 std::shuffle(vCands.begin(), vCands.end(), rng);
1401 }
1402 bool fChanged;
1403 if(rng() & 1) {
1404 fChanged = SingleResubStop(id, vCands);
1405 statsSingle += statsLocal;
1406 } else {
1407 fChanged = MultiResubStop(id, vCands);
1408 statsMulti += statsLocal;
1409 }
1410 return fChanged;
1411 });
1412 stats["single"] += statsSingle;
1413 stats["multi"] += statsMulti;
1414 Print(0, "single", ":", statsSingle.GetString());
1415 Print(0, "multi ", ":", statsMulti.GetString());
1416 break;
1417 }
1418 case 4: {
1419 RemoveRedundancy();
1420 ApplyCombinationSampledRandomlyStop(3, 100, [&](std::vector<int> const &vTargets) {
1421 return MultiTargetResub(vTargets);
1422 });
1423 break;
1424 }
1425 default:
1426 assert(0);
1427 }
1428 }
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:

◆ SetPrintLine()

template<typename Ntk, typename Ana>
void rrr::Optimizer< Ntk, Ana >::SetPrintLine ( std::function< void(std::string)> const & PrintLine_)

Definition at line 1300 of file rrrOptimizer.h.

1300 {
1301 PrintLine = PrintLine_;
1302 }

The documentation for this class was generated from the following file: