Bläddra i källkod

Add new cmdline options to controller

You can now specify the total number of nodes, the amount of memory per
node, and the number of repititions of the worklist you would like.
Ian Goldberg 14 år sedan
förälder
incheckning
edfd20a685
3 ändrade filer med 38 tillägg och 12 borttagningar
  1. 30 9
      controller.cc
  2. 2 1
      controller.h
  3. 6 2
      controller_main.cc

+ 30 - 9
controller.cc

@@ -758,23 +758,44 @@ static struct evconnlistener *controller_create(struct event_base *evbase,
 }
 
 int controller_parse_args(int argc, char **argv, unsigned short &bindport,
-    Worklist &worklist)
+    Worklist &worklist, unsigned short &total_nodes,
+    unsigned short &GB_mem_per_node)
 {
     bindport = 0;
-
-    if (argc > 2 && !strncmp(argv[1], "-p", 2)) {
-	// A port number was specified
-	bindport = strtoul(argv[2], NULL, 10);
-	argc -= 2;
-	argv += 2;
+    total_nodes = 0;
+    GB_mem_per_node = 0;
+    int reps = 1;
+
+    while (argc > 2 && argv[1][0] == '-') {
+	if (!strncmp(argv[1], "-p", 2)) {
+	    // A port number was specified
+	    bindport = strtoul(argv[2], NULL, 10);
+	    argc -= 2;
+	    argv += 2;
+	} else if (!strncmp(argv[1], "-n", 2)) {
+	    total_nodes = strtoul(argv[2], NULL, 10);
+	    argc -= 2;
+	    argv += 2;
+	} else if (!strncmp(argv[1], "-m", 2)) {
+	    GB_mem_per_node = strtoul(argv[2], NULL, 10);
+	    argc -= 2;
+	    argv += 2;
+	} else if (!strncmp(argv[1], "-r", 2)) {
+	    reps = strtoul(argv[2], NULL, 10);
+	    argc -= 2;
+	    argv += 2;
+	}
     }
 
     if (argc < 3 || (argc % 2 == 0)) {
 	return 1;
     }
 
-    for (int i=1;i<argc;i+=2) {
-	worklist.push_back(Workentry(argv[i], strtoul(argv[i+1], NULL, 10)));
+    for (int r=0;r<reps;++r) {
+	for (int i=1;i<argc;i+=2) {
+	    worklist.push_back(
+		Workentry(argv[i], strtoul(argv[i+1], NULL, 10)));
+	}
     }
 
     return 0;

+ 2 - 1
controller.h

@@ -8,7 +8,8 @@ typedef std::pair<const char *, unsigned int> Workentry;
 typedef std::vector<Workentry> Worklist;
 
 int controller_parse_args(int argc, char **argv, unsigned short &bindport,
-    Worklist &worklist);
+    Worklist &worklist, unsigned short &total_nodes,
+    unsigned short &GB_mem_per_node);
 
 int controller_main(const Worklist &worklist, unsigned short bindport,
     void (*boundcb)(const char *boundaddr, unsigned short boundport));

+ 6 - 2
controller_main.cc

@@ -9,6 +9,9 @@
 
 NTL_CLIENT
 
+static unsigned short total_nodes = 0;
+static unsigned short GB_mem_per_node = 0;
+
 void desired_resources(const ZZ &order, unsigned short &desired_dpnodes,
     unsigned int &max_workers, unsigned int &dpfreq)
 {
@@ -56,8 +59,9 @@ int main(int argc, char **argv)
     unsigned short bindport = 0;
     Worklist worklist;
 
-    if (controller_parse_args(argc, argv, bindport, worklist)) {
-	std::cerr << "Usage: " << argv[0] << " [-p listenport] N1 iter1 N2 iter2 ...\n";
+    if (controller_parse_args(argc, argv, bindport, worklist,
+				total_nodes, GB_mem_per_node)) {
+	std::cerr << "Usage: " << argv[0] << " [-p listenport] [-n num_nodes] [-m GB_mem_per_node] [-r reps] N1 iter1 N2 iter2 ...\n";
 	return 1;
     }