From 26f9fc70be63ba7cce3c83c4a85be11806c54f93 Mon Sep 17 00:00:00 2001
From: Reazul Hoque <rhoque@vols.utk.edu>
Date: Thu, 30 Nov 2017 17:59:49 -0500
Subject: [PATCH] Added changes for distributed(incomplete)

---
 runtime/parsec/codelets/codelet_zgemm.c     |  6 ++---
 runtime/parsec/codelets/codelet_zher2k.c    |  6 ++---
 runtime/parsec/codelets/codelet_zherk.c     |  4 +--
 runtime/parsec/codelets/codelet_zplghe.c    |  2 +-
 runtime/parsec/codelets/codelet_zplgsy.c    |  2 +-
 runtime/parsec/codelets/codelet_zpotrf.c    |  2 +-
 runtime/parsec/codelets/codelet_zsyr2k.c    |  6 ++---
 runtime/parsec/codelets/codelet_zsyrk.c     |  4 +--
 runtime/parsec/codelets/codelet_ztrsm.c     |  4 +--
 runtime/parsec/control/runtime_descriptor.c | 29 ++++++++++++++++++---
 runtime/parsec/include/chameleon_parsec.h   |  2 ++
 11 files changed, 45 insertions(+), 22 deletions(-)

diff --git a/runtime/parsec/codelets/codelet_zgemm.c b/runtime/parsec/codelets/codelet_zgemm.c
index 34ca3c30f..13ede15fa 100644
--- a/runtime/parsec/codelets/codelet_zgemm.c
+++ b/runtime/parsec/codelets/codelet_zgemm.c
@@ -88,12 +88,12 @@ void MORSE_TASK_zgemm(const MORSE_option_t *options,
         sizeof(int),           &n,                                VALUE,
         sizeof(int),           &k,                                VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,              VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                              VALUE,
-        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),           &ldb,                              VALUE,
         sizeof(MORSE_Complex64_t),           &beta,               VALUE,
-        PASSED_BY_REF,     RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                              VALUE,
         0);
 }
diff --git a/runtime/parsec/codelets/codelet_zher2k.c b/runtime/parsec/codelets/codelet_zher2k.c
index c2af9c222..78064708c 100644
--- a/runtime/parsec/codelets/codelet_zher2k.c
+++ b/runtime/parsec/codelets/codelet_zher2k.c
@@ -84,12 +84,12 @@ void MORSE_TASK_zher2k(const MORSE_option_t *options,
         sizeof(int),                        &n,        VALUE,
         sizeof(int),                        &k,        VALUE,
         sizeof(MORSE_Complex64_t),          &alpha,    VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),                        &lda,      VALUE,
-        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),                        &ldb,      VALUE,
         sizeof(double),                     &beta,     VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),                        &ldc,      VALUE,
         0);
 }
diff --git a/runtime/parsec/codelets/codelet_zherk.c b/runtime/parsec/codelets/codelet_zherk.c
index 20c78e973..738572657 100644
--- a/runtime/parsec/codelets/codelet_zherk.c
+++ b/runtime/parsec/codelets/codelet_zherk.c
@@ -79,10 +79,10 @@ void MORSE_TASK_zherk(const MORSE_option_t *options,
         sizeof(int),           &n,                                VALUE,
         sizeof(int),           &k,                                VALUE,
         sizeof(double),        &alpha,                            VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                              VALUE,
         sizeof(double),        &beta,                             VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                              VALUE,
         0);
 }
diff --git a/runtime/parsec/codelets/codelet_zplghe.c b/runtime/parsec/codelets/codelet_zplghe.c
index 6883fd6e1..13dfda18c 100644
--- a/runtime/parsec/codelets/codelet_zplghe.c
+++ b/runtime/parsec/codelets/codelet_zplghe.c
@@ -65,7 +65,7 @@ void MORSE_TASK_zplghe( const MORSE_option_t *options,
         sizeof(double),    &bump,                          VALUE,
         sizeof(int),       &m,                             VALUE,
         sizeof(int),       &n,                             VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),       &lda,                           VALUE,
         sizeof(int),       &bigM,                          VALUE,
         sizeof(int),       &m0,                            VALUE,
diff --git a/runtime/parsec/codelets/codelet_zplgsy.c b/runtime/parsec/codelets/codelet_zplgsy.c
index 6ed9e709d..afd91170b 100644
--- a/runtime/parsec/codelets/codelet_zplgsy.c
+++ b/runtime/parsec/codelets/codelet_zplgsy.c
@@ -65,7 +65,7 @@ void MORSE_TASK_zplgsy( const MORSE_option_t *options,
         sizeof(MORSE_Complex64_t), &bump,                          VALUE,
         sizeof(int),               &m,                             VALUE,
         sizeof(int),               &n,                             VALUE,
-        PASSED_BY_REF,             RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | AFFINITY,
+        PASSED_BY_REF,             RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),               &lda,                           VALUE,
         sizeof(int),               &bigM,                          VALUE,
         sizeof(int),               &m0,                            VALUE,
diff --git a/runtime/parsec/codelets/codelet_zpotrf.c b/runtime/parsec/codelets/codelet_zpotrf.c
index b13f687b7..9cdf2486d 100644
--- a/runtime/parsec/codelets/codelet_zpotrf.c
+++ b/runtime/parsec/codelets/codelet_zpotrf.c
@@ -60,7 +60,7 @@ void MORSE_TASK_zpotrf(const MORSE_option_t *options,
         PARSEC_dtd_taskpool, CORE_zpotrf_parsec, options->priority, "potrf",
         sizeof(MORSE_enum),    &uplo,                             VALUE,
         sizeof(int),           &n,                                VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),           &lda,                              VALUE,
         sizeof(int),           &iinfo,                            VALUE,
         0);
diff --git a/runtime/parsec/codelets/codelet_zsyr2k.c b/runtime/parsec/codelets/codelet_zsyr2k.c
index 33d326d37..a16a874e1 100644
--- a/runtime/parsec/codelets/codelet_zsyr2k.c
+++ b/runtime/parsec/codelets/codelet_zsyr2k.c
@@ -79,12 +79,12 @@ void MORSE_TASK_zsyr2k(const MORSE_option_t *options,
         sizeof(int),            &n,                     VALUE,
         sizeof(int),            &k,                     VALUE,
         sizeof(MORSE_Complex64_t), &alpha,              VALUE,
-        PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),            &lda,                   VALUE,
-        PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT,
+        PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | morse_parsec_get_arena_index(B),
         sizeof(int),            &ldb,                   VALUE,
         sizeof(MORSE_Complex64_t), &beta,               VALUE,
-        PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),            &ldc,                   VALUE,
         0);
 }
diff --git a/runtime/parsec/codelets/codelet_zsyrk.c b/runtime/parsec/codelets/codelet_zsyrk.c
index 4ff939ef2..28911f3c3 100644
--- a/runtime/parsec/codelets/codelet_zsyrk.c
+++ b/runtime/parsec/codelets/codelet_zsyrk.c
@@ -73,10 +73,10 @@ void MORSE_TASK_zsyrk(const MORSE_option_t *options,
         sizeof(int),           &n,                                 VALUE,
         sizeof(int),           &k,                                 VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,               VALUE,
-        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                               VALUE,
         sizeof(MORSE_Complex64_t),           &beta,                VALUE,
-        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | morse_parsec_get_arena_index(C) | AFFINITY,
         sizeof(int),           &ldc,                               VALUE,
         0);
 }
diff --git a/runtime/parsec/codelets/codelet_ztrsm.c b/runtime/parsec/codelets/codelet_ztrsm.c
index 08520db9a..fb650e6c2 100644
--- a/runtime/parsec/codelets/codelet_ztrsm.c
+++ b/runtime/parsec/codelets/codelet_ztrsm.c
@@ -71,9 +71,9 @@ void MORSE_TASK_ztrsm(const MORSE_option_t *options,
         sizeof(int),           &m,                        VALUE,
         sizeof(int),           &n,                        VALUE,
         sizeof(MORSE_Complex64_t),           &alpha,      VALUE,
-        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT,
+        PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | morse_parsec_get_arena_index(A),
         sizeof(int),           &lda,                      VALUE,
-        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | AFFINITY,
+        PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | morse_parsec_get_arena_index(A) | AFFINITY,
         sizeof(int),           &ldb,                      VALUE,
         0);
 }
diff --git a/runtime/parsec/control/runtime_descriptor.c b/runtime/parsec/control/runtime_descriptor.c
index da9250b4f..70b38659e 100644
--- a/runtime/parsec/control/runtime_descriptor.c
+++ b/runtime/parsec/control/runtime_descriptor.c
@@ -11,6 +11,7 @@
 #include "chameleon_parsec.h"
 #include <parsec/data.h>
 #include <parsec/datatype.h>
+#include <parsec/data_dist/matrix/matrix.h>
 #include <parsec/arena.h>
 
 static int parsec_global_arena_index = 0;
@@ -39,6 +40,10 @@ struct morse_parsec_desc_s {
     int arena_index;
 };
 
+int morse_parsec_get_arena_index(const MORSE_desc_t *desc) {
+    return ((morse_parsec_desc_t *)desc->schedopt)->arena_index;
+}
+
 static void
 morse_parsec_key_to_coordinates(parsec_data_collection_t *data_collection, parsec_data_key_t key,
                                 int *m, int *n)
@@ -225,10 +230,26 @@ void RUNTIME_desc_create( MORSE_desc_t *mdesc )
 
     parsec_dtd_data_collection_init(data_collection);
 
-    /*dplasma_add2arena_tile( parsec_dtd_arenas[0],
-                            mdesc->mb*mdesc->nb*sizeof(MORSE_Complex64_t),
-                            PARSEC_ARENA_ALIGNMENT_SSE,
-                            parsec_datatype_double_complex_t, mdesc->mb ); */
+    /* arena init */
+    /* taskpool init to bypass a requirement of PaRSEC  */
+#if defined(CHAMELEON_USE_MPI)
+    parsec_dtd_taskpool_new();
+    /* Internal limitation of PaRSEC */
+    assert(parsec_global_arena_index < 16);
+    pdesc->arena_index = parsec_global_arena_index++;
+
+    parsec_datatype_t datatype;
+    switch(mdesc->dtyp) {
+        case MorseInteger:       datatype = parsec_datatype_int32_t; break;
+        case MorseRealFloat:     datatype = parsec_datatype_float_t; break;
+        case MorseRealDouble:    datatype = parsec_datatype_double_t; break;
+        case MorseComplexFloat:  datatype = parsec_datatype_complex_t; break;
+        case MorseComplexDouble: datatype = parsec_datatype_double_complex_t; break;
+        default: morse_fatal_error("MORSE_Element_Size", "undefined type"); break;
+    }
+
+    parsec_matrix_add2arena_tile( parsec_dtd_arenas[pdesc->arena_index], datatype, mdesc->mb*mdesc->nb*MORSE_Element_Size(mdesc->dtyp) );
+#endif
     /* /\* Overwrite the leading dimensions to store the padding *\/ */
     /* mdesc->llm = mdesc->mb * mdesc->lmt; */
     /* mdesc->lln = mdesc->nb * mdesc->lnt; */
diff --git a/runtime/parsec/include/chameleon_parsec.h b/runtime/parsec/include/chameleon_parsec.h
index ffb511607..f1b91ebc6 100644
--- a/runtime/parsec/include/chameleon_parsec.h
+++ b/runtime/parsec/include/chameleon_parsec.h
@@ -20,6 +20,8 @@
 struct morse_parsec_desc_s;
 typedef struct morse_parsec_desc_s morse_parsec_desc_t;
 
+int morse_parsec_get_arena_index(const MORSE_desc_t *desc);
+
 /*
  * Access to block pointer and leading dimension
  */
-- 
GitLab