diff options
Diffstat (limited to 'ext/mcpat/main.cc')
-rw-r--r-- | ext/mcpat/main.cc | 114 |
1 files changed, 62 insertions, 52 deletions
diff --git a/ext/mcpat/main.cc b/ext/mcpat/main.cc index 8acce8d23..ec266f386 100644 --- a/ext/mcpat/main.cc +++ b/ext/mcpat/main.cc @@ -2,6 +2,7 @@ * McPAT * SOFTWARE LICENSE AGREEMENT * Copyright 2012 Hewlett-Packard Development Company, L.P. + * Copyright (c) 2010-2013 Advanced Micro Devices, Inc. * All Rights Reserved * * Redistribution and use in source and binary forms, with or without @@ -25,15 +26,17 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.” + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ***************************************************************************/ +#include <sys/stat.h> + +#include <cassert> #include <iostream> -#include "XML_Parse.h" -#include "globalvar.h" +#include "basic_components.h" #include "io.h" -#include "processor.h" +#include "system.h" #include "version.h" #include "xmlParser.h" @@ -41,61 +44,68 @@ using namespace std; void print_usage(char * argv0); -int main(int argc,char *argv[]) -{ - char * fb ; - bool infile_specified = false; - int plevel = 2; - opt_for_clk =true; - //cout.precision(10); - if (argc <= 1 || argv[1] == string("-h") || argv[1] == string("--help")) - { - print_usage(argv[0]); - } +int main(int argc, char *argv[]) { + char* xml_file = NULL; + int plevel = 2; - for (int32_t i = 0; i < argc; i++) - { - if (argv[i] == string("-infile")) - { - infile_specified = true; - i++; - fb = argv[ i]; - } - - if (argv[i] == string("-print_level")) - { - i++; - plevel = atoi(argv[i]); - } - - if (argv[i] == string("-opt_for_clk")) - { - i++; - opt_for_clk = (bool)atoi(argv[i]); - } - } - if (infile_specified == false) - { - print_usage(argv[0]); + for (int32_t i = 0; i < argc; i++) { + if (argv[i] == string("-infile")) { + xml_file = argv[++i]; + + } else if (argv[i] == string("-print_level")) { + plevel = atoi(argv[++i]); + + } else if (argv[i] == string("-opt_for_clk")) { + McPATComponent::opt_for_clk = (bool)atoi(argv[++i]); } + } + + // Ensure that the XML file was specified + if (xml_file == NULL) { + cerr << "ERROR: Please specify infile\n\n"; + print_usage(argv[0]); + } + + // Ensure that the XML file exists + struct stat file_info; + if (stat(xml_file, &file_info)) { + cerr << "ERROR: File not found: " << xml_file << endl << endl; + print_usage(argv[0]); + } + + cout << "McPAT (version " << VER_MAJOR << "." << VER_MINOR + << " of " << VER_UPDATE << ") is computing the target processor...\n " + << endl; + + // Parse the XML input file + XMLNode xml_data = XMLNode::openFileHelper(xml_file, "component"); + unsigned int num_children = xml_data.nChildNode("component"); + assert(num_children == 1); + XMLNode system_xml = xml_data.getChildNode("component"); + assert(strcmp(system_xml.getAttribute("type"), "System") == 0); + + // Recursively instantiate the system hierarchy + System* system = new System(&system_xml); + + // Recursively compute chip area + system->computeArea(); + + // Recursively compute the power consumed + system->computeEnergy(); + // Recursively output the computed values + system->displayData(2, plevel); - cout<<"McPAT (version "<< VER_MAJOR <<"."<< VER_MINOR - << " of " << VER_UPDATE << ") is computing the target processor...\n "<<endl; + // Clean up + delete system; + return 0; - //parse XML-based interface - ParseXML *p1= new ParseXML(); - p1->parse(fb); - Processor proc(p1); - proc.displayEnergy(2, plevel); - delete p1; - return 0; } -void print_usage(char * argv0) -{ +void print_usage(char * argv0) { cerr << "How to use McPAT:" << endl; - cerr << " mcpat -infile <input file name> -print_level < level of details 0~5 > -opt_for_clk < 0 (optimize for ED^2P only)/1 (optimzed for target clock rate)>"<< endl; - //cerr << " Note:default print level is at processor level, please increase it to see the details" << endl; + cerr << " mcpat -infile <input file name> -print_level < " + << "level of details 0~5 > -opt_for_clk < 0 (optimize for ED^2P " + << "only)/1 (optimzed for target clock rate)>" << endl; exit(1); } |