chiark / gitweb /
remove some debugging newlines (mistakenly included in previous commit)
[matchsticks-search.git] / main.c
diff --git a/main.c b/main.c
index 87cb8d70fe7eb0508567511492cd0dc063b4f67c..d8ae901500852542834597f73332f1e5d70fbc1e 100644 (file)
--- a/main.c
+++ b/main.c
 
 #include <glpk.h>
 
+#ifndef VERSION
+#define VERSION "(unknown-version)"
+#endif
+
 /*
  * Algorithm.
  *
@@ -155,10 +159,11 @@ typedef struct {
   pid_t pid;
 } Worker;
 static Worker *mc_us;
+static bool mc_am_generator;
 
 static void multicore_check_for_new_best(void);
 
-#define MAX_NIOVS 3
+#define MAX_NIOVS 4
 static AdjWord mc_iter_min;
 static int mc_niovs;
 static size_t mc_iovlen;
@@ -179,6 +184,7 @@ static void mc_rwvsetup_outer(void) {
   IOV(maxhamweight, 1);
   IOV(mc_iter_min, 1);
   IOV(*adjmatrix, multicore_iteration_boundary);
+  IOV(*weight, m);
 }
 
 static void mc_rwvsetup_full(void) {
@@ -245,8 +251,8 @@ static void mc_iterate_worker(void) {
     iterate_recurse(mc_org_it_bound, mc_iter_min);
     multicore_iteration_boundary = mc_org_it_bound;
   }
-  LPRINTF("worker %2d reporting",mc_us->w);
   if (best_adjmatrix) {
+    LPRINTF("worker %2d reporting",mc_us->w);
     adjmatrix = best_adjmatrix;
     mc_rwvsetup_full();
     ssize_t r = writev(fileno(mc_us->results), mc_iov, mc_niovs);
@@ -289,6 +295,7 @@ static void multicore(void) {
 
   genpid = fork();  assert(genpid >= 0);
   if (!genpid) {
+    mc_am_generator = 1;
     LPRINTF("generator running");
     iterate();
     exit(0);
@@ -304,13 +311,15 @@ static void multicore(void) {
     LPRINTF("reading report from %2d",w);
     ssize_t sr = preadv(fileno(mc_workers[w].results), mc_iov, mc_niovs, 0);
     if (!sr) continue;
+    LPRINTF("got report from %2d",w);
     maxhamweight = 0;
     optimise(1);
   }
 }
 
 static void multicore_check_for_new_best(void) {
-  if (!ncpus) return;
+  if (!(mc_us || mc_am_generator))
+    return;
 
   for (;;) {
     double msg;
@@ -324,7 +333,8 @@ static void multicore_check_for_new_best(void) {
 }
 
 static void multicore_found_new_best(void) {
-  if (!ncpus) return;
+  if (!mc_us)
+    return;
 
   if (mc_us /* might be master */) fprintf(stderr,"    w%-2d ",mc_us->w);
   ssize_t wrote = write(mc_bus, &best, sizeof(best));
@@ -650,7 +660,7 @@ static void report(void) {
         continue;
       a[x][y] = min + glp_get_col_prim(best_prob, i);
     }
-    printf("%d into %d: min fragment %g\n", n, m, min);
+    printf("%d into %d: min fragment %g   [%s]\n", n, m, min, VERSION);
     for (i = 0; i < n; i++) {
       for (j = 0; j < m; j++) {
         if (a[i][j])