Просмотр исходного кода

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 лет назад
Родитель
Сommit
edfd20a685
3 измененных файлов с 38 добавлено и 12 удалено
  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,
 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;
     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)) {
     if (argc < 3 || (argc % 2 == 0)) {
 	return 1;
 	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;
     return 0;

+ 2 - 1
controller.h

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

+ 6 - 2
controller_main.cc

@@ -9,6 +9,9 @@
 
 
 NTL_CLIENT
 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,
 void desired_resources(const ZZ &order, unsigned short &desired_dpnodes,
     unsigned int &max_workers, unsigned int &dpfreq)
     unsigned int &max_workers, unsigned int &dpfreq)
 {
 {
@@ -56,8 +59,9 @@ int main(int argc, char **argv)
     unsigned short bindport = 0;
     unsigned short bindport = 0;
     Worklist worklist;
     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;
 	return 1;
     }
     }