From 07d767f2076e0a9a4c2185ab3d9158e068cb4b65 Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Thu, 2 Mar 2017 15:15:25 +0100
Subject: [PATCH] Add iteration numbers for traces

---
 CMakeLists.txt                           |  5 +++++
 compute/pzgelqf.c                        |  2 ++
 compute/pzgelqfrh.c                      |  2 ++
 compute/pzgeqrf.c                        |  2 ++
 compute/pzgeqrfrh.c                      |  2 ++
 compute/pzgetrf_incpiv.c                 |  2 ++
 compute/pzgetrf_nopiv.c                  |  2 ++
 compute/pzhetrd_he2hb.c                  |  4 ++++
 compute/pzpotrf.c                        |  4 ++++
 compute/pzpotrimm.c                      | 16 ++++++++++++++++
 compute/pzsytrf.c                        |  4 ++++
 compute/pztpgqrt.c                       |  2 ++
 compute/pztpqrt.c                        |  2 ++
 compute/pztrtri.c                        |  4 ++++
 compute/pzunglq.c                        |  2 ++
 compute/pzunglqrh.c                      |  2 ++
 compute/pzungqr.c                        |  2 ++
 compute/pzungqrrh.c                      |  2 ++
 compute/pzunmlq.c                        |  8 ++++++++
 compute/pzunmlqrh.c                      |  8 ++++++++
 compute/pzunmqr.c                        |  8 ++++++++
 compute/pzunmqrrh.c                      |  8 ++++++++
 control/config.h.in                      |  1 +
 include/runtime.h                        |  2 ++
 runtime/parsec/control/runtime_control.c | 14 ++++++++++++++
 runtime/quark/control/runtime_control.c  | 14 ++++++++++++++
 runtime/starpu/control/runtime_control.c | 18 ++++++++++++++++++
 27 files changed, 142 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b5ea70886..38788dd4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -706,6 +706,11 @@ if( CHAMELEON_SCHED_STARPU )
             set(HAVE_STARPU_IDLE_PREFETCH 1)
             message("-- ${Blue}Add definition HAVE_STARPU_IDLE_PREFETCH${ColourReset}")
         endif()
+        check_function_exists(starpu_set_iteration STARPU_SET_ITERATION_FOUND)
+        if ( STARPU_SET_ITERATION_FOUND )
+            set(HAVE_STARPU_SET_ITERATION 1)
+            message("-- ${Blue}Add definition HAVE_STARPU_SET_ITERATION${ColourReset}")
+        endif()
         check_function_exists(starpu_data_wont_use STARPU_DATA_WONT_USE_FOUND)
         if ( STARPU_DATA_WONT_USE_FOUND )
             set(HAVE_STARPU_DATA_WONT_USE 1)
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 416f043e8..0608f6d36 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -115,6 +115,8 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
 #endif
 
     for (k = 0; k < minMNT; k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         ldak = BLKLDD(A, k);
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index caefaf5c8..9295ac657 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -119,6 +119,8 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
 #endif
 
     for (k = 0; k < chameleon_min(A->mt, A->nt); k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         ldak = BLKLDD(A, k);
         for (N = k; N < A->nt; N += BS) {
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index ca0dfb2e9..c3d6fa742 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -110,6 +110,8 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T,
 #endif
 
     for (k = 0; k < minMNT; k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         ldak = BLKLDD(A, k);
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index fd002fc64..b96eddc07 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -118,6 +118,8 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
 
     K = chameleon_min(A->mt, A->nt);
     for (k = 0; k < K; k++) {
+        RUNTIME_set_iteration(k);
+
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         for (M = k; M < A->mt; M += BS) {
             tempMm = M == A->mt-1 ? A->m-M*A->mb : A->mb;
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 43bd16287..c280a693c 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -78,6 +78,8 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
     morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, chameleon_min(A->m, A->n), A->nb, 0, 0, chameleon_min(A->m, A->n), A->nb, A->p, A->q);
 
     for (k = 0; k < minMNT; k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         ldak = BLKLDD(A, k);
diff --git a/compute/pzgetrf_nopiv.c b/compute/pzgetrf_nopiv.c
index 5eea46d89..75a980138 100644
--- a/compute/pzgetrf_nopiv.c
+++ b/compute/pzgetrf_nopiv.c
@@ -54,6 +54,8 @@ void morse_pzgetrf_nopiv(MORSE_desc_t *A,
     ib = MORSE_IB;
 
     for (k = 0; k < chameleon_min(A->mt, A->nt); k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         ldak = BLKLDD(A, k);
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index e1bf3dc84..0fed5cc88 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -137,6 +137,8 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
 
     if (uplo == MorseLower) {
        for (k = 0; k < A->nt-1; k++){
+           RUNTIME_set_iteration(k);
+
            tempkm = k+1 == A->mt-1 ? A->m-(k+1)*A->mb : A->mb;
            tempkn = k   == A->nt-1 ? A->n- k   *A->nb : A->nb;
            ldak1 = BLKLDD(A, k+1);
@@ -290,6 +292,8 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
     }
     else {
        for (k = 0; k < A->nt-1; k++){
+           RUNTIME_set_iteration(k);
+
            tempkn = k+1 == A->nt-1 ? A->n-(k+1)*A->nb : A->nb;
            tempkm = k   == A->mt-1 ? A->m- k   *A->mb : A->mb;
            ldak  = BLKLDD(A, k);
diff --git a/compute/pzpotrf.c b/compute/pzpotrf.c
index 711bc236e..fe8143714 100644
--- a/compute/pzpotrf.c
+++ b/compute/pzpotrf.c
@@ -71,6 +71,8 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
      */
     if (uplo == MorseLower) {
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
 
@@ -128,6 +130,8 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
      */
     else {
         for (k = 0; k < A->nt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
 
diff --git a/compute/pzpotrimm.c b/compute/pzpotrimm.c
index d388cb3de..8f5f83f7e 100644
--- a/compute/pzpotrimm.c
+++ b/compute/pzpotrimm.c
@@ -76,6 +76,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZPOTRF
          */
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
 
@@ -124,6 +126,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZTRTRI
          */
         for (k = 0; k < A->nt; k++) {
+            RUNTIME_set_iteration(A->nt + k);
+
             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
             for (m = k+1; m < A->mt; m++) {
@@ -170,6 +174,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZLAUUM
          */
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(2*A->nt + k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
             for(n = 0; n < k; n++) {
@@ -211,6 +217,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZSYMM Right / Lower
          */
         for (k = 0; k < C->nt; k++) {
+            RUNTIME_set_iteration(3*A->nt + k);
+
             tempkn = k == C->nt-1 ? C->n-k*C->nb : C->nb;
             ldak = BLKLDD(A, k);
             zbeta = k == 0 ? beta : zone;
@@ -269,6 +277,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZPOTRF
          */
         for (k = 0; k < A->nt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
             MORSE_TASK_zpotrf(
@@ -317,6 +327,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZTRTRI
          */
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(A->nt + k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
             for (n = k+1; n < A->nt; n++) {
@@ -363,6 +375,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZLAUUM
          */
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(2*A->nt + k);
+
             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
 
@@ -406,6 +420,8 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
          *  ZSYMM Right / Upper
          */
         for (k = 0; k < C->nt; k++) {
+            RUNTIME_set_iteration(3*A->nt + k);
+
             tempkn = k == C->nt-1 ? C->n-k*C->nb : C->nb;
             ldak = BLKLDD(A, k);
             zbeta = k == 0 ? beta : zone;
diff --git a/compute/pzsytrf.c b/compute/pzsytrf.c
index de662bee8..622a4d0b2 100644
--- a/compute/pzsytrf.c
+++ b/compute/pzsytrf.c
@@ -60,6 +60,8 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
      */
     if (uplo == MorseLower) {
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
 
@@ -110,6 +112,8 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
      */
     else {
         for (k = 0; k < A->nt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
             MORSE_TASK_zsytrf_nopiv(
diff --git a/compute/pztpgqrt.c b/compute/pztpgqrt.c
index 5b0672d03..7b31f39c2 100644
--- a/compute/pztpgqrt.c
+++ b/compute/pztpgqrt.c
@@ -101,6 +101,8 @@ void morse_pztpgqrt( int L,
 #endif
 
     for (k = V1->nt-1; k >= 0; k--) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == V1->mt-1 ? V1->m-k*V1->mb : V1->mb;
         tempkk = k == V1->nt-1 ? V1->n-k*V1->nb : V1->nb;
         tempkn = k == Q1->nt-1 ? Q1->n-k*Q1->nb : Q1->nb;
diff --git a/compute/pztpqrt.c b/compute/pztpqrt.c
index 9b60ef164..a1c6c9149 100644
--- a/compute/pztpqrt.c
+++ b/compute/pztpqrt.c
@@ -91,6 +91,8 @@ void morse_pztpqrt( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T,
     RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
 
     for (k = 0; k < A->nt; k++) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         ldak = BLKLDD(A, k);
diff --git a/compute/pztrtri.c b/compute/pztrtri.c
index ba77c7a90..b6777d212 100644
--- a/compute/pztrtri.c
+++ b/compute/pztrtri.c
@@ -56,6 +56,8 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
      */
     if (uplo == MorseLower) {
         for (k = 0; k < A->nt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
             ldak = BLKLDD(A, k);
             for (m = k+1; m < A->mt; m++) {
@@ -104,6 +106,8 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
      */
     else {
         for (k = 0; k < A->mt; k++) {
+            RUNTIME_set_iteration(k);
+
             tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
             ldak = BLKLDD(A, k);
             for (n = k+1; n < A->nt; n++) {
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index 37ecea8ef..56d43c833 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -98,6 +98,8 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
 #endif
 
     for (k = minMT-1; k >= 0; k--) {
+        RUNTIME_set_iteration(k);
+
         tempAkm  = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempAkn  = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         tempkmin = chameleon_min( tempAkn, tempAkm );
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index 59717f431..09b67e012 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -99,6 +99,8 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
 
     K = chameleon_min(A->mt, A->nt);
     for (k = K-1; k >= 0; k--) {
+        RUNTIME_set_iteration(k);
+
         tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         ldak = BLKLDD(A, k);
         lastRD = 0;
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index 23f33b7e8..a93983d1e 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -98,6 +98,8 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
 #endif
 
     for (k = minMT-1; k >= 0; k--) {
+        RUNTIME_set_iteration(k);
+
         tempAkm  = k == A->mt-1 ? A->m-k*A->mb : A->mb;
         tempAkn  = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         tempkmin = chameleon_min( tempAkn, tempAkm );
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index 1a2470ece..dcacc344f 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -101,6 +101,8 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
 
     K = chameleon_min(A->mt, A->nt);
     for (k = K-1; k >= 0; k--) {
+        RUNTIME_set_iteration(k);
+
         tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
         lastRD = 0;
         for (RD = BS; RD < A->mt-k; RD *= 2)
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index 3cb7d8591..448eff9ef 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -105,6 +105,8 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseNoTrans
              */
             for (k = 0; k < minMT; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkm   = k == B->mt-1 ? B->m-k*B->mb : B->mb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -155,6 +157,8 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseConjTrans
              */
             for (k = minMT-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkm   = k == B->mt-1 ? B->m-k*B->mb : B->mb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -207,6 +211,8 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseNoTrans
              */
             for (k = minMT-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkn   = k == B->nt -1 ? B->n -k*B->nb : B->nb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -257,6 +263,8 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseConjTrans
              */
             for (k = 0; k < minMT; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkn   = k == B->nt -1 ? B->n -k*B->nb : B->nb;
                 tempkmin = k == minMT-1 ? minM-k*A->mb : A->mb;
                 ldak = BLKLDD(A, k);
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index 2963bf553..21f1805e1 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -105,6 +105,8 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseNoTrans
              */
             for (k = 0; k < K; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
                 ldak = BLKLDD(A, k);
                 for (N = k; N < A->nt; N += BS) {
@@ -178,6 +180,8 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseConjTrans
              */
             for (k = K-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
                 ldak = BLKLDD(A, k);
                 lastRD = 0;
@@ -257,6 +261,8 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseNoTrans
              */
             for (k = K-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
                 ldak = BLKLDD(A, k);
                 lastRD = 0;
@@ -332,6 +338,8 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseConjTrans
              */
             for (k = 0; k < K; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
                 ldak = BLKLDD(A, k);
                 for (N = k; N < A->nt; N += BS) {
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index f860f7f04..4cbcf7b62 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -105,6 +105,8 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseConjTrans
              */
             for (k = 0; k < minMT; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkm   = k == B->mt-1 ? B->m-k*B->mb : B->mb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -156,6 +158,8 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
          */
         else {
             for (k = minMT-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkm = k == B->mt-1 ? B->m-k*B->mb : B->mb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -209,6 +213,8 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
     else {
         if (trans == MorseConjTrans) {
             for (k = minMT-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkn = k == B->nt-1 ? B->n-k*B->nb : B->nb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
@@ -261,6 +267,8 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
          */
         else {
             for (k = 0; k < minMT; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkn   = k == B->nt-1 ? B->n-k*B->nb : B->nb;
                 tempkmin = k == minMT-1 ? minM-k*A->nb : A->nb;
                 ldak = BLKLDD(A, k);
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index 8ef8cb2dc..62023091c 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -107,6 +107,8 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseConjTrans
              */
             for (k = 0; k < K; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
                 for (M = k; M < A->mt; M += BS) {
                     tempMm   = M == A->mt-1 ? A->m-M*A->mb : A->mb;
@@ -182,6 +184,8 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
              *  MorseLeft / MorseNoTrans
              */
             for (k = K-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
                 lastRD = 0;
                 for (RD = BS; RD < A->mt-k; RD *= 2)
@@ -262,6 +266,8 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseConjTrans
              */
             for (k = K-1; k >= 0; k--) {
+                RUNTIME_set_iteration(k);
+
                 tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
                 lastRD = 0;
                 for (RD = BS; RD < A->mt-k; RD *= 2)
@@ -340,6 +346,8 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
              *  MorseRight / MorseNoTrans
              */
             for (k = 0; k < K; k++) {
+                RUNTIME_set_iteration(k);
+
                 tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
                 for (M = k; M < A->mt; M += BS) {
                     tempMm   = M == A->mt-1 ? A->m-M*A->mb : A->mb;
diff --git a/control/config.h.in b/control/config.h.in
index 9d6dbdb0b..a71d517dc 100644
--- a/control/config.h.in
+++ b/control/config.h.in
@@ -34,6 +34,7 @@
 /* StarPU functions */
 #cmakedefine HAVE_STARPU_FXT_PROFILING
 #cmakedefine HAVE_STARPU_IDLE_PREFETCH
+#cmakedefine HAVE_STARPU_SET_ITERATION
 #cmakedefine HAVE_STARPU_DATA_WONT_USE
 #cmakedefine HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS
 #cmakedefine HAVE_STARPU_MPI_DATA_REGISTER
diff --git a/include/runtime.h b/include/runtime.h
index 95cf19b75..ea765e112 100644
--- a/include/runtime.h
+++ b/include/runtime.h
@@ -52,6 +52,8 @@ int   RUNTIME_rank               (MORSE_context_t*);
 int   RUNTIME_init_scheduler     (MORSE_context_t*, int, int, int);
 void  RUNTIME_finalize_scheduler (MORSE_context_t*);
 void  RUNTIME_barrier            (MORSE_context_t*);
+void  RUNTIME_set_iteration      (MORSE_context_t*, unsigned long iteration);
+void  RUNTIME_set_subiteration   (MORSE_context_t*, unsigned long subiteration);
 void  RUNTIME_pause              (MORSE_context_t*);
 void  RUNTIME_resume             (MORSE_context_t*);
 void  RUNTIME_comm_rank          (int*);
diff --git a/runtime/parsec/control/runtime_control.c b/runtime/parsec/control/runtime_control.c
index edaafbfbe..c1d3d9910 100644
--- a/runtime/parsec/control/runtime_control.c
+++ b/runtime/parsec/control/runtime_control.c
@@ -67,6 +67,20 @@ void RUNTIME_barrier(MORSE_context_t *morse)
     return;
 }
 
+/*******************************************************************************
+ *  Set iteration numbers for traces
+ **/
+void RUNTIME_set_iteration( MORSE_context_t *morse, unsigned long iteration )
+{
+    (void)morse;
+    return;
+}
+void RUNTIME_set_subiteration( MORSE_context_t *morse, unsigned long subiteration )
+{
+    (void)morse;
+    return;
+}
+
 /*******************************************************************************
  *  To suspend the processing of new tasks by workers
  **/
diff --git a/runtime/quark/control/runtime_control.c b/runtime/quark/control/runtime_control.c
index 2ca4d060c..3a9be224e 100644
--- a/runtime/quark/control/runtime_control.c
+++ b/runtime/quark/control/runtime_control.c
@@ -68,6 +68,20 @@ void RUNTIME_finalize_scheduler(MORSE_context_t *morse)
     return;
 }
 
+/*******************************************************************************
+ *  Set iteration numbers for traces
+ **/
+void RUNTIME_set_iteration( MORSE_context_t *morse, unsigned long iteration )
+{
+    (void)morse;
+    return;
+}
+void RUNTIME_set_subiteration( MORSE_context_t *morse, unsigned long subiteration )
+{
+    (void)morse;
+    return;
+}
+
 /*******************************************************************************
  *  To suspend the processing of new tasks by workers
  **/
diff --git a/runtime/starpu/control/runtime_control.c b/runtime/starpu/control/runtime_control.c
index eb1cbb646..b1aba1933 100644
--- a/runtime/starpu/control/runtime_control.c
+++ b/runtime/starpu/control/runtime_control.c
@@ -175,6 +175,24 @@ void RUNTIME_barrier( MORSE_context_t *morse )
 #endif
 }
 
+/*******************************************************************************
+ *  Set iteration numbers for traces
+ **/
+void RUNTIME_set_iteration( MORSE_context_t *morse, unsigned long iteration )
+{
+    (void)morse;
+#if defined(HAVE_STARPU_SET_ITERATION)
+    starpu_set_iteration(iteration);
+#endif
+}
+void RUNTIME_set_subiteration( MORSE_context_t *morse, unsigned long subiteration )
+{
+    (void)morse;
+#if defined(HAVE_STARPU_SET_ITERATION)
+    starpu_set_subiteration(subiteration);
+#endif
+}
+
 /*******************************************************************************
  *  To suspend the processing of new tasks by workers
  **/
-- 
GitLab