changeset 397:c43ec0e3fa84

Add par_meta
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Thu, 24 Aug 2017 17:23:41 +0900
parents bba401f93dcd
children fc4fcd441700
files src/parallel_execution/context.h src/parallel_execution/examples/calc/calc.cbc src/parallel_execution/generate_context.pl src/parallel_execution/generate_stub.pl
diffstat 4 files changed, 20 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/context.h	Thu Aug 24 15:32:38 2017 +0900
+++ b/src/parallel_execution/context.h	Thu Aug 24 17:23:41 2017 +0900
@@ -88,6 +88,7 @@
     int odg;
     int maxOdg;
     int workerId;
+    struct Context** contexts;
 #ifdef USE_CUDAWorker
     int num_exec;
     CUmodule module;
--- a/src/parallel_execution/examples/calc/calc.cbc	Thu Aug 24 15:32:38 2017 +0900
+++ b/src/parallel_execution/examples/calc/calc.cbc	Thu Aug 24 17:23:41 2017 +0900
@@ -118,10 +118,7 @@
 
     par goto initIntegerDataGears(integer2, integer4, integer5, __exit);
 
-    taskManager->contexts = tasks;
-    // goto crateTask1();
-    taskManager->next1 = C_createTask1;
-    goto meta(context, taskManager->taskManager->TaskManager.spawnTasks);
+    goto crateTask1();
 }
 
 void init(int argc, char** argv) {
--- a/src/parallel_execution/generate_context.pl	Thu Aug 24 15:32:38 2017 +0900
+++ b/src/parallel_execution/generate_context.pl	Thu Aug 24 17:23:41 2017 +0900
@@ -168,6 +168,13 @@
     print $fd $context_c;
 
 my $meta_call = <<"EOFEOF";
+__code par_meta(struct Context* context, enum Code spawns, enum Code next) {
+    if (context->contexts != NULL) {
+        context->contexts = NULL;
+        goto (context->code[spawns])(context);
+    }
+    goto (context->code[next])(context);
+}
 
 __code meta(struct Context* context, enum Code next) {
     // printf("meta %d\\n",next);
--- a/src/parallel_execution/generate_stub.pl	Thu Aug 24 15:32:38 2017 +0900
+++ b/src/parallel_execution/generate_stub.pl	Thu Aug 24 17:23:41 2017 +0900
@@ -469,7 +469,17 @@
                         my $v = shift(@args);
                         print $fd "\t*O_$arg = $v;\n";
                     }
-                    print $fd "${prev}goto meta(context, $next);\n";
+                    if ($inParGoto) {
+                        print $fd "${prev}taskManager->contexts = tasks;\n";
+                        print $fd "${prev}goto par_meta(context, Gearef(context, TaskManager)->taskManager->TaskManager.spawnTasks, $next);\n";
+                    } else {
+                        print $fd "${prev}goto meta(context, $next);\n";
+                    }
+                    next;
+                }
+                if ($inParGoto) {
+                    print $fd "${prev}taskManager->contexts = tasks;\n";
+                    print $fd "${prev}goto par_meta(context, Gearef(context, TaskManager)->taskManager->TaskManager.spawnTasks, $next);\n";
                     next;
                 }
             }