From 6838fc5d70ac2e315e8b7f57033a0a6965c3be4a Mon Sep 17 00:00:00 2001
From: Guillaume-Helbecque <helbecque.guillaume@gmail.com>
Date: Sat, 31 Aug 2024 14:53:50 +0200
Subject: [PATCH] declare lbounds inside pfsp_search

---
 pfsp_gpu_chpl.chpl | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/pfsp_gpu_chpl.chpl b/pfsp_gpu_chpl.chpl
index 8039cc0..5cb131e 100644
--- a/pfsp_gpu_chpl.chpl
+++ b/pfsp_gpu_chpl.chpl
@@ -26,15 +26,6 @@ config const inst: int = 14; // instance
 const jobs = taillard_get_nb_jobs(inst);
 const machines = taillard_get_nb_machines(inst);
 
-var lbound1 = new WrapperLB1(jobs, machines); //lb1_bound_data(jobs, machines);
-taillard_get_processing_times(lbound1!.lb1_bound.p_times, inst);
-fill_min_heads_tails(lbound1!.lb1_bound);
-
-var lbound2 = new WrapperLB2(jobs, machines);
-fill_machine_pairs(lbound2!.lb2_bound/*, LB2_FULL*/);
-fill_lags(lbound1!.lb1_bound.p_times, lbound2!.lb2_bound);
-fill_johnson_schedules(lbound1!.lb1_bound.p_times, lbound2!.lb2_bound);
-
 const initUB = taillard_get_best_ub(inst);
 
 proc check_parameters()
@@ -70,7 +61,7 @@ proc print_results(const optimum: int, const exploredTree: uint, const exploredS
   writeln("=================================================\n");
 }
 
-proc decompose_lb2(const parent: Node, ref tree_loc: uint, ref num_sol: uint,
+proc decompose_lb2(const ref lbound1, const ref lbound2, const parent: Node, ref tree_loc: uint, ref num_sol: uint,
   ref best: int, ref pool: SinglePool(Node))
 {
   for i in parent.limit1+1..(jobs-1) {
@@ -80,7 +71,7 @@ proc decompose_lb2(const parent: Node, ref tree_loc: uint, ref num_sol: uint,
     child.prmu = parent.prmu;
     child.prmu[parent.depth] <=> child.prmu[i];
 
-    var lowerbound = lb2_bound(lbound1!.lb1_bound, lbound2!.lb2_bound, child.prmu, child.limit1, jobs, best);
+    var lowerbound = lb2_bound(lbound1, lbound2, child.prmu, child.limit1, jobs, best);
 
     if (child.depth == jobs) { // if child leaf
       num_sol += 1;
@@ -146,12 +137,21 @@ proc pfsp_search(ref optimum: int, ref exploredTree: uint, ref exploredSol: uint
   */
   timer.start();
 
+  var lbound1 = new lb1_bound_data(jobs, machines);
+  taillard_get_processing_times(lbound1.p_times, inst);
+  fill_min_heads_tails(lbound1);
+
+  var lbound2 = new lb2_bound_data(jobs, machines);
+  fill_machine_pairs(lbound2/*, LB2_FULL*/);
+  fill_lags(lbound1.p_times, lbound2);
+  fill_johnson_schedules(lbound1.p_times, lbound2);
+
   while (pool.size < 10000) {
     var hasWork = 0;
     var parent = pool.popFront(hasWork);
     if !hasWork then break;
 
-    decompose_lb2(parent, exploredTree, exploredSol, best, pool);
+    decompose_lb2(lbound1, lbound2, parent, exploredTree, exploredSol, best, pool);
   }
   timer.stop();
   const res1 = (timer.elapsed(), exploredTree, exploredSol);
@@ -169,22 +169,22 @@ proc pfsp_search(ref optimum: int, ref exploredTree: uint, ref exploredSol: uint
   var parents: [0..#M] Node = noinit;
   var bounds: [0..#(M*jobs)] int(32) = noinit;
 
-  var lbound1_d: lbound1.type;
-  var lbound2_d: lbound2.type;
+  var lbound1_d: WrapperLB1;
+  var lbound2_d: WrapperLB2;
   var parents_d: WrapperArrayParents;
   var bounds_d: WrapperArrayBounds;
 
   on device {
     lbound1_d = new WrapperLB1(jobs, machines);
-    lbound1_d!.lb1_bound.p_times   = lbound1!.lb1_bound.p_times;
-    lbound1_d!.lb1_bound.min_heads = lbound1!.lb1_bound.min_heads;
-    lbound1_d!.lb1_bound.min_tails = lbound1!.lb1_bound.min_tails;
+    lbound1_d!.lb1_bound.p_times   = lbound1.p_times;
+    lbound1_d!.lb1_bound.min_heads = lbound1.min_heads;
+    lbound1_d!.lb1_bound.min_tails = lbound1.min_tails;
 
     lbound2_d = new WrapperLB2(jobs, machines);
-    lbound2_d!.lb2_bound.johnson_schedules  = lbound2!.lb2_bound.johnson_schedules;
-    lbound2_d!.lb2_bound.lags               = lbound2!.lb2_bound.lags;
-    lbound2_d!.lb2_bound.machine_pairs      = lbound2!.lb2_bound.machine_pairs;
-    lbound2_d!.lb2_bound.machine_pair_order = lbound2!.lb2_bound.machine_pair_order;
+    lbound2_d!.lb2_bound.johnson_schedules  = lbound2.johnson_schedules;
+    lbound2_d!.lb2_bound.lags               = lbound2.lags;
+    lbound2_d!.lb2_bound.machine_pairs      = lbound2.machine_pairs;
+    lbound2_d!.lb2_bound.machine_pair_order = lbound2.machine_pair_order;
 
     parents_d = new WrapperArrayParents();
     bounds_d = new WrapperArrayBounds();
-- 
GitLab