#include "FPcommon.h"
#include "Annealer.h"
#include "CommandLine.h"
#include "ABKCommon/paramproc.h"
#include "ABKCommon/infolines.h"
Include dependency graph for FPEvalTest2.cxx:
Go to the source code of this file.
Functions | |
int | main (int argc, const char *argv[]) |
|
Definition at line 42 of file FPEvalTest2.cxx. References BoolParam::found(), NoParams::found(), Timer::getUserTime(), Timer::start(), and Timer::stop().
00043 { 00044 double currXSize; 00045 double currYSize; 00046 double currArea = -1e100; 00047 double lastArea; 00048 double currWS; 00049 double currWL; 00050 double currWLnoWts; 00051 double currAR=0; 00052 00053 BoolParam help1 ("h", argc, argv); 00054 BoolParam help2 ("help", argc, argv); 00055 NoParams noParams(argc,argv); // this acts as a flag 00056 Command_Line* params = new Command_Line(argc, argv); 00057 params->printAnnealerParams(); 00058 if (noParams.found() || help1.found() || help2.found()) 00059 { 00060 cerr<<"This test case test different functionalities\n" 00061 <<"Options \n" 00062 <<"FPEvalTest2.exe\n" 00063 <<"-f baseFileName\n" 00064 <<"-takePl (construct SP from existing floorplan)\n" 00065 <<"-initCompact (compact the initial solution)\n" 00066 <<"-soft (soft blocks in design. pack.)\n" 00067 <<"-plot (plot floorplan)\n" 00068 <<"-save (save in bookshelf floorplan format)\n" 00069 <<"-savePl (save only .pl file)\n" 00070 <<"-saveCapoPl (save .pl in Capo bookshelf format)\n" 00071 <<"-saveCapo (save design in Capo bookshelf format)\n"; 00072 exit (0); 00073 } 00074 00075 DB* db = new DB(params->inFileName); 00076 double blocksArea = db->getNodesArea(); 00077 00078 Annealer annealer(params, db); 00079 if(params->takePl) 00080 { 00081 //convert placement to sequence pair 00082 annealer.takeSPfromDB(); 00083 } 00084 00085 Timer T; 00086 T.stop(); 00087 double totalTime=0; 00088 T.start(0.0); 00089 for(unsigned iter=0; iter<10; ++iter) 00090 annealer.eval(); 00091 T.stop(); 00092 totalTime += T.getUserTime(); 00093 00094 currArea = annealer.getXSize()*annealer.getYSize(); 00095 annealer.evalSlacks(); 00096 00097 if(params->initCompact) 00098 { 00099 bool whichDir = 0; 00100 annealer.evalCompact(whichDir); 00101 do 00102 { 00103 whichDir = !whichDir; 00104 lastArea = currArea; 00105 annealer.takeSPfromDB(); 00106 annealer.evalCompact(whichDir); 00107 currArea = annealer.getXSize()*annealer.getYSize(); 00108 cout<<currArea<<"\t"<<lastArea<<endl; 00109 } 00110 while(int(currArea) < int(lastArea)); 00111 } 00112 00113 if(params->softBlocks) 00114 { 00115 annealer.packSoftBlocks(100); 00116 annealer.updatePlacement(); 00117 } 00118 00119 currXSize = annealer.getXSize(); 00120 currYSize = annealer.getYSize(); 00121 currArea = currXSize*currYSize; 00122 currWS = 100*(currArea - blocksArea)/blocksArea; 00123 currWL = db->evalHPWL(); 00124 currWLnoWts = db->evalHPWL(false); 00125 currAR = currXSize/currYSize; 00126 00127 if(params->plot) 00128 { 00129 currAR = currXSize/currYSize; 00130 bool plotSlacks = !params->plotNoSlacks; 00131 bool plotNets = !params->plotNoNets; 00132 bool plotNames = !params->plotNoNames; 00133 db->plot("out.plt", currArea, currWS, currAR, 0, 00134 currWL, plotSlacks, plotNets, plotNames); 00135 } 00136 00137 if(params->save) 00138 db->save(params->baseFile); 00139 00140 if(params->savePl) 00141 db->getNodes()->savePl(params->outPlFile); 00142 00143 if(params->saveCapoPl) 00144 db->getNodes()->saveCapoPl(params->capoPlFile); 00145 00146 if(params->saveCapo) 00147 db->saveCapo(params->capoBaseFile, params->reqdAR); 00148 00149 cout<<"Final Area: "<<currArea<<" WhiteSpace "<<currWS<<"%" 00150 <<" currAR "<<currAR<<" HPWL "<<currWL<<" Unweighted HPWL " 00151 <<currWLnoWts<<endl; 00152 cout<<"Time Taken "<<totalTime<<endl; 00153 00154 return 0; 00155 } |
Here is the call graph for this function: