Main Page | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound Members | File Members

FPEvalTest3.cxx

Go to the documentation of this file.
00001 /**************************************************************************
00002 ***    
00003 *** Copyright (c) 1995-2000 Regents of the University of California,
00004 ***               Andrew E. Caldwell, Andrew B. Kahng and Igor L. Markov
00005 *** Copyright (c) 2000-2004 Regents of the University of Michigan,
00006 ***               Saurabh N. Adya, Jarrod A. Roy and Igor L. Markov
00007 ***
00008 ***  Contact author(s): abk@cs.ucsd.edu, imarkov@umich.edu
00009 ***  Original Affiliation:   UCLA, Computer Science Department,
00010 ***                          Los Angeles, CA 90095-1596 USA
00011 ***
00012 ***  Permission is hereby granted, free of charge, to any person obtaining 
00013 ***  a copy of this software and associated documentation files (the
00014 ***  "Software"), to deal in the Software without restriction, including
00015 ***  without limitation 
00016 ***  the rights to use, copy, modify, merge, publish, distribute, sublicense, 
00017 ***  and/or sell copies of the Software, and to permit persons to whom the 
00018 ***  Software is furnished to do so, subject to the following conditions:
00019 ***
00020 ***  The above copyright notice and this permission notice shall be included
00021 ***  in all copies or substantial portions of the Software.
00022 ***
00023 *** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
00024 *** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
00025 *** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
00026 *** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
00027 *** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
00028 *** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
00029 *** THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00030 ***
00031 ***
00032 ***************************************************************************/
00033 
00034 
00035 #include "FPcommon.h"
00036 #include "Annealer.h"
00037 #include "CommandLine.h"
00038 #include "ABKCommon/paramproc.h"
00039 #include "ABKCommon/infolines.h"
00040 using namespace parquetfp;
00041 
00042 int main(int argc, const char *argv[])
00043 {
00044            double currXSize;
00045            double currYSize;
00046            double currArea;
00047            double currWS;
00048            double currWL;
00049            double currWLnoWts;
00050            double currAR=0;
00051 
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 analytical techniques\n"
00061                    <<"Options \n"
00062                    <<"FPEvalTest3.exe\n"
00063                    <<"-f baseFileName\n"
00064                    <<"-initQP   (initial SP is constructed from quadratic min WL)\n"
00065                    <<"-plot     (plot floorplan)\n"
00066                    <<"-save     (save in bookshelf floorplan format)\n"
00067                    <<"-savePl   (save only .pl file)\n"
00068                    <<"-saveCapoPl (save .pl in Capo bookshelf format)\n"
00069                    <<"-saveCapo  (save design in Capo bookshelf format)\n";
00070                exit (0);
00071              }  
00072         
00073            DB* db = new DB(params->inFileName);
00074            double blocksArea = db->getNodesArea();
00075            
00076            Annealer annealer(params, db);
00077            annealer.solveQP();
00078            if(params->initQP)
00079             {
00080              annealer.takeSPfromDB();
00081              annealer.eval();
00082              
00083              currXSize = annealer.getXSize();
00084              currYSize = annealer.getYSize();
00085              currArea = currXSize*currYSize;
00086             }
00087            else
00088             {
00089               currXSize = db->getXSize();
00090               currYSize = db->getYSize();
00091               currArea = db->evalArea();
00092             }
00093                                                        
00094            currWS = 100*(currArea - blocksArea)/blocksArea;
00095            currWL = db->evalHPWL();
00096            currWLnoWts = db->evalHPWL(false);
00097 
00098            if(params->plot)
00099             {
00100               currAR = currXSize/currYSize;
00101               bool plotSlacks = !params->plotNoSlacks;
00102               bool plotNets = !params->plotNoNets;
00103               bool plotNames = !params->plotNoNames;
00104               db->plot("out.plt", currArea, currWS, currAR, 0, 
00105                         currWL, plotSlacks, plotNets, plotNames);
00106             }
00107             
00108            if(params->savePl)
00109              db->getNodes()->savePl(params->outPlFile);
00110                               
00111            if(params->saveCapoPl)
00112              db->getNodes()->saveCapoPl(params->capoPlFile);
00113 
00114            if(params->saveCapo)
00115              db->saveCapo(params->capoBaseFile, params->reqdAR);
00116 
00117            if(params->save)
00118              db->save(params->baseFile);
00119 
00120            cout<<"Final Area: "<<currArea<<" WhiteSpace "<<currWS<<"%"
00121                <<" currAR "<<currAR<<" HPWL "<<currWL<<" Unweighted HPWL "
00122                <<currWLnoWts<<endl;
00123           
00124         return 0;
00125 }

Generated on Mon Apr 25 01:09:24 2005 for Parquete by doxygen 1.3.2