summaryrefslogtreecommitdiff
path: root/ext/mcpat/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mcpat/main.cc')
-rw-r--r--ext/mcpat/main.cc114
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);
}