From 43dbf5c86fe5d71d522bffdc2860a89cbe171984 Mon Sep 17 00:00:00 2001
From: Thierry <thierry.gautier@inrialpes.fr>
Date: Thu, 18 Jan 2018 16:42:26 +0100
Subject: [PATCH] [add] extra informations for loop: ub,lb,stride

---
 runtime/src/kaapi_ompt.c      |  7 ++++---
 runtime/src/kaapi_trace.h     | 17 +++++++++++++----
 runtime/src/kaapi_trace_lib.c | 24 +++++++++++++++++-------
 3 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/runtime/src/kaapi_ompt.c b/runtime/src/kaapi_ompt.c
index 704d83d..2fea703 100644
--- a/runtime/src/kaapi_ompt.c
+++ b/runtime/src/kaapi_ompt.c
@@ -447,7 +447,7 @@ on_ompt_event_loop_begin(
   //kaapi_tracelib_team_t* team = koti->tstack.stack[koti->tstack.top-1];
   kaapi_tracelib_loop_begin(koti->kproc, /*team,*/ workshare_id,
     loc == 0? "undefined" : loc->psource,
-    schedule, count);
+    schedule, lb, ub, stride, count);
 #endif
 }
 
@@ -457,7 +457,8 @@ on_ompt_event_loop_dispatch(
   ompt_parallel_id_t parallel_id,
   ompt_task_id_t task_id,
   ompt_workshare_id_t workshare_id,
-  int64_t lb, int64_t ub, int64_t stride )
+  int64_t lb, int64_t ub, int64_t stride
+)
 {
 #if 1//LOG
   printf("%" PRIu64 ": ompt_event_loop_dispatch: parallel_id=%" PRIu64 ", parent_task_id=%" PRIu64
@@ -466,7 +467,7 @@ on_ompt_event_loop_dispatch(
 #endif
 #if USE_KAAPI
   kaapi_ompt_thread_info_t* koti = &__kaapi_oth_info[thread_id];
-  kaapi_tracelib_loop_dispatch( koti->kproc, workshare_id, (ub-lb)/stride+1);
+  kaapi_tracelib_loop_dispatch( koti->kproc, workshare_id, ub, lb, stride);
 #endif
 }
 
diff --git a/runtime/src/kaapi_trace.h b/runtime/src/kaapi_trace.h
index a7052fc..886c821 100644
--- a/runtime/src/kaapi_trace.h
+++ b/runtime/src/kaapi_trace.h
@@ -280,9 +280,9 @@ typedef struct kaapi_named_perfctr {
 #define KAAPI_EVT_BARRIER_BEG        44    /* d0: running task */
 #define KAAPI_EVT_BARRIER_END        45    /* d0: running  task */
 #define KAAPI_EVT_TASK_STEAL         46    /* d0: executed task, d1: original task */
-#define KAAPI_EVT_LOOP_BEGIN         47    /* d0: workshare id, d1: iteration count */
+#define KAAPI_EVT_LOOP_BEGIN         47    /* d0: workshare id, d1: sched type, d2: iteration count */
 #define KAAPI_EVT_LOOP_END           48    /* d0: workshare id */
-#define KAAPI_EVT_LOOP_NEXT          49    /* d0: workshare id, d1: iteration count dispatched to the thread */
+#define KAAPI_EVT_LOOP_NEXT          49    /* d0: workshare id, d1: ub, d2: lb, d3: stride */
 
 #define KAAPI_EVT_TASK_STEALOP       50    /* d0: op:0 pop, 1 steal, d1.i32[0]:cpu, d1.i32[1]:node, d2.i32[0]:victim_level, d2.i32[1]: victim_level_id  */
 #define KAAPI_EVT_THREAD_STATE       51    /* user level state: d0: 0 begin / 1 end; d1: cpu+node, d2 state */
@@ -290,7 +290,8 @@ typedef struct kaapi_named_perfctr {
 #define KAAPI_EVT_ENERGY_MACHINE     52
 #define KAAPI_EVT_WATT_MACHINE       53
 
-#define KAAPI_EVT_LAST               54
+#define KAAPI_EVT_LOOP_MDATA         54    /* d0: workshare id, d1: ub, d2: lb, d3: stride. Follow KAAPI_EVT_LOOP_BEGIN */
+#define KAAPI_EVT_LAST               55
 
 /** Size of the event mask 
 */
@@ -514,6 +515,9 @@ typedef struct kaapi_tracelib_loop_t {
   char*                         name;        /* name of the parallel region */
   kaapi_perfstat_t              stats;       /* for the running thread */
   kaapi_perf_counter_t          iter;        /* iteration count for the running thread */
+  kaapi_perf_counter_t          ub;          /* ub for the loop */
+  kaapi_perf_counter_t          lb;          /* lb */
+  kaapi_perf_counter_t          stride;      /* stride */
   kaapi_perf_counter_t          time;        /* time for perf iteration for the running thread */
   struct kaapi_tracelib_loop_t* next;        /* in the team declaration */
 } kaapi_tracelib_loop_t;
@@ -887,6 +891,9 @@ extern void kaapi_tracelib_loop_begin(
     uint64_t                     wid,
     const char*                  psource,
     uint64_t                     schedtype,
+    int64_t                      lb,
+    int64_t                      ub,
+    int64_t                      stride,
     uint64_t                     count
 );
 
@@ -902,7 +909,9 @@ extern void kaapi_tracelib_loop_end(
 extern void kaapi_tracelib_loop_dispatch(
     kaapi_tracelib_thread_t*     kproc,
     uint64_t                     wid,
-    uint64_t                     size
+    int64_t                      lb,
+    int64_t                      ub,
+    int64_t                      stride
 );
 
 
diff --git a/runtime/src/kaapi_trace_lib.c b/runtime/src/kaapi_trace_lib.c
index 929d551..cc41bf2 100644
--- a/runtime/src/kaapi_trace_lib.c
+++ b/runtime/src/kaapi_trace_lib.c
@@ -1722,21 +1722,28 @@ void kaapi_tracelib_loop_begin(
     uint64_t                     wid,
     const char*                  psource,
     uint64_t                     schedtype,
+    int64_t                      lb,
+    int64_t                      ub,
+    int64_t                      stride,
     uint64_t                     count
 )
 {
   kaapi_tracelib_loop_t* loop = (kaapi_tracelib_loop_t*)malloc(sizeof(kaapi_tracelib_loop_t));
-  loop->key  = (void*)wid;
-  loop->name = 0;
-  loop->iter = 0;
-  loop->time = kaapi_get_elapsedns();
-  loop->next = 0;
+  loop->key   = (void*)wid;
+  loop->name  = 0;
+  loop->iter  = 0;
+  loop->ub    = ub;
+  loop->lb    = lb;
+  loop->stride= stride;
+  loop->time  = kaapi_get_elapsedns();
+  loop->next  = 0;
   if (kproc->loop_tail)
     kproc->loop_tail->next = loop;
   else
     kproc->loop_head = loop;
   kproc->loop_tail = loop;
   KAAPI_EVENT_PUSH3(kproc, 0, KAAPI_EVT_LOOP_BEGIN, wid, schedtype, count );
+  KAAPI_EVENT_PUSH4(kproc, 0, KAAPI_EVT_LOOP_MDATA, wid, ub, lb, stride );
 }
 
 
@@ -1758,12 +1765,15 @@ extern void kaapi_tracelib_loop_end(
 extern void kaapi_tracelib_loop_dispatch(
     kaapi_tracelib_thread_t*     kproc,
     uint64_t                     wid,
-    uint64_t                     size
+    int64_t                      lb,
+    int64_t                      ub,
+    int64_t                      stride
 )
 {
   kaapi_tracelib_loop_t* loop = kproc->loop_tail;
+  int64_t size = (ub-lb)/stride+1;
   loop->iter += size;
-  KAAPI_EVENT_PUSH2(kproc, 0, KAAPI_EVT_LOOP_NEXT, wid, size );
+  KAAPI_EVENT_PUSH4(kproc, 0, KAAPI_EVT_LOOP_NEXT, wid, ub, lb, stride );
 }
 
 
-- 
GitLab