diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8645a1b65771e7f04a477573ae339e0000bb84fb..c8fa0f87d5c4b369f6e5ddbdd734dc4443fed675 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -237,9 +237,12 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
             message("-- ${BoldGreen}CHAMELEON_SIMULATION is set to OFF, turn it ON to use"
                 " SIMULATION mode (only with StarPU compiled with SimGrid)${ColourReset}")
         endif()
-        option(CHAMELEON_SIMULATION_MAGMA "Enable magma kernels in simulation mode" OFF)
-        if (NOT CHAMELEON_SIMULATION_MAGMA)
-            message("-- ${BoldGreen}CHAMELEON_SIMULATION_MAGMA is set to OFF, turn it ON to enable MAGMA kernels in "
+        option(CHAMELEON_SIMULATION_MAGMA "Enable cuda/magma kernels in simulation mode" OFF)
+        if (CHAMELEON_SIMULATION_MAGMA)
+            message("-- ${BoldGreen}CHAMELEON_SIMULATION_MAGMA is set to ON, turn it OFF to disable CUDA/MAGMA kernels in "
+                " SIMULATION mode${ColourReset}")
+        else()
+            message("-- ${BoldGreen}CHAMELEON_SIMULATION_MAGMA is set to OFF, turn it ON to enable CUDA/MAGMA kernels in "
                 " SIMULATION mode${ColourReset}")
         endif()
     endif()
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 1e2a17ccf7feb1b3d7996b5b49c3fa7631eae4e6..636a6ee522e38d5de2015e250a7de99866e3a76d 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -71,7 +71,7 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
     ws_worker = A->nb * (ib+1);
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zgelqt = max( A->nb * (ib+1), ib * (ib + A->nb) )
@@ -117,7 +117,7 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
                 A(k, k), ldak,
                 DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
             MORSE_TASK_zlaset(
                 &options,
                 MorseLower, A->mb, A->nb,
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index 08e1cc9fcddf5471e2a8157cd5e435e6ffb405cb..7205791c4ffc38ed8f0abf01b3bc1b13720d99fb 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -79,7 +79,7 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
     ws_worker = A->nb * (ib+1);
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zgelqt = max( A->nb * (ib+1), ib * (ib + A->nb) )
@@ -128,7 +128,7 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
                 A(k, N), ldak,
                 DIAG(k, N), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
             MORSE_TASK_zlaset(
                 &options,
                 MorseLower, tempkm, tempNn,
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index 98e5d3679144ae925637118a902b31716e927949..4edf41b730b9fef1170f91d7cc44769fdcd49048 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -72,7 +72,7 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T,
     ws_worker = A->nb * (ib+1);
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zgeqrt = max( A->nb * (ib+1), ib * (ib + A->nb) )
@@ -118,7 +118,7 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T,
                 A(k, k), ldak,
                 DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
             MORSE_TASK_zlaset(
                 &options,
                 MorseUpper, A->mb, A->nb,
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index 35f433b65420afcf6a2d36b3d01cd4d8c96503c0..c2af99bca968b925cca45a8b0c575a571ba30d1a 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -77,7 +77,7 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
     ws_worker = A->nb * (ib+1);
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zgeqrt = max( A->nb * (ib+1), ib * (ib + A->nb) )
@@ -127,7 +127,7 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
                 A(M, k), ldaM,
                 DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseUpper, tempMm, A->nb,
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 323338a425be2eb4af37845af7753cd6986aaaff..c78faa11b36556e015b48da8d32b4bb37da8b69d 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -64,7 +64,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
     RUNTIME_options_init(&options, morse, sequence, request);
 
     ib = MORSE_IB;
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     h_work_size  = sizeof(MORSE_Complex64_t)*( 2*ib + 2*L->nb )*2*A->mb;
     d_work_size  = sizeof(MORSE_Complex64_t)*(   ib           )*2*A->mb;
 #else
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index d59c3ff8bf659b5d997cdbf58ae8abb6110846e0..4244a24809d878c5d07b47d7b65e09e6da882a2a 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -77,7 +77,7 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
     ws_worker = A->nb * ib;
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmlq = A->nb * ib
@@ -123,7 +123,7 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
             A(k, k), ldak,
             DIAG(k), A->mb );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
         MORSE_TASK_zlaset(
             &options,
             MorseLower, tempkmin, tempkn,
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index b175fbf32b0c4ce8667da7267fbb3ac9151fdcaa..d236cea6c743580c1f346c1e46d938c1b5187dcc 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -75,7 +75,7 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmqr = A->nb * ib
@@ -146,7 +146,7 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                 A(k, N), ldak,
                 DIAG(k, N), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
             MORSE_TASK_zlaset(
                 &options,
                 MorseLower, tempkmin, tempNn,
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index 34155b7e97479e6a8264c8c0cdb6e756599d37cb..b3f46281868fca23cd39c582cc92890c402c6cb1 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -71,7 +71,7 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
     ws_worker = A->nb * ib;
 
     /* Allocation of temporary (scratch) working space */
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmqr = A->nb * ib
@@ -119,7 +119,7 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
             A(k, k), ldak,
             DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
         MORSE_TASK_zlaset(
             &options,
             MorseUpper, tempkm, tempkmin,
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index 0869550c0f826da206f6faacbb0bdff4f12e4ef2..39609da69a6f0003622e01f75ad45122c4f42922 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -77,7 +77,7 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmqr = A->nb * ib
@@ -152,7 +152,7 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                 A(M, k), ldaM,
                 DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
             MORSE_TASK_zlaset(
                 &options,
                 MorseUpper, tempMm, tempkmin,
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index ff2d32ac626e182d58f2b9dc076f43a46e468410..8757c1e85a3126ceb1baab21be6186dec9d14e82 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -79,7 +79,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmlq = A->nb * ib
@@ -114,7 +114,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), A->mb );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseLower, tempkmin, tempkm,
@@ -179,7 +179,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), A->mb );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseLower, tempkmin, tempkm,
@@ -230,7 +230,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), A->mb );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseLower, tempkmin, tempkn,
@@ -265,7 +265,7 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), A->mb );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseLower, tempkmin, tempkn,
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index bdab950a4560ecf4201ddeba13da30863e5cd0de..99c31285bd0ed6bbd5f2d2c7b05bbda7696c5d5f 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -77,7 +77,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmlq = A->nb * ib
@@ -117,7 +117,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
                         A(k, N), ldak,
                         DIAG(k, N), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseLower, tempkmin, tempNn,
@@ -229,7 +229,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
                         A(k, N), ldak,
                         DIAG(k, N), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseLower, tempkmin, tempNn,
@@ -306,7 +306,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
                         A(k, N), ldak,
                         DIAG(k, N), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseLower, tempkmin, tempNn,
@@ -345,7 +345,7 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
                         A(k, N), ldaN,
                         DIAG(k, N), ldaN );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseLower, tempkmin, tempNn,
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index 2c1631875d336d541e5efe217aea67903ffa2b51..690b785f4d7624a5ed2392c7bb39332768b48b1f 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -71,7 +71,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmqr = A->nb * ib
@@ -114,7 +114,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseUpper, tempkm, tempkmin,
@@ -181,7 +181,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseUpper, tempkm, tempkmin,
@@ -234,7 +234,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseUpper, tempkn, tempkmin,
@@ -269,7 +269,7 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
                     A(k, k), ldak,
                     DIAG(k), ldak );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                 MORSE_TASK_zlaset(
                     &options,
                     MorseUpper, tempkn, tempkmin,
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index 7f3d33d36b2822afc70140eb6a42b5f8aeaf5082..3050eae201f4492d7af7e32d518645f617cb5ba1 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -77,7 +77,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
      */
     ws_worker = A->nb * ib;
 
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
     /* Worker space
      *
      * zunmqr = A->nb * ib
@@ -116,7 +116,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
                         A(M, k), ldaM,
                         DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseUpper, tempMm, tempkmin,
@@ -231,7 +231,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
                         A(M, k), ldaM,
                         DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseUpper, tempMm, tempkmin,
@@ -310,7 +310,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
                         A(M, k), ldaM,
                         DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseUpper, tempMm, tempkmin,
@@ -348,7 +348,7 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
                         A(M, k), ldaM,
                         DIAG(M, k), ldaM );
 #endif
-#if defined(CHAMELEON_USE_MAGMA)
+#if defined(CHAMELEON_USE_MAGMA) || defined(CHAMELEON_SIMULATION_MAGMA)
                     MORSE_TASK_zlaset(
                         &options,
                         MorseUpper, tempMm, tempkmin,