#include <baseannealer.h>
Inheritance diagram for BaseAnnealer:
Public Types | |
enum | MOVE_TYPES { MISC = -1, NOOP = 0, REP_SPEC_MIN = 1, REP_SPEC_ORIENT = 2, REP_SPEC_MAX = 5, SLACKS_MOVE = 6, AR_MOVE = 7, ORIENT = 10, SOFT_BL = 11, HPWL = 12, ARWL = 13 } |
Public Member Functions | |
BaseAnnealer (const parquetfp::Command_Line *const params, parquetfp::DB *const db) | |
virtual | ~BaseAnnealer () |
virtual bool | go ()=0 |
virtual bool | packOneBlock ()=0 |
virtual void | takePlfromDB ()=0 |
virtual void | solveQP () |
virtual void | compactSoln ()=0 |
void | postHPWLOpt () |
void | printResults (const Timer &tm, const SolutionInfo &curr) const |
Public Attributes | |
double | annealTime |
Static Public Attributes | |
const int | UNINITIALIZED = -1 |
const unsigned int | UNSIGNED_UNINITIALIZED = 0 |
const int | FREE_OUTLINE = -9999 |
const int | NOT_FOUND = -1 |
Protected Member Functions | |
BaseAnnealer () | |
Protected Attributes | |
parquetfp::DB *const | _db |
const parquetfp::Command_Line *const | _params |
parquetfp::AnalytSolve *const | _analSolve |
char | _baseFileName [200] |
|
Definition at line 72 of file baseannealer.h.
00072 {MISC = -1, 00073 NOOP = 0, 00074 REP_SPEC_MIN = 1, // representation-specific 00075 REP_SPEC_ORIENT = 2, 00076 REP_SPEC_MAX = 5, 00077 SLACKS_MOVE = 6, 00078 AR_MOVE = 7, 00079 ORIENT = 10, 00080 SOFT_BL = 11, 00081 HPWL = 12, 00082 ARWL = 13}; |
|
Definition at line 66 of file baseannealer.cxx. References _baseFileName, _params, annealTime, Verbosity::forMajStats, parquetfp::Command_Line::getSeed, parquetfp::Command_Line::inFileName, parquetfp::Command_Line::seed, and parquetfp::Command_Line::verb.
00068 : _db(db), 00069 _params(params), 00070 _analSolve(new parquetfp::AnalytSolve( 00071 const_cast<parquetfp::Command_Line*>(params), 00072 const_cast<parquetfp::DB*>(db))) 00073 { 00074 // set the random seed for each invokation of the Annealer 00075 int rseed; 00076 if(_params->getSeed) 00077 rseed = int(time((time_t *)NULL)); 00078 else 00079 rseed = _params->seed; 00080 00081 srand(rseed); //seed for rand function 00082 srand48(rseed); //seed for random_shuffle function 00083 if(_params->verb.forMajStats > 0) 00084 cout << "The random seed for this run is: " << rseed << endl; 00085 00086 const char* baseName = _params->inFileName; 00087 strcpy(_baseFileName, baseName); 00088 annealTime = 0.0; 00089 } |
|
Definition at line 91 of file baseannealer.cxx. References _analSolve.
00092 { 00093 if (_analSolve != NULL) 00094 delete _analSolve; 00095 } |
|
Definition at line 108 of file baseannealer.h. References _analSolve, _db, and _params.
00109 : _db(NULL), _params(NULL), _analSolve(NULL) {} |
|
Implemented in parquetfp::Annealer, and BTreeAreaWireAnnealer. Referenced by parquetfp::SolveMulti::go(), and Parquet::go(). |
|
Implemented in parquetfp::Annealer, and BTreeAreaWireAnnealer. Referenced by parquetfp::SolveMulti::go(), Parquet::go(), and parquetfp::SolveMulti::placeSubBlocks(). |
|
Implemented in parquetfp::Annealer, and BTreeAreaWireAnnealer. |
|
Definition at line 103 of file baseannealer.cxx. References _db, _params, FREE_OUTLINE, parquetfp::DB::getNodesArea(), parquetfp::Command_Line::maxWS, parquetfp::Command_Line::reqdAR, and parquetfp::DB::shiftOptimizeDesign(). Referenced by Parquet::go().
00104 { 00105 // parquetfp::Point offset = _analSolve->getDesignOptLoc(); 00106 // cout << "offset.x " << offset.x 00107 // << " offset.y " << offset.y << endl; 00108 00109 // double initHPWL = _db->evalHPWL(); 00110 // cout << "initHPWL: " << initHPWL << endl; 00111 // _db->shiftDesign(offset); 00112 00113 // double afterHPWL = _db->evalHPWL(); 00114 // cout << "afterHPWL: " << afterHPWL << endl; 00115 // if(afterHPWL > initHPWL) 00116 // { 00117 // cout << "shifting not done." << endl; 00118 // offset.x *= -1; 00119 // offset.y *= -1; 00120 // _db->shiftDesign(offset); 00121 // } 00122 // else 00123 // cout << "shifting is done." << endl; 00124 00125 // only shift in "fixed-outline" mode 00126 if (_params->reqdAR != FREE_OUTLINE) 00127 { 00128 double blocksArea = _db->getNodesArea(); 00129 double reqdAR = _params->reqdAR; 00130 double reqdArea = blocksArea * (1 + _params->maxWS/100.0); 00131 double reqdWidth = sqrt(reqdArea * reqdAR); 00132 double reqdHeight = sqrt(reqdArea / reqdAR); 00133 00134 // printf("blocksArea: %.2f reqdWidth: %.2f reqdHeight: %.2f\n", 00135 // blocksArea, reqdWidth, reqdHeight); 00136 _db->shiftOptimizeDesign(reqdWidth, reqdHeight); 00137 } 00138 } |
Here is the call graph for this function:
|
Definition at line 140 of file baseannealer.cxx. References _db, _params, BaseAnnealer::SolutionInfo::area, parquetfp::Command_Line::dontClusterMacros, Verbosity::forMajStats, Verbosity::forSysRes, FREE_OUTLINE, parquetfp::DB::getNodesArea(), Timer::getRealTime(), Timer::getUserTime(), parquetfp::DB::getXSizeWMacroOnly(), parquetfp::DB::getYSizeWMacroOnly(), BaseAnnealer::SolutionInfo::height, BaseAnnealer::SolutionInfo::HPWL, HPWL, parquetfp::Command_Line::maxWS, parquetfp::Command_Line::reqdAR, parquetfp::Command_Line::solveTop, parquetfp::Command_Line::verb, and BaseAnnealer::SolutionInfo::width. Referenced by BTreeAreaWireAnnealer::go(), and parquetfp::Annealer::go().
00142 { 00143 double timeReqd = tm.getUserTime(); 00144 double realTime = tm.getRealTime(); 00145 00146 double blocksArea = _db->getNodesArea(); 00147 double currArea = curr.area; 00148 double currWidth = curr.width; 00149 double currHeight = curr.height; 00150 double currAR = currWidth / currHeight; 00151 double whiteSpace = 100 * (currArea - blocksArea) / blocksArea; 00152 double HPWL = curr.HPWL; 00153 00154 cout.precision(6); 00155 if(_params->verb.forSysRes > 0) 00156 cout << "realTime:" << realTime << "\tuserTime:" << timeReqd << endl; 00157 if(_params->verb.forMajStats > 0) 00158 cout << "Final Area: " << currArea << " WhiteSpace " << whiteSpace 00159 << "%" << " AR " << currAR << " HPWL " << HPWL << endl; 00160 00161 double reqdAR = _params->reqdAR; 00162 double reqdArea = blocksArea * (1 + _params->maxWS/100.0); 00163 double reqdWidth = sqrt(reqdArea * reqdAR); 00164 double reqdHeight = sqrt(reqdArea / reqdAR); 00165 00166 if(_params->verb.forMajStats > 0) 00167 { 00168 if (_params->dontClusterMacros && _params->solveTop) 00169 cout << "width w/ macros only: " 00170 << _db->getXSizeWMacroOnly() << " "; 00171 else 00172 cout << "width: " << currWidth << " "; 00173 00174 if (_params->reqdAR != FREE_OUTLINE) 00175 cout << "(outline width: " << reqdWidth << ") "; 00176 cout << endl; 00177 00178 if (_params->dontClusterMacros && _params->solveTop) 00179 cout << "height w/ macros only: " 00180 << _db->getYSizeWMacroOnly() << " "; 00181 else 00182 cout << "height: " << currHeight << " "; 00183 00184 if (_params->reqdAR != FREE_OUTLINE) 00185 cout << "(outline height: " << reqdHeight << ") "; 00186 cout << endl; 00187 00188 cout << "area utilization (wrt. total current area): " 00189 << (blocksArea / currArea) * 100 << "%." << endl; 00190 cout << "whitespace (wrt. total current area): " 00191 << (1 - (blocksArea/currArea)) * 100 << "% " << endl; 00192 } 00193 } |
Here is the call graph for this function:
|
Definition at line 97 of file baseannealer.cxx. References _analSolve, _db, parquetfp::AnalytSolve::getXLocs(), parquetfp::AnalytSolve::getYLocs(), parquetfp::AnalytSolve::solveSOR(), and parquetfp::DB::updatePlacement(). Referenced by parquetfp::SolveMulti::go().
00098 { 00099 _analSolve->solveSOR(); 00100 _db->updatePlacement(_analSolve->getXLocs(), _analSolve->getYLocs()); 00101 } |
Here is the call graph for this function:
|
Implemented in parquetfp::Annealer, and BTreeAreaWireAnnealer. Referenced by parquetfp::SolveMulti::go(), and Parquet::go(). |
|
Definition at line 105 of file baseannealer.h. Referenced by BaseAnnealer(), BTreeAreaWireAnnealer::locateSearchBlocks(), parquetfp::Annealer::makeARWLMove(), parquetfp::Annealer::makeHPWLMove(), solveQP(), and ~BaseAnnealer(). |
|
Definition at line 106 of file baseannealer.h. Referenced by BaseAnnealer(). |
|
|
|
Definition at line 100 of file baseannealer.h. Referenced by BaseAnnealer(), parquetfp::SolveMulti::go(), BTreeAreaWireAnnealer::go(), and parquetfp::Annealer::go(). |
|
Definition at line 62 of file baseannealer.cxx. Referenced by BTreeAreaWireAnnealer::anneal(), Parquet::go(), BTreeAreaWireAnnealer::packOneBlock(), postHPWLOpt(), parquetfp::Command_Line::printAnnealerParams(), and printResults(). |
|
Definition at line 63 of file baseannealer.cxx. Referenced by BTreeAreaWireAnnealer::getSoftBlIndex(), and BTreeAreaWireAnnealer::makeSoftBlMove(). |
|
Definition at line 60 of file baseannealer.cxx. Referenced by BTreeAreaWireAnnealer::anneal(). |
|
Definition at line 61 of file baseannealer.cxx. Referenced by BTreeAreaWireAnnealer::anneal(), BTreeAreaWireAnnealer::makeARWLMove(), BTreeAreaWireAnnealer::makeHPWLMove(), and BTreeAreaWireAnnealer::makeMove(). |