Procházet zdrojové kódy

Complete the computation of the desired resources for the subproblems

Ian Goldberg před 14 roky
rodič
revize
15901b39d1
4 změnil soubory, kde provedl 16 přidání a 16 odebrání
  1. 2 2
      Makefile
  2. 2 2
      controller.cc
  3. 12 7
      controller_main.cc
  4. 0 5
      mpi.cc

+ 2 - 2
Makefile

@@ -25,7 +25,7 @@ CXX ?= g++
 
 
 WORDS = 24
 WORDS = 24
 
 
-CXXFLAGS=-g -Wall -O2
+CXXFLAGS=-g -Wall -O0
 CPPFLAGS=-DWORDS=$(WORDS) -I$(LIBEVENT)/include -I$(GMP)/include -UVERBOSE
 CPPFLAGS=-DWORDS=$(WORDS) -I$(LIBEVENT)/include -I$(GMP)/include -UVERBOSE
 NVCCOPTS=-g -arch sm_20 --ptxas-options=-v -O2
 NVCCOPTS=-g -arch sm_20 --ptxas-options=-v -O2
 NVCC=nvcc $(NVCCOPTS)
 NVCC=nvcc $(NVCCOPTS)
@@ -33,7 +33,7 @@ NVCC=nvcc $(NVCCOPTS)
 CXXFILES = dlrho.cc gen_N.cc
 CXXFILES = dlrho.cc gen_N.cc
 CUFILES = parrhoasm.cu dpstream.cu
 CUFILES = parrhoasm.cu dpstream.cu
 OFILES = dlrho.o gen_N.o cudadl.o controller.o controller_main.o evutils.o dpnode.o dpnode_main.o worker.o worker_main.o
 OFILES = dlrho.o gen_N.o cudadl.o controller.o controller_main.o evutils.o dpnode.o dpnode_main.o worker.o worker_main.o
-NOMPI_TARGETS = gen_N dlrho controller dpnode worker
+NOMPI_TARGETS = gen_N dlrho controller dpnode worker desres
 TARGETS = $(NOMPI_TARGETS) mpi
 TARGETS = $(NOMPI_TARGETS) mpi
 
 
 all: $(TARGETS)
 all: $(TARGETS)

+ 2 - 2
controller.cc

@@ -767,8 +767,8 @@ int controller_parse_args(int argc, char **argv, unsigned short &bindport,
     unsigned short &GB_mem_per_node)
     unsigned short &GB_mem_per_node)
 {
 {
     bindport = 0;
     bindport = 0;
-    total_nodes = 0;
-    GB_mem_per_node = 0;
+    total_nodes = 1;
+    GB_mem_per_node = 1;
     int reps = 1;
     int reps = 1;
 
 
     while (argc > 2 && argv[1][0] == '-') {
     while (argc > 2 && argv[1][0] == '-') {

+ 12 - 7
controller_main.cc

@@ -10,9 +10,9 @@
 NTL_CLIENT
 NTL_CLIENT
 
 
 // The total number of nodes (that is, dpnodes)
 // The total number of nodes (that is, dpnodes)
-static unsigned short total_nodes = 0;
+static unsigned short total_nodes = 1;
 // The amount of memory we can use per dpnode
 // The amount of memory we can use per dpnode
-static unsigned short GB_mem_per_node = 0;
+static unsigned short GB_mem_per_node = 1;
 
 
 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)
@@ -22,16 +22,21 @@ void desired_resources(const ZZ &order, unsigned short &desired_dpnodes,
     ZZ sorder = SqrRoot(order);
     ZZ sorder = SqrRoot(order);
 
 
     // How many DPnodes should we use for a problem of this size?
     // How many DPnodes should we use for a problem of this size?
-    desired_dpnodes = 1;
+
     // 338 is bytes per DP in the table.  10 is a safety factor.
     // 338 is bytes per DP in the table.  10 is a safety factor.
     ZZ dpnumerator = sorder * 338 * 10;
     ZZ dpnumerator = sorder * 338 * 10;
     ZZ dpdenominator;
     ZZ dpdenominator;
-    dpdenominator = dpscale;
-    dpdenominator *= GB_mem_per_node;
+    dpdenominator = GB_mem_per_node;
     dpdenominator *= 1000000000UL;  // Convert the above line to GB
     dpdenominator *= 1000000000UL;  // Convert the above line to GB
-    ZZ dpnodes = (dpnumerator / dpdenominator) + 1;
+    ZZ dpnodes = (dpnumerator / (dpdenominator * dpscale)) + 1;
     if (dpnodes > total_nodes) {
     if (dpnodes > total_nodes) {
 	desired_dpnodes = total_nodes;
 	desired_dpnodes = total_nodes;
+	ZZ zzdpscale = dpnumerator / (dpdenominator * total_nodes);
+	if (NumBits(zzdpscale) > 31) {
+	    dpscale = 4294967295U;
+	} else {
+	    dpscale = trunc_long(zzdpscale, 31);
+	}
     } else {
     } else {
 	desired_dpnodes = trunc_long(dpnodes, 31);
 	desired_dpnodes = trunc_long(dpnodes, 31);
     }
     }
@@ -91,7 +96,7 @@ int main(int argc, char **argv)
     total_nodes = strtoul(argv[1], NULL, 10);
     total_nodes = strtoul(argv[1], NULL, 10);
     GB_mem_per_node = strtoul(argv[2], NULL, 10);
     GB_mem_per_node = strtoul(argv[2], NULL, 10);
     cout << "# log_2(order) dpnodes workers dpfreq\n";
     cout << "# log_2(order) dpnodes workers dpfreq\n";
-    for (int i=44; i<=90; ++i) {
+    for (int i=44; i<=92; ++i) {
 	unsigned short desired_dpnodes;
 	unsigned short desired_dpnodes;
 	unsigned int max_workers;
 	unsigned int max_workers;
 	unsigned int dpfreq;
 	unsigned int dpfreq;

+ 0 - 5
mpi.cc

@@ -143,11 +143,6 @@ int main(int argc, char **argv)
 		close_highfds_except(-1);
 		close_highfds_except(-1);
 		execl("./dpnode", "./dpnode", boundaddr, portstr, NULL);
 		execl("./dpnode", "./dpnode", boundaddr, portstr, NULL);
 		return 1;
 		return 1;
-	    } else if (fork_and_remember(children) == 0) {
-		// And a bonus dpnode
-		close_highfds_except(-1);
-		execl("./dpnode", "./dpnode", boundaddr, portstr, NULL);
-		return 1;
 	    }
 	    }
 	}
 	}
     }
     }