From bf115f194af53ca1ebb0a66b07416aa9ca5a9cf4 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 4 Nov 2015 07:11:08 +0000
Subject: [PATCH] Merge back the parsec branch

---
 CMakeLists.txt                                | 180 +++++++++---
 compute/pzlange.c                             |  17 +-
 compute/pzplgsy.c                             |   6 +-
 compute/pzplrnt.c                             |   2 +-
 compute/pztile.c                              |   6 +-
 compute/zplghe.c                              |   9 +-
 compute/zplgsy.c                              |   9 +-
 compute/zplrnt.c                              |   7 +-
 compute/ztile.c                               |   4 +-
 control/descriptor.c                          |   6 +-
 example/basic_zposv/CMakeLists.txt            |   6 +
 example/basic_zposv/CTestLists.cmake          |   2 +-
 example/lapack_to_morse/CMakeLists.txt        |   6 +
 include/morse_struct.h                        |   1 +
 runtime/CMakeLists.txt                        |   2 +
 runtime/parsec/CMakeLists.txt                 | 182 ++++++++++++
 runtime/parsec/codelets/codelet_dataflush.c   |  38 +++
 runtime/parsec/codelets/codelet_zasum.c       |  70 +++++
 runtime/parsec/codelets/codelet_zaxpy.c       |  67 +++++
 runtime/parsec/codelets/codelet_zgeadd.c      | 137 +++++++++
 runtime/parsec/codelets/codelet_zgelqt.c      | 137 +++++++++
 runtime/parsec/codelets/codelet_zgemm.c       |  99 +++++++
 runtime/parsec/codelets/codelet_zgeqrt.c      | 138 +++++++++
 runtime/parsec/codelets/codelet_zgessm.c      | 130 +++++++++
 runtime/parsec/codelets/codelet_zgessq.c      |  64 +++++
 runtime/parsec/codelets/codelet_zgetrf.c      |  77 +++++
 .../parsec/codelets/codelet_zgetrf_incpiv.c   | 131 +++++++++
 .../parsec/codelets/codelet_zgetrf_nopiv.c    | 120 ++++++++
 runtime/parsec/codelets/codelet_zhemm.c       |  96 +++++++
 runtime/parsec/codelets/codelet_zher2k.c      |  97 +++++++
 runtime/parsec/codelets/codelet_zherk.c       |  89 ++++++
 runtime/parsec/codelets/codelet_zhessq.c      |  64 +++++
 runtime/parsec/codelets/codelet_zlacpy.c      |  76 +++++
 runtime/parsec/codelets/codelet_zlag2c.c      | 122 ++++++++
 runtime/parsec/codelets/codelet_zlange.c      | 104 +++++++
 runtime/parsec/codelets/codelet_zlanhe.c      |  72 +++++
 runtime/parsec/codelets/codelet_zlansy.c      |  72 +++++
 runtime/parsec/codelets/codelet_zlantr.c      |  77 +++++
 runtime/parsec/codelets/codelet_zlaset.c      | 105 +++++++
 runtime/parsec/codelets/codelet_zlaset2.c     |  97 +++++++
 runtime/parsec/codelets/codelet_zlauum.c      |  64 +++++
 runtime/parsec/codelets/codelet_zpamm.c       | 244 ++++++++++++++++
 runtime/parsec/codelets/codelet_zplghe.c      |  74 +++++
 runtime/parsec/codelets/codelet_zplgsy.c      |  74 +++++
 runtime/parsec/codelets/codelet_zplrnt.c      |  71 +++++
 runtime/parsec/codelets/codelet_zplssq.c      | 118 ++++++++
 runtime/parsec/codelets/codelet_zpotrf.c      |  66 +++++
 runtime/parsec/codelets/codelet_zssssm.c      |  99 +++++++
 runtime/parsec/codelets/codelet_zsymm.c       |  93 ++++++
 runtime/parsec/codelets/codelet_zsyr2k.c      |  91 ++++++
 runtime/parsec/codelets/codelet_zsyrk.c       |  82 ++++++
 runtime/parsec/codelets/codelet_zsyssq.c      |  64 +++++
 .../parsec/codelets/codelet_zsytrf_nopiv.c    |  64 +++++
 runtime/parsec/codelets/codelet_ztile_zero.c  |  68 +++++
 runtime/parsec/codelets/codelet_ztradd.c      | 145 ++++++++++
 runtime/parsec/codelets/codelet_ztrasm.c      |  74 +++++
 runtime/parsec/codelets/codelet_ztrmm.c       |  87 ++++++
 runtime/parsec/codelets/codelet_ztrsm.c       |  81 ++++++
 runtime/parsec/codelets/codelet_ztrssq.c      |  71 +++++
 runtime/parsec/codelets/codelet_ztrtri.c      |  74 +++++
 runtime/parsec/codelets/codelet_ztslqt.c      |  85 ++++++
 runtime/parsec/codelets/codelet_ztsmlq.c      | 113 ++++++++
 runtime/parsec/codelets/codelet_ztsmqr.c      | 112 ++++++++
 runtime/parsec/codelets/codelet_ztsqrt.c      |  85 ++++++
 runtime/parsec/codelets/codelet_ztstrf.c      | 100 +++++++
 runtime/parsec/codelets/codelet_zttlqt.c      |  85 ++++++
 runtime/parsec/codelets/codelet_zttmlq.c      | 110 +++++++
 runtime/parsec/codelets/codelet_zttmqr.c      | 113 ++++++++
 runtime/parsec/codelets/codelet_zttqrt.c      |  85 ++++++
 runtime/parsec/codelets/codelet_zunmlq.c      |  97 +++++++
 runtime/parsec/codelets/codelet_zunmqr.c      |  95 +++++++
 runtime/parsec/control/runtime_async.c        |  72 +++++
 runtime/parsec/control/runtime_context.c      |  65 +++++
 runtime/parsec/control/runtime_control.c      | 113 ++++++++
 runtime/parsec/control/runtime_descriptor.c   | 268 ++++++++++++++++++
 runtime/parsec/control/runtime_options.c      |  49 ++++
 runtime/parsec/control/runtime_profiling.c    |  99 +++++++
 runtime/parsec/control/runtime_zlocality.c    |  34 +++
 runtime/parsec/control/runtime_zprofiling.c   |  22 ++
 runtime/parsec/include/morse_parsec.h         |  30 ++
 testing/CMakeLists.txt                        |  28 +-
 ...testing_starpu.py => chameleon_testing.py} |  26 +-
 testing/morse_testing_quark.py                | 179 ------------
 testing/testing_zlange.c                      |   2 +-
 timing/CMakeLists.txt                         |   6 +
 timing/time_zgeqrf.c                          |  10 +-
 timing/time_zpotrf.c                          |   4 +-
 87 files changed, 6327 insertions(+), 288 deletions(-)
 create mode 100644 runtime/parsec/CMakeLists.txt
 create mode 100644 runtime/parsec/codelets/codelet_dataflush.c
 create mode 100644 runtime/parsec/codelets/codelet_zasum.c
 create mode 100644 runtime/parsec/codelets/codelet_zaxpy.c
 create mode 100644 runtime/parsec/codelets/codelet_zgeadd.c
 create mode 100644 runtime/parsec/codelets/codelet_zgelqt.c
 create mode 100644 runtime/parsec/codelets/codelet_zgemm.c
 create mode 100644 runtime/parsec/codelets/codelet_zgeqrt.c
 create mode 100644 runtime/parsec/codelets/codelet_zgessm.c
 create mode 100644 runtime/parsec/codelets/codelet_zgessq.c
 create mode 100644 runtime/parsec/codelets/codelet_zgetrf.c
 create mode 100644 runtime/parsec/codelets/codelet_zgetrf_incpiv.c
 create mode 100644 runtime/parsec/codelets/codelet_zgetrf_nopiv.c
 create mode 100644 runtime/parsec/codelets/codelet_zhemm.c
 create mode 100644 runtime/parsec/codelets/codelet_zher2k.c
 create mode 100644 runtime/parsec/codelets/codelet_zherk.c
 create mode 100644 runtime/parsec/codelets/codelet_zhessq.c
 create mode 100644 runtime/parsec/codelets/codelet_zlacpy.c
 create mode 100644 runtime/parsec/codelets/codelet_zlag2c.c
 create mode 100644 runtime/parsec/codelets/codelet_zlange.c
 create mode 100644 runtime/parsec/codelets/codelet_zlanhe.c
 create mode 100644 runtime/parsec/codelets/codelet_zlansy.c
 create mode 100644 runtime/parsec/codelets/codelet_zlantr.c
 create mode 100644 runtime/parsec/codelets/codelet_zlaset.c
 create mode 100644 runtime/parsec/codelets/codelet_zlaset2.c
 create mode 100644 runtime/parsec/codelets/codelet_zlauum.c
 create mode 100644 runtime/parsec/codelets/codelet_zpamm.c
 create mode 100644 runtime/parsec/codelets/codelet_zplghe.c
 create mode 100644 runtime/parsec/codelets/codelet_zplgsy.c
 create mode 100644 runtime/parsec/codelets/codelet_zplrnt.c
 create mode 100644 runtime/parsec/codelets/codelet_zplssq.c
 create mode 100644 runtime/parsec/codelets/codelet_zpotrf.c
 create mode 100644 runtime/parsec/codelets/codelet_zssssm.c
 create mode 100644 runtime/parsec/codelets/codelet_zsymm.c
 create mode 100644 runtime/parsec/codelets/codelet_zsyr2k.c
 create mode 100644 runtime/parsec/codelets/codelet_zsyrk.c
 create mode 100644 runtime/parsec/codelets/codelet_zsyssq.c
 create mode 100644 runtime/parsec/codelets/codelet_zsytrf_nopiv.c
 create mode 100644 runtime/parsec/codelets/codelet_ztile_zero.c
 create mode 100644 runtime/parsec/codelets/codelet_ztradd.c
 create mode 100644 runtime/parsec/codelets/codelet_ztrasm.c
 create mode 100644 runtime/parsec/codelets/codelet_ztrmm.c
 create mode 100644 runtime/parsec/codelets/codelet_ztrsm.c
 create mode 100644 runtime/parsec/codelets/codelet_ztrssq.c
 create mode 100644 runtime/parsec/codelets/codelet_ztrtri.c
 create mode 100644 runtime/parsec/codelets/codelet_ztslqt.c
 create mode 100644 runtime/parsec/codelets/codelet_ztsmlq.c
 create mode 100644 runtime/parsec/codelets/codelet_ztsmqr.c
 create mode 100644 runtime/parsec/codelets/codelet_ztsqrt.c
 create mode 100644 runtime/parsec/codelets/codelet_ztstrf.c
 create mode 100644 runtime/parsec/codelets/codelet_zttlqt.c
 create mode 100644 runtime/parsec/codelets/codelet_zttmlq.c
 create mode 100644 runtime/parsec/codelets/codelet_zttmqr.c
 create mode 100644 runtime/parsec/codelets/codelet_zttqrt.c
 create mode 100644 runtime/parsec/codelets/codelet_zunmlq.c
 create mode 100644 runtime/parsec/codelets/codelet_zunmqr.c
 create mode 100644 runtime/parsec/control/runtime_async.c
 create mode 100644 runtime/parsec/control/runtime_context.c
 create mode 100644 runtime/parsec/control/runtime_control.c
 create mode 100644 runtime/parsec/control/runtime_descriptor.c
 create mode 100644 runtime/parsec/control/runtime_options.c
 create mode 100644 runtime/parsec/control/runtime_profiling.c
 create mode 100644 runtime/parsec/control/runtime_zlocality.c
 create mode 100644 runtime/parsec/control/runtime_zprofiling.c
 create mode 100644 runtime/parsec/include/morse_parsec.h
 rename testing/{morse_testing_starpu.py => chameleon_testing.py} (86%)
 delete mode 100755 testing/morse_testing_quark.py

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 983ea4ba9..135c9eeeb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -103,33 +103,49 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
     # -----------------------------
 
     # Create a list of possible runtime
-    set(CHAMELEON_SCHED_list "STARPU" "QUARK")
+    set(CHAMELEON_SCHED_list "PARSEC" "STARPU" "QUARK")
 
-    # Initially StarPU runtime is enabled
+    # Initially PaRSEC runtime is enabled
+    option(CHAMELEON_SCHED_PARSEC
+        "Enable PaRSEC scheduler as the default runtime
+        (Conflict with other CHAMELEON_SCHED_* options)" OFF)
     option(CHAMELEON_SCHED_STARPU
         "Enable StarPU scheduler as the default runtime
-        (Conflict with other CHAMELEON_SCHED_* options)" ON)
+        (Conflict with other CHAMELEON_SCHED_* options)" OFF)
     option(CHAMELEON_SCHED_QUARK
         "Enable Quark scheduler as the default runtime
         (Conflict with other CHAMELEON_SCHED_* options)" OFF)
 
+    # For now, we are able to compile only one runtime at a time, so we disable combinations of runtimes
     if (CHAMELEON_SCHED_QUARK)
         set(CHAMELEON_SCHED_STARPU OFF)
+        set(CHAMELEON_SCHED_PARSEC OFF)
     elseif (CHAMELEON_SCHED_STARPU)
         set(CHAMELEON_SCHED_QUARK OFF)
+        set(CHAMELEON_SCHED_PARSEC OFF)
+    elseif (CHAMELEON_SCHED_PARSEC)
+        set(CHAMELEON_SCHED_QUARK OFF)
+        set(CHAMELEON_SCHED_STARPU OFF)
+    endif()
+    # Set default to StarPU if nothing specific is required by the user
+    if ( NOT CHAMELEON_SCHED_STARPU AND NOT CHAMELEON_SCHED_PARSEC AND NOT CHAMELEON_SCHED_QUARK )
+        set(CHAMELEON_SCHED_STARPU ON)
     endif()
     if (CHAMELEON_SCHED_STARPU)
-        message("-- ${BoldGreen}CHAMELEON_SCHED_STARPU is set to ON: CHAMELEON uses StarPU runtime${ColourReset}")
-        message("-- ${BoldGreen}To use CHAMELEON with QUARK runtime: set CHAMELEON_SCHED_QUARK"
-        "to ON (CHAMELEON_SCHED_STARPU will be disabled)${ColourReset}")
+        message("-- ${BoldGreen}CHAMELEON_SCHED_STARPU is set to ON: CHAMELEON uses StarPU runtime\n"
+                "  To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
+                "  To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
+                "  (CHAMELEON_SCHED_STARPU will be disabled)${ColourReset}")
     elseif(CHAMELEON_SCHED_QUARK)
-        message("-- ${BoldGreen}CHAMELEON_SCHED_QUARK is set to ON: CHAMELEON uses QUARK runtime${ColourReset}")
-        message("-- ${BoldGreen}To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU"
-        "to ON (CHAMELEON_SCHED_QUARK will be disabled)${ColourReset}")
-    endif()
-
-    if (CHAMELEON_USE_MAGMA)
-        set(CHAMELEON_USE_CUDA ON)
+        message("-- ${BoldGreen}CHAMELEON_SCHED_QUARK is set to ON: CHAMELEON uses Quark runtime\n"
+                "  To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
+                "  To use CHAMELEON with PaRSEC runtime: set CHAMELEON_SCHED_PARSEC to ON\n"
+                "  (CHAMELEON_SCHED_QUARK will be disabled)${ColourReset}")
+    elseif(CHAMELEON_SCHED_PARSEC)
+        message("-- ${BoldGreen}CHAMELEON_SCHED_PARSEC is set to ON: CHAMELEON uses PaRSEC runtime\n"
+                "  To use CHAMELEON with StarPU runtime: set CHAMELEON_SCHED_STARPU to ON\n"
+                "  To use CHAMELEON with Quark  runtime: set CHAMELEON_SCHED_QUARK  to ON\n"
+                "  (CHAMELEON_SCHED_PARSEC will be disabled)${ColourReset}")
     endif()
 
     # Check that one, and only one, SCHED option is set to ON
@@ -146,54 +162,44 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
                 "the user should activate one (and only one) runtime. ")
     endif()
 
-    # Warning if not coherent options
-    if (CHAMELEON_USE_MPI AND NOT CHAMELEON_SCHED_STARPU)
-        message(WARNING "You have activated MPI but CHAMELEON_SCHED_STARPU is OFF.\n"
-        "You should use StarPU Runtime system if you want to benefit from MPI.\n"
-        "Use -DCHAMELEON_SCHED_QUARK=OFF -DCHAMELEON_SCHED_STARPU=ON at cmake \n"
-        "configure to do so.")
+    # Use intermediate variable since cmake_dependent_option doesn't have OR conditions
+    set(CHAMELEON_ENABLE_MPI OFF CACHE BOOL "Tells if MPI might be supported by the runtime")
+    if ( CHAMELEON_SCHED_PARSEC OR CHAMELEOM_SCHED_STARPU )
+         set(CHAMELEON_ENABLE_MPI ON)
     endif()
 
-    if(CHAMELEON_USE_CUDA AND NOT CHAMELEON_SCHED_STARPU)
-        message(WARNING "You have activated CUDA but CHAMELEON_SCHED_STARPU is OFF.\n"
-        "You should use StarPU Runtime system if you want to benefit from GPUs.\n"
-        "Use -DCHAMELEON_SCHED_QUARK=OFF -DCHAMELEON_SCHED_STARPU=ON at cmake \n"
-        "configure to do so.")
-    endif()
-
-    if(CHAMELEON_USE_MAGMA AND NOT CHAMELEON_SCHED_STARPU)
-        message(WARNING "You have activated MAGMA but CHAMELEON_SCHED_STARPU is OFF.\n"
-        "You should use StarPU Runtime system if you want to benefit from GPUs.\n"
-        "Use -DCHAMELEON_SCHED_QUARK=OFF -DCHAMELEON_SCHED_STARPU=ON at cmake \n"
-        "configure to do so.")
+    # Use intermediate variable since cmake_dependent_option doesn't have OR conditions
+    set(CHAMELEON_ENABLE_CUDA OFF CACHE BOOL "Tells if CUDA might be supported by the runtime")
+    if ( CHAMELEON_SCHED_PARSEC OR CHAMELEOM_SCHED_STARPU )
+         set(CHAMELEON_ENABLE_CUDA ON)
     endif()
 
     # Additional options
     # ------------------
 
-    # Enable the distributed interface (allowed only when StarPU is enabled)
+    # Enable the distributed interface (allowed only when StarPU or PaRSEC is enabled)
     # TODO: Default should be changed to ON/OFF when it will be ok
     cmake_dependent_option(CHAMELEON_USE_MPI
                         "Enable distributed memory through MPI" OFF
-                        "CHAMELEON_SCHED_STARPU" OFF)
-    if (NOT CHAMELEON_USE_MPI)
-        message("-- ${BoldGreen}CHAMELEON_USE_MPI is set to OFF, turn it ON to use MPI (only with StarPU)${ColourReset}")
+                        "CHAMELEON_ENABLE_MPI" OFF)
+    if (CHAMELEON_ENABLE_MPI AND NOT CHAMELEON_USE_MPI)
+        message("-- ${BoldGreen}CHAMELEON_USE_MPI is set to OFF, turn it ON to use MPI (unsupported by Quark)${ColourReset}")
     endif()
 
-    # Enable Cuda kernels if StarPU (only if StarPU runtime is enabled)
+    # Enable Cuda kernels if StarPU (only if StarPU or PaRSEC runtime is enabled)
     # TODO: Default should be changed to ON/OFF when it will be ok
     cmake_dependent_option(CHAMELEON_USE_CUDA
                         "Enable CUDA kernels" OFF
-                        "CHAMELEON_SCHED_STARPU" OFF)
-    if (NOT CHAMELEON_USE_CUDA)
-        message("-- ${BoldGreen}CHAMELEON_USE_CUDA is set to OFF, turn it ON to use CUDA (only with StarPU)${ColourReset}")
+                        "CHAMELEON_ENABLE_CUDA" OFF)
+    if (CHAMELEON_ENABLE_CUDA AND NOT CHAMELEON_USE_CUDA)
+        message("-- ${BoldGreen}CHAMELEON_USE_CUDA is set to OFF, turn it ON to use CUDA (unsupported by Quark)${ColourReset}")
     endif()
 
     # Enable MAGMA advanced kernels if CUDA is enabled
     cmake_dependent_option(CHAMELEON_USE_MAGMA
                         "Enable MAGMA Cuda kernels" OFF
                         "CHAMELEON_USE_CUDA" OFF)
-    if (NOT CHAMELEON_USE_MAGMA)
+    if (CHAMELEON_USE_CUDA AND NOT CHAMELEON_USE_MAGMA)
         message("-- ${BoldGreen}CHAMELEON_USE_MAGMA is set to OFF, turn it ON to use MAGMA (only with StarPU)${ColourReset}")
     endif()
 
@@ -681,8 +687,8 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
                                 Print_Find_Library_Status(starpu ${starpu_lib})
                             endif ()
                         endforeach()
-                    endif()
-                endif()
+                    endif ()
+                endif ()
             else(MORSE_VERBOSE_FIND_PACKAGE)
                 message(WARNING "StarPU library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF"
                 "Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
@@ -702,7 +708,89 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
 
     endif( CHAMELEON_SCHED_STARPU )
 
-    # try to find quark runtime
+    if( CHAMELEON_SCHED_PARSEC )
+
+        # create list of components in order to make a single call to find_package(starpu...)
+        set(PARSEC_COMPONENT_LIST "HWLOC")
+        if(CHAMELEON_USE_MPI)
+            list(APPEND PARSEC_COMPONENT_LIST "MPI")
+        endif()
+        if(CHAMELEON_USE_CUDA)
+            list(APPEND PARSEC_COMPONENT_LIST "CUDA")
+        endif()
+        # TODO: Add a CHAMELEON_WITH_PROFILING option that enables Fxt for StarPU, or PAPI for PaRSEC
+        #if(CHAMELEON_WITH_PROFILING)
+        #    list(APPEND PARSEC_COMPONENT_LIST "PAPI")
+        #endif()
+
+        find_package(PARSEC COMPONENTS ${PARSEC_COMPONENT_LIST})
+
+        # Add definition and include_dir if found
+        if(PARSEC_FOUND)
+            message("-- ${Blue}Add definition CHAMELEON_SCHED_PARSEC"
+            " - Activate PaRSEC in Chameleon${ColourReset}")
+
+          add_definitions(-DCHAMELEON_SCHED_PARSEC) # TODO: remove that
+          include_directories(${PARSEC_INCLUDE_DIRS_DEP})
+          include_directories(${PARSEC_INCLUDE_DIRS}/daguepp)
+          set(CMAKE_REQUIRED_INCLUDES "${PARSEC_INCLUDE_DIRS_DEP}")
+
+          if(PARSEC_LINKER_FLAGS)
+               list(APPEND CMAKE_EXE_LINKER_FLAGS "${PARSEC_LINKER_FLAGS}")
+          endif()
+          foreach(libdir ${PARSEC_LIBRARY_DIRS_DEP})
+              list(APPEND CMAKE_REQUIRED_FLAGS "-L${libdir}")
+          endforeach()
+          string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+          set(CMAKE_REQUIRED_LIBRARIES "${PARSEC_LIBRARIES_DEP}")
+
+          if(HWLOC_FOUND AND HWLOC_LIBRARY_DIRS)
+                # the RPATH to be used when installing
+              list(APPEND CMAKE_INSTALL_RPATH "${HWLOC_LIBRARY_DIRS}")
+          endif()
+          if(PARSEC_FOUND AND PARSEC_LIBRARY_DIRS_DEP)
+              # the RPATH to be used when installing
+              list(APPEND CMAKE_INSTALL_RPATH "${PARSEC_LIBRARY_DIRS_DEP}")
+          endif()
+        else ( PARSEC_FOUND )
+            if(MORSE_VERBOSE_FIND_PACKAGE)
+                if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+                    if (NOT HWLOC_hwloc.h_DIRS)
+                        Print_Find_Header_Status(hwloc hwloc.h)
+                    endif ()
+                    if (NOT HWLOC_hwloc_LIBRARY)
+                        Print_Find_Library_Status(hwloc libhwloc)
+                    endif ()
+                endif()
+                if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
+                  foreach(parsec_hdr ${PARSEC_hdrs_to_find})
+                        if (NOT PARSEC_${parsec_hdr}_INCLUDE_DIRS)
+                            Print_Find_Header_Status(parsec ${parsec_hdr})
+                        endif ()
+                    endforeach()
+                    if(PARSEC_VERSION_STRING)
+                        foreach(parsec_lib ${PARSEC_libs_to_find})
+                            if (NOT PARSEC_${parsec_lib}_LIBRARY)
+                                Print_Find_Library_Status(parsec ${parsec_lib})
+                            endif ()
+                        endforeach()
+                    endif()
+                endif()
+            else(MORSE_VERBOSE_FIND_PACKAGE)
+                message(WARNING "PaRSEC library has not been found and MORSE_VERBOSE_FIND_PACKAGE is set to OFF"
+                "Try to activate MORSE_VERBOSE_FIND_PACKAGE option (-DMORSE_VERBOSE_FIND_PACKAGE=ON) to get some hints for the detection")
+            endif(MORSE_VERBOSE_FIND_PACKAGE)
+            if(NOT HWLOC_FOUND OR NOT HWLOC_LIBRARIES)
+                message(FATAL_ERROR "hwloc library is required but has not been found")
+            endif()
+            if( (NOT PARSEC_FOUND) OR (NOT PARSEC_LIBRARIES_DEP) )
+                message(FATAL_ERROR "PaRSEC library is required but has not been found")
+            endif()
+        endif ( PARSEC_FOUND )
+
+    endif( CHAMELEON_SCHED_PARSEC )
+
+          # try to find quark runtime
     if( CHAMELEON_SCHED_QUARK )
 
         find_package(QUARK COMPONENTS HWLOC)
@@ -773,6 +861,12 @@ if (MORSE_DISTRIB_DIR OR EXISTS "${CMAKE_SOURCE_DIR}/cmake_modules/")
               ${STARPU_SHM_LIBRARIES}
             )
         endif()
+    elseif(CHAMELEON_SCHED_PARSEC)
+        list(APPEND CHAMELEON_DEP
+          -lchameleon_parsec
+          ${PARSEC_LIBRARIES_DEP}
+          )
+        link_directories(${PARSEC_LIBRARY_DIRS_DEP})
     elseif(CHAMELEON_SCHED_QUARK)
         list(APPEND CHAMELEON_DEP
           -lchameleon_quark
diff --git a/compute/pzlange.c b/compute/pzlange.c
index f56bb98de..576fa7bb6 100644
--- a/compute/pzlange.c
+++ b/compute/pzlange.c
@@ -158,10 +158,7 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
             }
         }
         RUNTIME_sequence_wait(morse, sequence);
-        *result = *(double *)VECNORMS_STEP1->get_blkaddr(VECNORMS_STEP1, A->myrank / A->q, A->myrank % A->q );
-        MORSE_Desc_Destroy( &(VECNORMS_STEP1) );
         MORSE_Desc_Destroy( &(VECNORMS_STEP2) );
-        MORSE_Desc_Destroy( &(RESULT) );
         break;
 
         /*
@@ -278,10 +275,7 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
             }
         }
         RUNTIME_sequence_wait(morse, sequence);
-        *result = *(double *)VECNORMS_STEP1->get_blkaddr(VECNORMS_STEP1, A->myrank / A->q, A->myrank % A->q );
-        MORSE_Desc_Destroy( &(VECNORMS_STEP1) );
         MORSE_Desc_Destroy( &(VECNORMS_STEP2) );
-        MORSE_Desc_Destroy( &(RESULT) );
         break;
 
         /*
@@ -349,9 +343,6 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
         }
 
         RUNTIME_sequence_wait(morse, sequence);
-        *result = *(double *)VECNORMS_STEP1->get_blkaddr(VECNORMS_STEP1, A->myrank / A->q, A->myrank % A->q );
-        MORSE_Desc_Destroy( &(VECNORMS_STEP1) );
-        MORSE_Desc_Destroy( &(RESULT) );
         break;
 
         /*
@@ -413,10 +404,12 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
         }
 
         RUNTIME_sequence_wait(morse, sequence);
-        *result = *(double *)VECNORMS_STEP1->get_blkaddr(VECNORMS_STEP1, A->myrank / A->q, A->myrank % A->q );
-        MORSE_Desc_Destroy( &(VECNORMS_STEP1) );
-        MORSE_Desc_Destroy( &(RESULT) );
     }
+
+    *result = *(double *)VECNORMS_STEP1->get_blkaddr(VECNORMS_STEP1, A->myrank / A->q, A->myrank % A->q );
+
+    MORSE_Desc_Destroy( &(VECNORMS_STEP1) );
+    MORSE_Desc_Destroy( &(RESULT) );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
     MORSE_TASK_dataflush_all();
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index deecf944c..f2703c0a5 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -50,11 +50,11 @@ void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_desc_t *A, unsigned long long
     for (m = 0; m < A->mt; m++) {
         tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
         ldam = BLKLDD(A, m);
-        
+
         for (n = 0; n < A->nt; n++) {
             tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
-            
-            MORSE_TASK_zplgsy( 
+
+            MORSE_TASK_zplgsy(
                 &options,
                 bump, tempmm, tempnn, A(m, n), ldam,
                 A->m, m*A->mb, n*A->nb, seed );
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 36f6992bb..f0b557626 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -54,7 +54,7 @@ void morse_pzplrnt( MORSE_desc_t *A, unsigned long long int seed,
         for (n = 0; n < A->nt; n++) {
             tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-            MORSE_TASK_zplrnt( 
+            MORSE_TASK_zplrnt(
                 &options,
                 tempmm, tempnn, A(m, n), ldam,
                 A->m, m*A->mb, n*A->nb, seed );
diff --git a/compute/pztile.c b/compute/pztile.c
index 7c907f1cd..4f94eebb8 100644
--- a/compute/pztile.c
+++ b/compute/pztile.c
@@ -77,7 +77,7 @@ void morse_pzlapack_to_tile(MORSE_Complex64_t *Af77, int lda, MORSE_desc_t *dA,
         }
     }
 
-    RUNTIME_barrier( morse );
+    RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
     MORSE_TASK_dataflush_all();
     RUNTIME_desc_getoncpu( &dB );
@@ -133,7 +133,7 @@ void morse_pztile_to_lapack(MORSE_desc_t *dA, MORSE_Complex64_t *Af77, int lda,
         }
     }
 
-    RUNTIME_barrier( morse );
+    RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
     MORSE_TASK_dataflush_all();
     RUNTIME_desc_getoncpu( &dB );
@@ -174,7 +174,7 @@ void morse_pztile_zero(MORSE_desc_t *dA, MORSE_sequence_t *sequence, MORSE_reque
         }
     }
 
-    RUNTIME_barrier( morse );
+    RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
     MORSE_TASK_dataflush_all();
 }
diff --git a/compute/zplghe.c b/compute/zplghe.c
index 0162107f5..70c0da81d 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -37,7 +37,7 @@
  *******************************************************************************
  *
  * @param[in] bump
- *          The value to add to the diagonal to be sure 
+ *          The value to add to the diagonal to be sure
  *          to have a positive definite matrix.
  *
  * @param[in] N
@@ -104,17 +104,16 @@ int MORSE_zplghe( double bump, int N,
         morse_error("MORSE_zplghe", "morse_tune() failed");
         return status;
     }
-    
+
     /* Set NT */
     NB = MORSE_NB;
     morse_sequence_create(morse, &sequence);
-    
+
     morse_zdesc_alloc(descA, NB, NB, LDA, N, 0, 0, N, N, morse_desc_mat_free(&descA));
 
     /* Call the tile interface */
     MORSE_zplghe_Tile_Async( bump, &descA, seed, sequence, &request );
 
-    morse_sequence_wait(morse, sequence);
     morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
     morse_sequence_wait(morse, sequence);
     morse_desc_mat_free(&descA);
@@ -138,7 +137,7 @@ int MORSE_zplghe( double bump, int N,
  *******************************************************************************
  *
  * @param[in] bump
- *          The value to add to the diagonal to be sure 
+ *          The value to add to the diagonal to be sure
  *          to have a positive definite matrix.
  *
  * @param[in] A
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index 20a9c9f29..c20e3186b 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -37,7 +37,7 @@
  *******************************************************************************
  *
  * @param[in] bump
- *          The value to add to the diagonal to be sure 
+ *          The value to add to the diagonal to be sure
  *          to have a positive definite matrix.
  *
  * @param[in] N
@@ -104,17 +104,16 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, int N,
         morse_error("MORSE_zplgsy", "morse_tune() failed");
         return status;
     }
-    
+
     /* Set NT */
     NB = MORSE_NB;
     morse_sequence_create(morse, &sequence);
-    
+
     morse_zdesc_alloc(descA, NB, NB, LDA, N, 0, 0, N, N, morse_desc_mat_free(&descA));
 
     /* Call the tile interface */
     MORSE_zplgsy_Tile_Async( bump, &descA, seed, sequence, &request );
 
-    morse_sequence_wait(morse, sequence);
     morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
     morse_sequence_wait(morse, sequence);
     morse_desc_mat_free(&descA);
@@ -138,7 +137,7 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, int N,
  *******************************************************************************
  *
  * @param[in] bump
- *          The value to add to the diagonal to be sure 
+ *          The value to add to the diagonal to be sure
  *          to have a positive definite matrix.
  *
  * @param[in] A
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index efd560da6..5cb826e20 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -107,7 +107,7 @@ int MORSE_zplrnt( int M, int N,
         morse_error("MORSE_zplrnt", "morse_tune() failed");
         return status;
     }
-    
+
     /* Set NT */
     NB = MORSE_NB;
     morse_sequence_create(morse, &sequence);
@@ -116,8 +116,7 @@ int MORSE_zplrnt( int M, int N,
     /* Call the tile interface */
     MORSE_zplrnt_Tile_Async( &descA, seed, sequence, &request );
 
-    morse_sequence_wait(morse, sequence);
-    morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
+    morse_zooptile2lap(descA, A, NB, NB, LDA, N, sequence, &request);
     morse_sequence_wait(morse, sequence);
     morse_desc_mat_free(&descA);
 
@@ -213,7 +212,7 @@ int MORSE_zplrnt_Tile( MORSE_desc_t *A,
  ******************************************************************************/
 int MORSE_zplrnt_Tile_Async( MORSE_desc_t     *A,
                               unsigned long long int seed,
-                              MORSE_sequence_t *sequence, 
+                              MORSE_sequence_t *sequence,
                               MORSE_request_t  *request)
 {
     MORSE_context_t *morse;
diff --git a/compute/ztile.c b/compute/ztile.c
index de490f725..5d95c523d 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -82,7 +82,7 @@ int MORSE_zLapack_to_Tile(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *A)
 
     morse_pzlapack_to_tile( Af77, LDA, A, sequence, &request);
 
-    RUNTIME_barrier( morse );
+    RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_desc_getoncpu( A );
 
     status = sequence->status;
@@ -207,7 +207,7 @@ int MORSE_zTile_to_Lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int LDA)
     morse_sequence_create(morse, &sequence);
 
     morse_pztile_to_lapack( A, Af77, LDA, sequence, &request);
-    RUNTIME_barrier( morse );
+    RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_desc_getoncpu( A );
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/control/descriptor.c b/control/descriptor.c
index 74a60b56f..cb77b814b 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -52,7 +52,7 @@ MORSE_desc_t morse_desc_init(MORSE_enum dtyp, int mb, int nb, int bsiz,
     // Matrix properties
     desc.dtyp = dtyp;
     // seems useless
-    //desc.styp = MorseCCRB;
+    desc.styp = MorseCCRB;
     desc.mb = mb;
     desc.nb = nb;
     desc.bsiz = bsiz;
@@ -137,7 +137,7 @@ MORSE_desc_t morse_desc_init_diag(MORSE_enum dtyp, int mb, int nb, int bsiz,
     // Matrix properties
     desc.dtyp = dtyp;
     // seems useless
-    //desc.styp = MorseCCRB;
+    desc.styp = MorseCCRB;
     desc.mb = mb;
     desc.nb = nb;
     desc.bsiz = bsiz;
@@ -225,7 +225,7 @@ MORSE_desc_t morse_desc_init_user(MORSE_enum dtyp, int mb, int nb, int bsiz,
     // Matrix properties
     desc.dtyp = dtyp;
     // seems useless
-    //desc.styp = MorseCCRB
+    desc.styp = MorseCCRB;
     desc.mb = mb;
     desc.nb = nb;
     desc.bsiz = bsiz;
diff --git a/example/basic_zposv/CMakeLists.txt b/example/basic_zposv/CMakeLists.txt
index ec479cc05..4e62def44 100644
--- a/example/basic_zposv/CMakeLists.txt
+++ b/example/basic_zposv/CMakeLists.txt
@@ -59,6 +59,12 @@ if(CHAMELEON_SCHED_STARPU)
         )
     endif()
     link_directories(${STARPU_LIBRARY_DIRS})
+elseif(CHAMELEON_SCHED_PARSEC)
+    list(APPEND libs_for_examples
+         chameleon_parsec
+         ${PARSEC_LIBRARIES_DEP}
+      )
+    link_directories(${PARSEC_LIBRARY_DIRS_DEP})
 elseif(CHAMELEON_SCHED_QUARK)
     list(APPEND libs_for_examples
          chameleon_quark
diff --git a/example/basic_zposv/CTestLists.cmake b/example/basic_zposv/CTestLists.cmake
index cab9e54b5..1bbb1e46d 100644
--- a/example/basic_zposv/CTestLists.cmake
+++ b/example/basic_zposv/CTestLists.cmake
@@ -2,7 +2,7 @@
 # Check Example basic_zposv
 #
 
-set(TESTLIST 
+set(TESTLIST
     posv_morse_functions
     posv_users_functions
     )
diff --git a/example/lapack_to_morse/CMakeLists.txt b/example/lapack_to_morse/CMakeLists.txt
index b40720e51..bbcbdf744 100644
--- a/example/lapack_to_morse/CMakeLists.txt
+++ b/example/lapack_to_morse/CMakeLists.txt
@@ -54,6 +54,12 @@ if(CHAMELEON_SCHED_STARPU)
         )
     endif()
     link_directories(${STARPU_LIBRARY_DIRS})
+elseif(CHAMELEON_SCHED_PARSEC)
+    list(APPEND libs_for_ltm
+         chameleon_parsec
+         ${PARSEC_LIBRARIES_DEP}
+      )
+    link_directories(${PARSEC_LIBRARY_DIRS_DEP})
 elseif(CHAMELEON_SCHED_QUARK)
     list(APPEND libs_for_ltm
          chameleon_quark
diff --git a/include/morse_struct.h b/include/morse_struct.h
index 75c686a04..e2e671c22 100644
--- a/include/morse_struct.h
+++ b/include/morse_struct.h
@@ -36,6 +36,7 @@
  *         - StarPU
  **/
 typedef enum morse_sched_e {
+  RUNTIME_SCHED_PARSEC,
   RUNTIME_SCHED_QUARK,
   RUNTIME_SCHED_STARPU,
 } MORSE_sched_t;
diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt
index d5fbcad60..b0d76eeba 100644
--- a/runtime/CMakeLists.txt
+++ b/runtime/CMakeLists.txt
@@ -30,6 +30,8 @@
 # ----------------------------
 if( CHAMELEON_SCHED_QUARK )
     add_subdirectory(quark)
+elseif( CHAMELEON_SCHED_PARSEC )
+    add_subdirectory(parsec)
 elseif( CHAMELEON_SCHED_STARPU )
     add_subdirectory(starpu)
 endif()
diff --git a/runtime/parsec/CMakeLists.txt b/runtime/parsec/CMakeLists.txt
new file mode 100644
index 000000000..3128bd1eb
--- /dev/null
+++ b/runtime/parsec/CMakeLists.txt
@@ -0,0 +1,182 @@
+###
+#
+# @copyright (c) 2009-2015 The University of Tennessee and The University
+#                          of Tennessee Research Foundation.
+#                          All rights reserved.
+# @copyright (c) 2012-2015 Inria. All rights reserved.
+# @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+#
+###
+#
+#  @file CMakeLists.txt
+#
+#  @project CHAMELEON
+#  CHAMELEON is a software package provided by:
+#     Inria Bordeaux - Sud-Ouest,
+#     Univ. of Tennessee,
+#     King Abdullah Univesity of Science and Technology
+#     Univ. of California Berkeley,
+#     Univ. of Colorado Denver.
+#
+#  @version 0.9.0
+#  @author Cedric Castagnede
+#  @author Emmanuel Agullo
+#  @author Mathieu Faverge
+#  @author Florent Pruvost
+#  @date 13-07-2012
+#
+###
+
+
+# check if magma_dgetrf_incpiv_gpu is accessible in libmagma and activate it in chameleon
+if ( CBLAS_FOUND AND LAPACKE_FOUND AND LAPACK_FOUND AND CUDA_FOUND AND CUDA_CUBLAS_LIBRARIES AND MAGMA_FOUND )
+    set(CMAKE_REQUIRED_LIBRARIES "${CBLAS_LIBRARIES};${LAPACKE_LIBRARIES};${LAPACK_SEQ_LIBRARIES};${CUDA_LIBRARIES};${CUDA_CUBLAS_LIBRARIES};${MAGMA_LIBRARIES};${COREBLAS_LIBRARIES}")
+    unset(MAGMA_DGETRF_INCPIV_GPU_FOUND CACHE)
+    check_function_exists(magma_dgetrf_incpiv_gpu MAGMA_DGETRF_INCPIV_GPU_FOUND)
+    if ( MAGMA_DGETRF_INCPIV_GPU_FOUND )
+        message(STATUS "Set HAVE_MAGMA_GETRF_INCPIV_GPU")
+        add_definitions(-DHAVE_MAGMA_GETRF_INCPIV_GPU)
+    endif()
+endif()
+
+# Generate headers for all possible precisions
+# --------------------------------------------
+set(RUNTIME_HDRS_GENERATED "")
+#set(ZHDR
+#)
+#
+#precisions_rules_py(RUNTIME_HDRS_GENERATED "${ZHDR}"
+#                    PRECISIONS "s;d;c;z;ds;zc"
+#                    TARGETDIR  "include")
+
+# Define the list of headers
+# --------------------------
+set(RUNTIME_HDRS
+    include/morse_parsec.h
+    ${RUNTIME_HDRS_GENERATED}
+    )
+
+# Force generation of headers
+# ---------------------------
+add_custom_target(runtime_parsec_include ALL SOURCES ${RUNTIME_HDRS})
+
+# Generate the morse common for all possible precisions
+# -----------------------------------------------------
+set(RUNTIME_COMMON_GENERATED "")
+set(ZSRC
+    control/runtime_zprofiling.c
+    control/runtime_zlocality.c
+    )
+
+precisions_rules_py(RUNTIME_COMMON_GENERATED "${ZSRC}"
+                    PRECISIONS "${CHAMELEON_PRECISION}"
+                    TARGETDIR "control")
+
+set(RUNTIME_COMMON
+    control/runtime_control.c
+    control/runtime_context.c
+    control/runtime_descriptor.c
+    control/runtime_async.c
+    control/runtime_options.c
+    control/runtime_profiling.c
+    codelets/codelet_dataflush.c
+    ${RUNTIME_COMMON_GENERATED}
+    )
+
+# Generate the morse sources for all possible precisions
+# ------------------------------------------------------
+set(RUNTIME_SRCS_GENERATED "")
+set(ZSRC
+    codelets/codelet_ztile_zero.c
+    codelets/codelet_zasum.c
+    ##################
+    # BLAS 1
+    ##################
+    codelets/codelet_zaxpy.c
+    ##################
+    # BLAS 3
+    ##################
+    codelets/codelet_zgemm.c
+    codelets/codelet_zhemm.c
+    codelets/codelet_zher2k.c
+    codelets/codelet_zherk.c
+    codelets/codelet_zsymm.c
+    codelets/codelet_zsyr2k.c
+    codelets/codelet_zsyrk.c
+    codelets/codelet_ztrmm.c
+    codelets/codelet_ztrsm.c
+    ##################
+    # LAPACK
+    ##################
+    codelets/codelet_zgeadd.c
+    codelets/codelet_zgelqt.c
+    codelets/codelet_zgeqrt.c
+    codelets/codelet_zgessm.c
+    codelets/codelet_zgessq.c
+    codelets/codelet_zgetrf.c
+    codelets/codelet_zgetrf_incpiv.c
+    codelets/codelet_zgetrf_nopiv.c
+    codelets/codelet_zhessq.c
+    codelets/codelet_zlacpy.c
+    codelets/codelet_zlange.c
+    codelets/codelet_zlanhe.c
+    codelets/codelet_zlansy.c
+    codelets/codelet_zlantr.c
+    codelets/codelet_zlaset2.c
+    codelets/codelet_zlaset.c
+    codelets/codelet_zlauum.c
+    codelets/codelet_zplghe.c
+    codelets/codelet_zplgsy.c
+    codelets/codelet_zplrnt.c
+    codelets/codelet_zplssq.c
+    codelets/codelet_zpotrf.c
+    codelets/codelet_zssssm.c
+    codelets/codelet_zsyssq.c
+    codelets/codelet_zsytrf_nopiv.c
+    codelets/codelet_ztradd.c
+    codelets/codelet_ztrasm.c
+    codelets/codelet_ztrssq.c
+    codelets/codelet_ztrtri.c
+    codelets/codelet_ztslqt.c
+    codelets/codelet_ztsmlq.c
+    codelets/codelet_ztsmqr.c
+    codelets/codelet_ztsqrt.c
+    codelets/codelet_ztstrf.c
+    codelets/codelet_zttlqt.c
+    codelets/codelet_zttmlq.c
+    codelets/codelet_zttmqr.c
+    codelets/codelet_zttqrt.c
+    codelets/codelet_zunmlq.c
+    codelets/codelet_zunmqr.c
+    )
+list(REMOVE_DUPLICATES ZSRC)
+
+precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
+                    PRECISIONS "${CHAMELEON_PRECISION}"
+                    TARGETDIR "codelets")
+
+set(RUNTIME_SRCS
+  ${RUNTIME_COMMON}
+  ${RUNTIME_SRCS_GENERATED}
+  )
+
+# Add library
+# -----------
+add_library(chameleon_parsec ${RUNTIME_SRCS})
+set_property(TARGET chameleon_parsec PROPERTY LINKER_LANGUAGE Fortran)
+
+add_dependencies(chameleon_parsec
+  chameleon_include
+  coreblas_include
+  control_include
+  runtime_parsec_include
+)
+
+# installation
+# ------------
+install(TARGETS chameleon_parsec
+        DESTINATION lib)
+
+###
+### END CMakeLists.txt
+###
diff --git a/runtime/parsec/codelets/codelet_dataflush.c b/runtime/parsec/codelets/codelet_dataflush.c
new file mode 100644
index 000000000..31f42b904
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_dataflush.c
@@ -0,0 +1,38 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+
+#include "runtime/parsec/include/morse_parsec.h"
+
+void MORSE_TASK_dataflush(MORSE_option_t *options,
+                          MORSE_desc_t *A, int Am, int An)
+{
+    (void)options; (void)A;
+
+    /*
+     * This is useful for StarPU implementation, if it happens in Quark, it will
+     * need to be done carefuly to not break both runtimes.
+     */
+}
+
+void MORSE_TASK_dataflush_all()
+{
+}
diff --git a/runtime/parsec/codelets/codelet_zasum.c b/runtime/parsec/codelets/codelet_zasum.c
new file mode 100644
index 000000000..d939961a3
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zasum.c
@@ -0,0 +1,70 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zasum.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_dzasum_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *storev;
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &storev,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gwork
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *work = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gwork);
+
+    CORE_dzasum(*storev, *uplo, *M, *N, A, *lda, work);
+
+    return 0;
+}
+
+void MORSE_TASK_dzasum(MORSE_option_t *options,
+                       MORSE_enum storev, MORSE_enum uplo, int M, int N,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_dzasum_parsec,               "zasum",
+                             sizeof(MORSE_enum),    &storev,                           VALUE,
+                             sizeof(MORSE_enum),    &uplo,                             VALUE,
+                             sizeof(int),           &M,                                VALUE,
+                             sizeof(int),           &N,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zaxpy.c b/runtime/parsec/codelets/codelet_zaxpy.c
new file mode 100644
index 000000000..c8d77ac6c
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zaxpy.c
@@ -0,0 +1,67 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zaxpy.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zaxpy_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *M;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *incA;
+    dague_data_copy_t *gB;
+    int *incB;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &incA,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &incB
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_zaxpy(*M, *alpha, A, *incA, B, *incB);
+
+    return 0;
+}
+
+void MORSE_TASK_zaxpy(MORSE_option_t *options,
+                      int M, MORSE_Complex64_t *alpha,
+                      MORSE_desc_t *A, int Am, int An, int incA,
+                      MORSE_desc_t *B, int Bm, int Bn, int incB)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zaxpy_parsec,      "axpy",
+                             sizeof(int),                        &M,         VALUE,
+                             sizeof(MORSE_Complex64_t),          alpha,      VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),           &incA,                   VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &incB,                   VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgeadd.c b/runtime/parsec/codelets/codelet_zgeadd.c
new file mode 100644
index 000000000..9b994e2c9
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgeadd.c
@@ -0,0 +1,137 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelet_zgeadd.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @comment This file has been automatically generated
+ *          from Plasma 2.5.0 for MORSE 1.0.0
+ * @author Mathieu Faverge
+ * @author Reazul Hoque
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zgeadd_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *trans;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *LDA;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gB;
+    int *LDB;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB
+                        );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_zgeadd(*trans, *M, *N, *alpha, A, *LDA, *beta, B, *LDB);
+
+    return 0;
+}
+
+/**
+ ******************************************************************************
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  MORSE_TASK_zgeadd adds two general matrices together as in PBLAS pzgeadd.
+ *
+ *       B <- alpha * op(A)  + beta * B,
+ *
+ * where op(X) = X, X', or conj(X')
+ *
+ *******************************************************************************
+ *
+ * @param[in] trans
+ *          Specifies whether the matrix A is non-transposed, transposed, or
+ *          conjugate transposed
+ *          = MorseNoTrans:   op(A) = A
+ *          = MorseTrans:     op(A) = A'
+ *          = MorseConjTrans: op(A) = conj(A')
+ *
+ * @param[in] M
+ *          Number of rows of the matrices op(A) and B.
+ *
+ * @param[in] N
+ *          Number of columns of the matrices op(A) and B.
+ *
+ * @param[in] alpha
+ *          Scalar factor of A.
+ *
+ * @param[in] A
+ *          Matrix of size LDA-by-N, if trans = MorseNoTrans, LDA-by-M
+ *          otherwise.
+ *
+ * @param[in] LDA
+ *          Leading dimension of the array A. LDA >= max(1,k), with k=M, if
+ *          trans = MorseNoTrans, and k=N otherwise.
+ *
+ * @param[in] beta
+ *          Scalar factor of B.
+ *
+ * @param[in,out] B
+ *          Matrix of size LDB-by-N.
+ *          On exit, B = alpha * op(A) + beta * B
+ *
+ * @param[in] LDB
+ *          Leading dimension of the array B. LDB >= max(1,M)
+ *
+ *******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *          \retval <0 if -i, the i-th argument had an illegal value
+ *
+ ******************************************************************************/
+void MORSE_TASK_zgeadd(MORSE_option_t *options,
+                       MORSE_enum trans, int m, int n, int nb,
+                       MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_Complex64_t beta,  MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_zgeadd_parsec, "geadd",
+        sizeof(MORSE_enum),        &trans, VALUE,
+        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 | REGION_FULL,
+        sizeof(int),               &lda,   VALUE,
+        sizeof(MORSE_Complex64_t), &beta,  VALUE,
+        PASSED_BY_REF,              RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+        sizeof(int),               &ldb,   VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgelqt.c b/runtime/parsec/codelets/codelet_zgelqt.c
new file mode 100644
index 000000000..a61c8f385
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgelqt.c
@@ -0,0 +1,137 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgelqt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zgelqt - computes a LQ factorization of a complex M-by-N tile A: A = L * Q.
+ *
+ *  The tile Q is represented as a product of elementary reflectors
+ *
+ *    Q = H(k)' . . . H(2)' H(1)', where k = min(M,N).
+ *
+ *  Each H(i) has the form
+ *
+ *    H(i) = I - tau * v * v'
+ *
+ *  where tau is a complex scalar, and v is a complex vector with
+ *  v(1:i-1) = 0 and v(i) = 1; conjg(v(i+1:n)) is stored on exit in
+ *  A(i,i+1:n), and tau in TAU(i).
+ *
+ *******************************************************************************
+ *
+ * @param[in] M
+ *          The number of rows of the tile A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the tile A.  N >= 0.
+ *
+ * @param[in] IB
+ *         The inner-blocking size.  IB >= 0.
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile A.
+ *         On exit, the elements on and below the diagonal of the array
+ *         contain the M-by-min(M,N) lower trapezoidal tile L (L is
+ *         lower triangular if M <= N); the elements above the diagonal,
+ *         with the array TAU, represent the unitary tile Q as a
+ *         product of elementary reflectors (see Further Details).
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ * @param[out] T
+ *         The IB-by-N triangular factor T of the block reflector.
+ *         T is upper triangular by block (economic storage);
+ *         The rest of the array is not referenced.
+ *
+ * @param[in] LDT
+ *         The leading dimension of the array T. LDT >= IB.
+ *
+ * @param[out] TAU
+ *         The scalar factors of the elementary reflectors (see Further
+ *         Details).
+ *
+ * @param[out] WORK
+ *
+ *******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *          \retval <0 if -i, the i-th argument had an illegal value
+ *
+ ******************************************************************************/
+static int
+CORE_zgelqt_quark(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_zgelqt(*m, *n, *ib, A, *lda, T, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_zgelqt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgelqt_quark,  "gelqt",
+                             sizeof(int),                        &m,     VALUE,
+                             sizeof(int),                        &n,     VALUE,
+                             sizeof(int),                        &ib,    VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),     OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                VALUE,
+                             sizeof(MORSE_Complex64_t)*nb,       NULL,   SCRATCH,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,   SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgemm.c b/runtime/parsec/codelets/codelet_zgemm.c
new file mode 100644
index 000000000..d92575646
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgemm.c
@@ -0,0 +1,99 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgemm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zgemm_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *transA;
+    MORSE_enum *transB;
+    int *m;
+    int *n;
+    int *k;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gB;
+    int *ldb;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gC;
+    int *ldc;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &transA,
+                          UNPACK_VALUE, &transB,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &ldb,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc
+                          );
+
+    MORSE_Complex64_t *A = DAGUE_DATA_COPY_GET_PTR(gA);
+    MORSE_Complex64_t *B = DAGUE_DATA_COPY_GET_PTR(gB);
+    MORSE_Complex64_t *C = DAGUE_DATA_COPY_GET_PTR(gC);
+
+    CORE_zgemm(*transA, *transB, *m, *n, *k,
+               *alpha, A, *lda,
+                       B, *ldb,
+               *beta,  C, *ldc);
+
+    return 0;
+}
+
+void MORSE_TASK_zgemm(MORSE_option_t *options,
+                      MORSE_enum transA, int transB,
+                      int m, int n, int k, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                                                MORSE_desc_t *B, int Bm, int Bn, int ldb,
+                      MORSE_Complex64_t beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgemm_parsec,                "Gemm",
+                             sizeof(MORSE_enum),    &transA,                           VALUE,
+                             sizeof(MORSE_enum),    &transB,                           VALUE,
+                             sizeof(int),           &m,                                VALUE,
+                             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 | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldb,                              VALUE,
+                             sizeof(MORSE_Complex64_t),           &beta,               VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldc,                              VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgeqrt.c b/runtime/parsec/codelets/codelet_zgeqrt.c
new file mode 100644
index 000000000..d8df563ef
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgeqrt.c
@@ -0,0 +1,138 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgeqrt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zgeqrt computes a QR factorization of a complex M-by-N tile A:
+ *  A = Q * R.
+ *
+ *  The tile Q is represented as a product of elementary reflectors
+ *
+ *    Q = H(1) H(2) . . . H(k), where k = min(M,N).
+ *
+ *  Each H(i) has the form
+ *
+ *    H(i) = I - tau * v * v'
+ *
+ *  where tau is a complex scalar, and v is a complex vector with
+ *  v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i),
+ *  and tau in TAU(i).
+ *
+ *******************************************************************************
+ *
+ * @param[in] M
+ *          The number of rows of the tile A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the tile A.  N >= 0.
+ *
+ * @param[in] IB
+ *         The inner-blocking size.  IB >= 0.
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile A.
+ *         On exit, the elements on and above the diagonal of the array
+ *         contain the min(M,N)-by-N upper trapezoidal tile R (R is
+ *         upper triangular if M >= N); the elements below the diagonal,
+ *         with the array TAU, represent the unitary tile Q as a
+ *         product of elementary reflectors (see Further Details).
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ * @param[out] T
+ *         The IB-by-N triangular factor T of the block reflector.
+ *         T is upper triangular by block (economic storage);
+ *         The rest of the array is not referenced.
+ *
+ * @param[in] LDT
+ *         The leading dimension of the array T. LDT >= IB.
+ *
+ * @param[out] TAU
+ *         The scalar factors of the elementary reflectors (see Further
+ *         Details).
+ *
+ * @param[out] WORK
+ *
+ *******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *          \retval <0 if -i, the i-th argument had an illegal value
+ *
+ ******************************************************************************/
+static int
+CORE_zgeqrt_parsec (dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *A;
+    int *lda;
+    dague_data_copy_t *T;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &T,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                          );
+
+    void *AA = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)A);
+    void *TT = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)T);
+
+    CORE_zgeqrt(*m, *n, *ib, AA, *lda, TT, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_zgeqrt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgeqrt_parsec,            "geqrt",
+                             sizeof(int),           &m,                             VALUE,
+                             sizeof(int),           &n,                             VALUE,
+                             sizeof(int),           &ib,                            VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                           VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),     OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                           VALUE,
+                             sizeof(MORSE_Complex64_t)*nb,       NULL,              SCRATCH,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,              SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgessm.c b/runtime/parsec/codelets/codelet_zgessm.c
new file mode 100644
index 000000000..cf1174ef3
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgessm.c
@@ -0,0 +1,130 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgessm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zgessm applies the factors L computed by CORE_zgetrf_incpiv to
+ *  a complex M-by-N tile A.
+ *
+ *******************************************************************************
+ *
+ * @param[in] M
+ *          The number of rows of the tile A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the tile A.  N >= 0.
+ *
+ * @param[in] K
+ *         The number of columns of the tile L. K >= 0.
+ *
+ * @param[in] IB
+ *         The inner-blocking size.  IB >= 0.
+ *
+ * @param[in] IPIV
+ *         The pivot indices array of size K as returned by
+ *         CORE_zgetrf_incpiv.
+ *
+ * @param[in] L
+ *         The M-by-K lower triangular tile.
+ *
+ * @param[in] LDL
+ *         The leading dimension of the array L.  LDL >= max(1,M).
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile A.
+ *         On exit, updated by the application of L.
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ *******************************************************************************
+ *
+ * @return
+ *         \retval MORSE_SUCCESS successful exit
+ *         \retval <0 if INFO = -k, the k-th argument had an illegal value
+ *
+ ******************************************************************************/
+static int
+CORE_zgessm_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *k;
+    int *ib;
+    int *IPIV;
+    dague_data_copy_t *gL;
+    int *ldl;
+    dague_data_copy_t *gD;
+    int *ldd;
+    dague_data_copy_t *gA;
+    int *lda;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_SCRATCH, &IPIV,
+                          UNPACK_DATA,  &gL,
+                          UNPACK_VALUE, &ldl,
+                          UNPACK_DATA,  &gD,
+                          UNPACK_VALUE, &ldd,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda
+                          );
+
+    //MORSE_Complex64_t *L = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gL);
+    MORSE_Complex64_t *D = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gD);
+    MORSE_Complex64_t *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zgessm(*m, *n, *k, *ib, IPIV, D, *ldd, A, *lda);
+
+    return 0;
+}
+
+void MORSE_TASK_zgessm(MORSE_option_t *options,
+                       int m, int n, int k, int ib, int nb,
+                       int *IPIV,
+                       MORSE_desc_t *L, int Lm, int Ln, int ldl,
+                       MORSE_desc_t *D, int Dm, int Dn, int ldd,
+                       MORSE_desc_t *A, int Am, int An, int lda)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgessm_parsec,               "gessm",
+                             sizeof(int),           &m,                                VALUE,
+                             sizeof(int),           &n,                                VALUE,
+                             sizeof(int),           &k,                                VALUE,
+                             sizeof(int),           &ib,                               VALUE,
+                             sizeof(int)*nb,        IPIV,                              SCRATCH,
+                             PASSED_BY_REF,         RTBLKADDR( L, MORSE_Complex64_t, Lm, Ln ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldl,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( D, MORSE_Complex64_t, Dm, Dn ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldd,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgessq.c b/runtime/parsec/codelets/codelet_zgessq.c
new file mode 100644
index 000000000..bb0a46387
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgessq.c
@@ -0,0 +1,64 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgessq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zgessq_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gSCALESUMSQ;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gSCALESUMSQ
+                        );
+
+    MORSE_Complex64_t *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    double *SCALESUMSQ = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCALESUMSQ);
+
+    CORE_zgessq( *m, *n, A, *lda, SCALESUMSQ, SCALESUMSQ+1);
+
+    return 0;
+}
+
+void MORSE_TASK_zgessq( MORSE_option_t *options,
+                        int m, int n,
+                        MORSE_desc_t *A, int Am, int An, int lda,
+                        MORSE_desc_t *SCALESUMSQ, int SCALESUMSQm, int SCALESUMSQn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgessq_parsec,     "gessq",
+                             sizeof(int),                     &m,            VALUE,
+                             sizeof(int),                     &n,            VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                            INPUT | REGION_FULL,
+                             sizeof(int),                     &lda,          VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( SCALESUMSQ, MORSE_Complex64_t, SCALESUMSQm, SCALESUMSQn ), INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgetrf.c b/runtime/parsec/codelets/codelet_zgetrf.c
new file mode 100644
index 000000000..5d11f67a1
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgetrf.c
@@ -0,0 +1,77 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgetrf.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zgetrf_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    int *IPIV;
+    MORSE_sequence_t *sequence;
+    MORSE_request_t *request;
+    MORSE_bool *check_info;
+    int *iinfo;
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_SCRATCH, &IPIV,
+                          UNPACK_VALUE, &sequence,
+                          UNPACK_VALUE, &request,
+                          UNPACK_VALUE, &check_info,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zgetrf( *m, *n, A, *lda, IPIV, &info );
+
+    return 0;
+}
+
+void MORSE_TASK_zgetrf(MORSE_option_t *options,
+                       int m, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       int *IPIV,
+                       MORSE_bool check_info, int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgetrf_parsec,         "getrf",
+                             sizeof(int),           &m,                          VALUE,
+                             sizeof(int),           &n,                          VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                        VALUE,
+                             sizeof(int)*nb,        IPIV,                        SCRATCH,
+                             sizeof(MORSE_sequence_t*), &(options->sequence),    VALUE,
+                             sizeof(MORSE_request_t*),  &(options->request),     VALUE,
+                             sizeof(MORSE_bool),    &check_info,                 VALUE,
+                             sizeof(int),           &iinfo,                      VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgetrf_incpiv.c b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c
new file mode 100644
index 000000000..82bd46683
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c
@@ -0,0 +1,131 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgetrf_incpiv.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zgetrf_incpiv computes an LU factorization of a general M-by-N tile A
+ *  using partial pivoting with row interchanges.
+ *
+ *  The factorization has the form
+ *
+ *    A = P * L * U
+ *
+ *  where P is a permutation matrix, L is lower triangular with unit
+ *  diagonal elements (lower trapezoidal if m > n), and U is upper
+ *  triangular (upper trapezoidal if m < n).
+ *
+ *  This is the right-looking Level 2.5 BLAS version of the algorithm.
+ *
+ *******************************************************************************
+ *
+ * @param[in] M
+ *          The number of rows of the tile A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the tile A.  N >= 0.
+ *
+ * @param[in] IB
+ *         The inner-blocking size.  IB >= 0.
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile to be factored.
+ *         On exit, the factors L and U from the factorization
+ *         A = P*L*U; the unit diagonal elements of L are not stored.
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ * @param[out] IPIV
+ *         The pivot indices; for 1 <= i <= min(M,N), row i of the
+ *         tile was interchanged with row IPIV(i).
+ *
+ * @param[out] INFO
+ *         See returned value.
+ *
+ *******************************************************************************
+ *
+ * @return
+ *         \retval MORSE_SUCCESS successful exit
+ *         \retval <0 if INFO = -k, the k-th argument had an illegal value
+ *         \retval >0 if INFO = k, U(k,k) is exactly zero. The factorization
+ *              has been completed, but the factor U is exactly
+ *              singular, and division by zero will occur if it is used
+ *              to solve a system of equations.
+ *
+ ******************************************************************************/
+static int
+CORE_zgetrf_incpiv_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA;
+    int *lda;
+    int *IPIV;
+    MORSE_bool *check_info;
+    int *iinfo;
+
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_SCRATCH, &IPIV,
+                          UNPACK_VALUE, &check_info,
+                          UNPACK_VALUE, &iinfo
+                          );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zgetrf_incpiv(*m, *n, *ib, A, *lda, IPIV, &info);
+
+    return 0;
+}
+
+void MORSE_TASK_zgetrf_incpiv(MORSE_option_t *options,
+                              int m, int n, int ib, int nb,
+                              MORSE_desc_t *A, int Am, int An, int lda,
+                              MORSE_desc_t *L, int Lm, int Ln, int ldl,
+                              int *IPIV,
+                              MORSE_bool check_info, int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgetrf_incpiv_parsec,        "getrf_inc",
+                             sizeof(int),           &m,                                VALUE,
+                             sizeof(int),           &n,                                VALUE,
+                             sizeof(int),           &ib,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             sizeof(int)*nb,        IPIV,                              SCRATCH,
+                             sizeof(int),           &check_info,                       VALUE,
+                             sizeof(int),           &iinfo,                            VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zgetrf_nopiv.c b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c
new file mode 100644
index 000000000..141d01875
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c
@@ -0,0 +1,120 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zgetrf_nopiv.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zgetrf_nopiv computes an LU factorization of a general diagonal
+ *  dominant M-by-N matrix A witout pivoting.
+ *
+ *  The factorization has the form
+ *     A = L * U
+ *  where L is lower triangular with unit
+ *  diagonal elements (lower trapezoidal if m > n), and U is upper
+ *  triangular (upper trapezoidal if m < n).
+ *
+ *  This is the right-looking Level 3 BLAS version of the algorithm.
+ *  WARNING: Your matrix need to be diagonal dominant if you want to call this
+ *  routine safely.
+ *
+ *******************************************************************************
+ *
+ *  @param[in] M
+ *          The number of rows of the matrix A.  M >= 0.
+ *
+ *  @param[in] N
+ *          The number of columns of the matrix A.  N >= 0.
+ *
+ *  @param[in] IB
+ *          The block size to switch between blocked and unblocked code.
+ *
+ *  @param[in,out] A
+ *          On entry, the M-by-N matrix to be factored.
+ *          On exit, the factors L and U from the factorization
+ *          A = P*L*U; the unit diagonal elements of L are not stored.
+ *
+ *  @param[in] LDA
+ *          The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ *******************************************************************************
+ *
+ * @return
+ *         \retval MORSE_SUCCESS successful exit
+ *         \retval <0 if INFO = -k, the k-th argument had an illegal value
+ *         \retval >0 if INFO = k, U(k,k) is exactly zero. The factorization
+ *              has been completed, but the factor U is exactly
+ *              singular, and division by zero will occur if it is used
+ *              to solve a system of equations.
+ *
+ ******************************************************************************/
+static int
+CORE_zgetrf_nopiv_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA;
+    int *lda;
+    MORSE_sequence_t *sequence;
+    MORSE_request_t *request;
+    int *iinfo;
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &sequence,
+                          UNPACK_VALUE, &request,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zgetrf_nopiv(*m, *n, *ib, A, *lda, &info);
+
+    return 0;
+}
+
+void MORSE_TASK_zgetrf_nopiv(MORSE_option_t *options,
+                             int m, int n, int ib, int nb,
+                             MORSE_desc_t *A, int Am, int An, int lda,
+                             int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zgetrf_nopiv_parsec,   "getrf_nopiv",
+                             sizeof(int),           &m,                          VALUE,
+                             sizeof(int),           &n,                          VALUE,
+                             sizeof(int),           &ib,                         VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),           &lda,                        VALUE,
+                             sizeof(MORSE_sequence_t*), &(options->sequence),    VALUE,
+                             sizeof(MORSE_request_t*),  &(options->request),     VALUE,
+                             sizeof(int),           &iinfo,                      VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zhemm.c b/runtime/parsec/codelets/codelet_zhemm.c
new file mode 100644
index 000000000..171a1ace5
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zhemm.c
@@ -0,0 +1,96 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zhemm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zhemm_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *LDA;
+    dague_data_copy_t *gB;
+    int *LDB;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gC;
+    int *LDC;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &LDC
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+    void *C = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zhemm(*side, *uplo, *M, *N,
+               *alpha, A, *LDA,
+                       B, *LDB,
+               *beta,  C, *LDC);
+
+    return 0;
+}
+
+void MORSE_TASK_zhemm(MORSE_option_t *options,
+                      MORSE_enum side, MORSE_enum uplo,
+                      int m, int n, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      MORSE_desc_t *B, int Bm, int Bn, int ldb,
+                      MORSE_Complex64_t beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zhemm_parsec,   "hemm",
+                             sizeof(MORSE_enum),                &side,    VALUE,
+                             sizeof(MORSE_enum),                &uplo,    VALUE,
+                             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 | REGION_FULL,
+                             sizeof(int),           &lda,                 VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldb,                 VALUE,
+                             sizeof(MORSE_Complex64_t),         &beta,    VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldc,                 VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zher2k.c b/runtime/parsec/codelets/codelet_zher2k.c
new file mode 100644
index 000000000..836bcee6f
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zher2k.c
@@ -0,0 +1,97 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zher2k.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zher2k_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *n;
+    int *k;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gB;
+    int *ldb;
+    double *beta;
+    dague_data_copy_t *gC;
+    int *ldc;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &ldb,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+    void *C = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zher2k(*uplo, *trans, *n, *k,
+                *alpha, A, *lda,
+                        B, *ldb,
+                *beta,  C, *ldc);
+
+    return 0;
+}
+
+void MORSE_TASK_zher2k(MORSE_option_t *options,
+                       MORSE_enum uplo, MORSE_enum trans,
+                       int n, int k, int nb,
+                       MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn, int ldb,
+                       double beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zher2k_parsec,    "her2k",
+                             sizeof(MORSE_enum),                 &uplo,     VALUE,
+                             sizeof(MORSE_enum),                 &trans,    VALUE,
+                             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 | REGION_FULL,
+                             sizeof(int),                        &lda,      VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | REGION_FULL,
+                             sizeof(int),                        &ldb,      VALUE,
+                             sizeof(double),                     &beta,     VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),                        &ldc,      VALUE,
+                             0);
+}
+
diff --git a/runtime/parsec/codelets/codelet_zherk.c b/runtime/parsec/codelets/codelet_zherk.c
new file mode 100644
index 000000000..13e71a52f
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zherk.c
@@ -0,0 +1,89 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zherk.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+
+static int
+CORE_zherk_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *n;
+    int *k;
+    double *alpha;
+    dague_data_copy_t *gA;
+    int *lda;
+    double *beta;
+    dague_data_copy_t *gC;
+    int *ldc;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR(gA);
+    void *C = DAGUE_DATA_COPY_GET_PTR(gC);
+
+    CORE_zherk(*uplo, *trans, *n, *k,
+               *alpha, A, *lda,
+               *beta,  C, *ldc);
+
+    return 0;
+}
+
+void MORSE_TASK_zherk(MORSE_option_t *options,
+                      MORSE_enum uplo, MORSE_enum trans,
+                      int n, int k, int nb,
+                      double alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      double beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zherk_parsec,                "herk",
+                             sizeof(MORSE_enum),    &uplo,                             VALUE,
+                             sizeof(MORSE_enum),    &trans,                            VALUE,
+                             sizeof(int),           &n,                                VALUE,
+                             sizeof(int),           &k,                                VALUE,
+                             sizeof(double),        &alpha,                            VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             sizeof(double),        &beta,                             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldc,                              VALUE,
+                             0);
+}
+
diff --git a/runtime/parsec/codelets/codelet_zhessq.c b/runtime/parsec/codelets/codelet_zhessq.c
new file mode 100644
index 000000000..21f46d6fe
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zhessq.c
@@ -0,0 +1,64 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zhessq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zhessq_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gSCALESUMSQ;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gSCALESUMSQ
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *SCALESUMSQ = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCALESUMSQ);
+
+    CORE_zhessq( *uplo, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+
+    return 0;
+}
+
+void MORSE_TASK_zhessq( MORSE_option_t *options,
+                        MORSE_enum uplo, int n,
+                        MORSE_desc_t *A, int Am, int An, int lda,
+                        MORSE_desc_t *SCALESUMSQ, int SCALESUMSQm, int SCALESUMSQn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zhessq_parsec, "hessq",
+                             sizeof(int),           &uplo,               VALUE,
+                             sizeof(int),           &n,                  VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                               INPUT | REGION_FULL,
+                             sizeof(int),           &lda,                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( SCALESUMSQ, MORSE_Complex64_t, SCALESUMSQm, SCALESUMSQn ),    INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlacpy.c b/runtime/parsec/codelets/codelet_zlacpy.c
new file mode 100644
index 000000000..ac6c30a75
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlacpy.c
@@ -0,0 +1,76 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlacpy.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zlacpy_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    dague_data_copy_t *gB;
+    int *LDB;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB
+                        );
+
+    MORSE_Complex64_t *A = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    MORSE_Complex64_t *B = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_zlacpy(*uplo, *M, *N, A, *LDA, B, *LDB);
+
+    return 0;
+}
+
+void MORSE_TASK_zlacpy(MORSE_option_t *options,
+                       MORSE_enum uplo, int m, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlacpy_parsec,        "lacpy",
+                             sizeof(MORSE_enum),    &uplo,                      VALUE,
+                             sizeof(int),           &m,                         VALUE,
+                             sizeof(int),           &n,                         VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),   INPUT | REGION_FULL,
+                             sizeof(int),           &lda,                       VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),   OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldb,                       VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlag2c.c b/runtime/parsec/codelets/codelet_zlag2c.c
new file mode 100644
index 000000000..7acfcfc23
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlag2c.c
@@ -0,0 +1,122 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlag2c.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zlag2c_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gB;
+    int *ldb;
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &ldb,
+                          );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_zlag2c( *m, *n, A, *lda, B, *ldb);
+
+    return 0;
+}
+
+void MORSE_TASK_zlag2c(MORSE_option_t *options,
+                       int m, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlag2c_parsec,               "lag2c",
+        sizeof(int),                        &m,         VALUE,
+        sizeof(int),                        &n,         VALUE,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+        sizeof(int),                        &lda,       VALUE,
+        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+        sizeof(int),                        &ldb,       VALUE,
+        0);
+}
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_clag2z_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gB;
+    int *ldb;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &ldb,
+                          );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_clag2z( *m, *n, A, *lda, B, *ldb );
+
+    return 0;
+}
+
+void MORSE_TASK_clag2z(MORSE_option_t *options,
+                       int m, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_clag2z_parsec,               "lag2z",
+        sizeof(int),                        &m,         VALUE,
+        sizeof(int),                        &n,         VALUE,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+        sizeof(int),                        &lda,       VALUE,
+        PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+        sizeof(int),                        &ldb,       VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlange.c b/runtime/parsec/codelets/codelet_zlange.c
new file mode 100644
index 000000000..7bd331d2f
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlange.c
@@ -0,0 +1,104 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlange.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zlange_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    dague_data_copy_t *gnormA;
+    MORSE_enum *norm;
+    int *M;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    double *work;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &norm,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_SCRATCH, &work,
+                          UNPACK_DATA,  &gnormA
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *normA = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gnormA);
+
+    CORE_zlange( *norm, *M, *N, A, *LDA, work, normA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlange(MORSE_option_t *options,
+                       MORSE_enum norm, int M, int N, int NB,
+                       MORSE_desc_t *A, int Am, int An, int LDA,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    int szeW = max( M, N );
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlange_parsec,    "lange",
+                             sizeof(MORSE_enum),            &norm,          VALUE,
+                             sizeof(int),                   &M,             VALUE,
+                             sizeof(int),                   &N,             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),                   &LDA,           VALUE,
+                             sizeof(double)*szeW,           NULL,           SCRATCH,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+                             0);
+}
+
+static int
+CORE_zlange_max_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    dague_data_copy_t *gA;
+    dague_data_copy_t *gnormA;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_DATA,  &gnormA
+                        );
+
+    double *A = (double *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    double *normA = (double *) DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gnormA);
+
+        if ( A[0] > *normA )
+                *normA = A[0];
+
+    return 0;
+}
+
+void MORSE_TASK_zlange_max(MORSE_option_t *options,
+                           MORSE_desc_t *A, int Am, int An,
+                           MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlange_max_parsec,               "lange_max",
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlanhe.c b/runtime/parsec/codelets/codelet_zlanhe.c
new file mode 100644
index 000000000..46c501f42
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlanhe.c
@@ -0,0 +1,72 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlanhe.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zlanhe_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    double *gnormA;
+    MORSE_enum *norm;
+    MORSE_enum *uplo;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    double *work;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &norm,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_SCRATCH, &work,
+                          UNPACK_DATA,  &gnormA
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *normA = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gnormA);
+
+    CORE_zlanhe( *norm, *uplo, *N, A, *LDA, work, normA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlanhe(MORSE_option_t *options,
+                       MORSE_enum norm, MORSE_enum uplo, int N, int NB,
+                       MORSE_desc_t *A, int Am, int An, int LDA,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    int szeW = max( 1, N );
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlanhe_parsec,    "LANHE",
+                             sizeof(MORSE_enum),            &norm,          VALUE,
+                             sizeof(MORSE_enum),            &uplo,          VALUE,
+                             sizeof(int),                   &N,             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),                   &LDA,           VALUE,
+                             sizeof(double)*szeW,           NULL,           SCRATCH,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlansy.c b/runtime/parsec/codelets/codelet_zlansy.c
new file mode 100644
index 000000000..15b06e796
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlansy.c
@@ -0,0 +1,72 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlansy.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zlansy_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    double *gnormA;
+    int *norm;
+    MORSE_enum *uplo;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    double *work;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &norm,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_SCRATCH, &work,
+                          UNPACK_DATA,  &gnormA
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *normA = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gnormA);
+
+    CORE_zlansy( *norm, *uplo, *N, A, *LDA, work, normA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlansy(MORSE_option_t *options,
+                       MORSE_enum norm, MORSE_enum uplo, int N, int NB,
+                       MORSE_desc_t *A, int Am, int An, int LDA,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    int szeW = max( 1, N );
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlansy_parsec,    "lansy",
+                             sizeof(MORSE_enum),            &norm,          VALUE,
+                             sizeof(MORSE_enum),            &uplo,          VALUE,
+                             sizeof(int),                   &N,             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),                   &LDA,           VALUE,
+                             sizeof(double)*szeW,           NULL,           SCRATCH,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlantr.c b/runtime/parsec/codelets/codelet_zlantr.c
new file mode 100644
index 000000000..d4df9e57f
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlantr.c
@@ -0,0 +1,77 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlantr.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zlantr_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    dague_data_copy_t *gnormA;
+    MORSE_enum *norm, *uplo, *diag;
+    int *M;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    double *work;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &norm,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_SCRATCH, &work,
+                          UNPACK_DATA,  &gnormA
+                          );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *normA = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gnormA);
+
+    CORE_zlantr( *norm, *uplo, *diag, *M, *N, A, *LDA, work, normA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlantr(MORSE_option_t *options,
+                       MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
+                       int M, int N, int NB,
+                       MORSE_desc_t *A, int Am, int An, int LDA,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    int szeW = max( 1, N );
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlantr_parsec,    "lantr",
+                             sizeof(MORSE_enum),            &norm,          VALUE,
+                             sizeof(MORSE_enum),            &uplo,          VALUE,
+                             sizeof(MORSE_enum),            &diag,          VALUE,
+                             sizeof(int),                   &M,             VALUE,
+                             sizeof(int),                   &N,             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                             sizeof(int),                   &LDA,           VALUE,
+                             sizeof(double)*szeW,           NULL,           SCRATCH,
+                             PASSED_BY_REF,         RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     OUTPUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlaset.c b/runtime/parsec/codelets/codelet_zlaset.c
new file mode 100644
index 000000000..53c09389a
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlaset.c
@@ -0,0 +1,105 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlaset.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zlaset - Sets the elements of the matrix A on the diagonal
+ *  to beta and on the off-diagonals to alpha
+ *
+ *******************************************************************************
+ *
+ * @param[in] uplo
+ *          Specifies which elements of the matrix are to be set
+ *          = MorseUpper: Upper part of A is set;
+ *          = MorseLower: Lower part of A is set;
+ *          = MorseUpperLower: ALL elements of A are set.
+ *
+ * @param[in] M
+ *          The number of rows of the matrix A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the matrix A.  N >= 0.
+ *
+ * @param[in] alpha
+ *         The constant to which the off-diagonal elements are to be set.
+ *
+ * @param[in] beta
+ *         The constant to which the diagonal elements are to be set.
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile A.
+ *         On exit, A has been set accordingly.
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ **/
+static int
+CORE_zlaset_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gA;
+    int *LDA;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA
+                        );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zlaset(*uplo, *M, *N, *alpha, *beta, A, *LDA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlaset(MORSE_option_t *options,
+                       MORSE_enum uplo, int M, int N,
+                       MORSE_Complex64_t alpha, MORSE_Complex64_t beta,
+                       MORSE_desc_t *A, int Am, int An, int LDA)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlaset_parsec,    "laset",
+                             sizeof(MORSE_enum),              &uplo,        VALUE,
+                             sizeof(int),                     &M,           VALUE,
+                             sizeof(int),                     &N,           VALUE,
+                             sizeof(MORSE_Complex64_t),       &alpha,       VALUE,
+                             sizeof(MORSE_Complex64_t),       &beta,        VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | REGION_FULL,
+                             sizeof(int),                     &LDA,         VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlaset2.c b/runtime/parsec/codelets/codelet_zlaset2.c
new file mode 100644
index 000000000..4284ace9c
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlaset2.c
@@ -0,0 +1,97 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlaset2.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  CORE_zlaset2 - Sets the elements of the matrix A to alpha.
+ *  Not LAPACK compliant! Read below.
+ *
+ *******************************************************************************
+ *
+ * @param[in] uplo
+ *          Specifies which elements of the matrix are to be set
+ *          = MorseUpper: STRICT Upper part of A is set to alpha;
+ *          = MorseLower: STRICT Lower part of A is set to alpha;
+ *          = MorseUpperLower: ALL elements of A are set to alpha.
+ *          Not LAPACK Compliant.
+ *
+ * @param[in] M
+ *          The number of rows of the matrix A.  M >= 0.
+ *
+ * @param[in] N
+ *         The number of columns of the matrix A.  N >= 0.
+ *
+ * @param[in] alpha
+ *         The constant to which the elements are to be set.
+ *
+ * @param[in,out] A
+ *         On entry, the M-by-N tile A.
+ *         On exit, A has been set to alpha accordingly.
+ *
+ * @param[in] LDA
+ *         The leading dimension of the array A.  LDA >= max(1,M).
+ *
+ **/
+static int
+CORE_zlaset2_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *LDA;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    CORE_zlaset2(*uplo, *M, *N, *alpha, A, *LDA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlaset2(MORSE_option_t *options,
+                       MORSE_enum uplo, int M, int N,
+                       MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int LDA)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlaset2_parsec,   "laset2",
+                             sizeof(MORSE_enum),                &uplo,      VALUE,
+                             sizeof(int),                       &M,         VALUE,
+                             sizeof(int),                       &N,         VALUE,
+                             sizeof(MORSE_enum),                &alpha,     VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | REGION_FULL,
+                             sizeof(int),                       &LDA,       VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zlauum.c b/runtime/parsec/codelets/codelet_zlauum.c
new file mode 100644
index 000000000..415dd5b84
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zlauum.c
@@ -0,0 +1,64 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zlauum.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zlauum_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA
+                          );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zlauum(*uplo, *N, A, *LDA);
+
+    return 0;
+}
+
+void MORSE_TASK_zlauum(MORSE_option_t *options,
+                       MORSE_enum uplo, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zlauum_parsec,    "lauum",
+                             sizeof(MORSE_enum),    &uplo,                  VALUE,
+                             sizeof(int),           &n,                     VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                   VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zpamm.c b/runtime/parsec/codelets/codelet_zpamm.c
new file mode 100644
index 000000000..68b5a6457
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zpamm.c
@@ -0,0 +1,244 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zpamm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  ZPAMM  performs one of the matrix-matrix operations
+ *
+ *                    LEFT                      RIGHT
+ *     OP MorseW  :  W  = A1 + op(V) * A2  or  W  = A1 + A2 * op(V)
+ *     OP MorseA2 :  A2 = A2 - op(V) * W   or  A2 = A2 - W * op(V)
+ *
+ *  where  op( V ) is one of
+ *
+ *     op( V ) = V   or   op( V ) = V**T   or   op( V ) = V**H,
+ *
+ *  A1, A2 and W are general matrices, and V is:
+ *
+ *        l = k: rectangle + triangle
+ *        l < k: rectangle + trapezoid
+ *        l = 0: rectangle
+ *
+ *  Size of V, both rowwise and columnwise, is:
+ *
+ *         ----------------------
+ *          side   trans    size
+ *         ----------------------
+ *          left     N     M x K
+ *                   T     K x M
+ *          right    N     K x N
+ *                   T     N x K
+ *         ----------------------
+ *
+ *  LEFT (columnwise and rowwise):
+ *
+ *              |    K    |                 |         M         |
+ *           _  __________   _              _______________        _
+ *              |    |    |                 |             | \
+ *     V:       |    |    |            V':  |_____________|___\    K
+ *              |    |    | M-L             |                  |
+ *           M  |    |    |                 |__________________|   _
+ *              |____|    |  _
+ *              \    |    |                 |    M - L    | L  |
+ *                \  |    |  L
+ *           _      \|____|  _
+ *
+ *
+ *  RIGHT (columnwise and rowwise):
+ *
+ *          |         K         |                   |    N    |
+ *          _______________        _             _  __________   _
+ *          |             | \                       |    |    |
+ *     V':  |_____________|___\    N        V:      |    |    |
+ *          |                  |                    |    |    | K-L
+ *          |__________________|   _             K  |    |    |
+ *                                                  |____|    |  _
+ *          |    K - L    | L  |                    \    |    |
+ *                                                    \  |    |  L
+ *                                               _      \|____|  _
+ *
+ *  Arguments
+ *  ==========
+ *
+ * @param[in] op
+ *
+ *         OP specifies which operation to perform:
+ *
+ *         @arg MorseW  : W  = A1 + op(V) * A2  or  W  = A1 + A2 * op(V)
+ *         @arg MorseA2 : A2 = A2 - op(V) * W   or  A2 = A2 - W * op(V)
+ *
+ * @param[in] side
+ *
+ *         SIDE specifies whether  op( V ) multiplies A2
+ *         or W from the left or right as follows:
+ *
+ *         @arg MorseLeft  : multiply op( V ) from the left
+ *                            OP MorseW  :  W  = A1 + op(V) * A2
+ *                            OP MorseA2 :  A2 = A2 - op(V) * W
+ *
+ *         @arg MorseRight : multiply op( V ) from the right
+ *                            OP MorseW  :  W  = A1 + A2 * op(V)
+ *                            OP MorseA2 :  A2 = A2 - W * op(V)
+ *
+ * @param[in] storev
+ *
+ *         Indicates how the vectors which define the elementary
+ *         reflectors are stored in V:
+ *
+ *         @arg MorseColumnwise
+ *         @arg MorseRowwise
+ *
+ * @param[in] M
+ *         The number of rows of the A1, A2 and W
+ *         If SIDE is MorseLeft, the number of rows of op( V )
+ *
+ * @param[in] N
+ *         The number of columns of the A1, A2 and W
+ *         If SIDE is MorseRight, the number of columns of op( V )
+ *
+ * @param[in] K
+ *         If SIDE is MorseLeft, the number of columns of op( V )
+ *         If SIDE is MorseRight, the number of rows of op( V )
+ *
+ * @param[in] L
+ *         The size of the triangular part of V
+ *
+ * @param[in] A1
+ *         On entry, the M-by-N tile A1.
+ *
+ * @param[in] LDA1
+ *         The leading dimension of the array A1. LDA1 >= max(1,M).
+ *
+ * @param[in,out] A2
+ *         On entry, the M-by-N tile A2.
+ *         On exit, if OP is MorseA2 A2 is overwritten
+ *
+ * @param[in] LDA2
+ *         The leading dimension of the tile A2. LDA2 >= max(1,M).
+ *
+ * @param[in] V
+ *         The matrix V as described above.
+ *         If SIDE is MorseLeft : op( V ) is M-by-K
+ *         If SIDE is MorseRight: op( V ) is K-by-N
+ *
+ * @param[in] LDV
+ *         The leading dimension of the array V.
+ *
+ * @param[in,out] W
+ *         On entry, the M-by-N matrix W.
+ *         On exit, W is overwritten either if OP is MorseA2 or MorseW.
+ *         If OP is MorseA2, W is an input and is used as a workspace.
+ *
+ * @param[in] LDW
+ *         The leading dimension of array WORK.
+ *
+ *******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *          \retval <0 if -i, the i-th argument had an illegal value
+ *
+ ******************************************************************************/
+
+
+/***************************************************************************/
+
+static int
+CORE_zpamm_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *op;
+    MORSE_enum *side;
+    int *storev;
+    int *M;
+    int *N;
+    int *K;
+    int *L;
+    dague_data_copy_t *gA1;
+    int *LDA1;
+    dague_data_copy_t *gA2;
+    int *LDA2;
+    dague_data_copy_t *gV;
+    int *LDV;
+    dague_data_copy_t *gW;
+    int *LDW;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &op,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &storev,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &K,
+                          UNPACK_VALUE, &L,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &LDA1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &LDA2,
+                          UNPACK_DATA,  &gV,
+                          UNPACK_VALUE, &LDV,
+                          UNPACK_DATA,  &gW,
+                          UNPACK_VALUE, &LDW
+                          );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *V  = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gV);
+    void *W  = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gW);
+
+    CORE_zpamm( *op, *side, *storev, *M, *N, *K, *L, A1, *LDA1, A2, *LDA2, V, *LDV, W, *LDW);
+
+    return 0;
+}
+
+void
+MORSE_TASK_zpamm(MORSE_option_t *options,
+                 int op, MORSE_enum side, int storev,
+                 int m, int n, int k, int l,
+                 MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                 MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                       MORSE_desc_t *W, int Wm, int Wn, int ldw)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zpamm_parsec, "pamm",
+                sizeof(int),                        &op,                VALUE,
+                sizeof(MORSE_enum),                 &side,              VALUE,
+                sizeof(MORSE_enum),                 &storev,            VALUE,
+                sizeof(int),                        &m,                 VALUE,
+                sizeof(int),                        &n,                 VALUE,
+                sizeof(int),                        &k,                 VALUE,
+                sizeof(int),                        &l,                 VALUE,
+                PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INPUT | REGION_FULL,
+                sizeof(int),                        &lda1,              VALUE,
+                PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                sizeof(int),                        &lda2,              VALUE,
+                PASSED_BY_REF,         RTBLKADDR( V, MORSE_Complex64_t, Vm, Vn ),        INPUT | REGION_FULL,
+                sizeof(int),                        &ldv,               VALUE,
+                PASSED_BY_REF,         RTBLKADDR( W, MORSE_Complex64_t, Wm, Wn ),        INOUT | REGION_FULL,
+                sizeof(int),                        &ldw,               VALUE,
+                0);
+}
diff --git a/runtime/parsec/codelets/codelet_zplghe.c b/runtime/parsec/codelets/codelet_zplghe.c
new file mode 100644
index 000000000..ef6a375f4
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zplghe.c
@@ -0,0 +1,74 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zplghe.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zplghe_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    double *bump;
+    int *m;
+    int *n;
+    dague_data_copy_t *A;
+    int *lda;
+    int *bigM;
+    int *m0;
+    int *n0;
+    unsigned long long int *seed;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &bump,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &bigM,
+                          UNPACK_VALUE, &m0,
+                          UNPACK_VALUE, &n0,
+                          UNPACK_VALUE, &seed
+                        );
+
+
+    MORSE_Complex64_t *T = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)A);
+    CORE_zplghe( *bump, *m, *n, T, *lda, *bigM, *m0, *n0, *seed );
+
+    return 0;
+}
+
+void MORSE_TASK_zplghe( MORSE_option_t *options,
+                        double bump, int m, int n, MORSE_desc_t *A, int Am, int An, int lda,
+                        int bigM, int m0, int n0, unsigned long long int seed )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,  CORE_zplghe_parsec,            "zplghe",
+                             sizeof(double),    &bump,                          VALUE,
+                             sizeof(int),       &m,                             VALUE,
+                             sizeof(int),       &n,                             VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | REGION_FULL,
+                             sizeof(int),       &lda,                           VALUE,
+                             sizeof(int),       &bigM,                          VALUE,
+                             sizeof(int),       &m0,                            VALUE,
+                             sizeof(int),       &n0,                            VALUE,
+                             sizeof(unsigned long long int),       &seed,       VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zplgsy.c b/runtime/parsec/codelets/codelet_zplgsy.c
new file mode 100644
index 000000000..85257f691
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zplgsy.c
@@ -0,0 +1,74 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zplgsy.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zplgsy_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_Complex64_t *bump;
+    int *m;
+    int *n;
+    dague_data_copy_t *A;
+    int *lda;
+    int *bigM;
+    int *m0;
+    int *n0;
+    unsigned long long int *seed;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &bump,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &bigM,
+                          UNPACK_VALUE, &m0,
+                          UNPACK_VALUE, &n0,
+                          UNPACK_VALUE, &seed
+                        );
+
+    MORSE_Complex64_t *T = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)A);
+
+    CORE_zplgsy( *bump, *m, *n, T, *lda, *bigM, *m0, *n0, *seed );
+
+    return 0;
+}
+
+void MORSE_TASK_zplgsy( MORSE_option_t *options,
+                        MORSE_Complex64_t bump, int m, int n, MORSE_desc_t *A, int Am, int An, int lda,
+                        int bigM, int m0, int n0, unsigned long long int seed )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,          CORE_zplgsy_parsec,            "zplgsy",
+                             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 | REGION_FULL,
+                             sizeof(int),               &lda,                           VALUE,
+                             sizeof(int),               &bigM,                          VALUE,
+                             sizeof(int),               &m0,                            VALUE,
+                             sizeof(int),               &n0,                            VALUE,
+                             sizeof(unsigned long long int),               &seed,       VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zplrnt.c b/runtime/parsec/codelets/codelet_zplrnt.c
new file mode 100644
index 000000000..c6ba8dc60
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zplrnt.c
@@ -0,0 +1,71 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zplrnt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zplrnt_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    dague_data_copy_t *A;
+    int *lda;
+    int *bigM;
+    int *m0;
+    int *n0;
+    unsigned long long int *seed;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &bigM,
+                          UNPACK_VALUE, &m0,
+                          UNPACK_VALUE, &n0,
+                          UNPACK_VALUE, &seed
+                        );
+
+    MORSE_Complex64_t *T = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)A);
+
+    CORE_zplrnt( *m, *n, T, *lda, *bigM, *m0, *n0, *seed );
+
+    return 0;
+}
+
+void MORSE_TASK_zplrnt( MORSE_option_t *options,
+                        int m, int n, MORSE_desc_t *A, int Am, int An, int lda,
+                        int bigM, int m0, int n0, unsigned long long int seed )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,  CORE_zplrnt_parsec,         "zplrnt",
+                             sizeof(int),       &m,                          VALUE,
+                             sizeof(int),       &n,                          VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | REGION_FULL,
+                             sizeof(int),       &lda,                        VALUE,
+                             sizeof(int),       &bigM,                       VALUE,
+                             sizeof(int),       &m0,                         VALUE,
+                             sizeof(int),       &n0,                         VALUE,
+                             sizeof(unsigned long long int),       &seed,    VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zplssq.c b/runtime/parsec/codelets/codelet_zplssq.c
new file mode 100644
index 000000000..c457839de
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zplssq.c
@@ -0,0 +1,118 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zplssq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include <math.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+/*****************************************************************************
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  MORSE_TASK_zplssq returns: scl * sqrt(ssq)
+ *
+ * with scl and ssq such that
+ *
+ *    ( scl**2 )*ssq = sum( A( 2*i )**2 * A( 2*i+1 ) )
+ *                      i
+ *
+ * The values of A(2*i+1) are assumed to be at least unity.
+ * The values of A(2*i) are assumed to be non-negative and scl is
+ *
+ *    scl = max( A( 2*i ) ),
+ *           i
+ *
+ * The routine makes only one pass through the matrix A.
+ *
+ *******************************************************************************
+ *
+ *  @param[in] M
+ *          The number of couple (scale, sumsq) in the matrix A.
+ *
+ *  @param[in] A
+ *          The 2-by-M matrix.
+ *
+ *  @param[out] result
+ *          On exit, result contains scl * sqrt( ssq )
+ *
+ */
+static int
+CORE_zplssq_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    dague_data_copy_t *gSCALESUMSQ;
+    dague_data_copy_t *gSCLSSQ;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_DATA,  &gSCALESUMSQ,
+                          UNPACK_DATA,  &gSCLSSQ
+                          );
+
+
+    double *SCALESUMSQ = (double *) DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCALESUMSQ);
+    double *SCLSSQ     = (double *) DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCLSSQ);
+
+    if( SCLSSQ[0] < SCALESUMSQ[0] ) {
+        SCLSSQ[1] = SCALESUMSQ[1] + (SCLSSQ[1]     * (( SCLSSQ[0] / SCALESUMSQ[0] ) * ( SCLSSQ[0] / SCALESUMSQ[0] )));
+        SCLSSQ[0] = SCALESUMSQ[0];
+    } else {
+        SCLSSQ[1] = SCLSSQ[1]     + (SCALESUMSQ[1] * (( SCALESUMSQ[0] / SCLSSQ[0] ) * ( SCALESUMSQ[0] / SCLSSQ[0] )));
+    }
+
+    return 0;
+}
+
+void MORSE_TASK_zplssq( MORSE_option_t *options,
+                        MORSE_desc_t *SCALESUMSQ, int SCALESUMSQm, int SCALESUMSQn,
+                        MORSE_desc_t *SCLSSQ,     int SCLSSQm,     int SCLSSQn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zplssq_parsec,               "plssq",
+                             PASSED_BY_REF,         RTBLKADDR( SCALESUMSQ, MORSE_Complex64_t, SCALESUMSQm, SCALESUMSQn ),    INPUT | REGION_FULL,
+                             PASSED_BY_REF,         RTBLKADDR( SCLSSQ, MORSE_Complex64_t, SCLSSQm, SCLSSQn ),                INOUT | REGION_FULL,
+                             0);
+}
+
+static int
+CORE_zplssq2_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    dague_data_copy_t *gRESULT;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_DATA,  &gRESULT
+                          );
+
+    double *RESULT = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gRESULT);
+
+    RESULT[0] = RESULT[0] * sqrt( RESULT[1] );
+
+    return 0;
+}
+
+void MORSE_TASK_zplssq2( MORSE_option_t *options,
+                         MORSE_desc_t *RESULT, int RESULTm, int RESULTn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zplssq2_parsec,               "plssq2",
+                             PASSED_BY_REF,         RTBLKADDR( RESULT, MORSE_Complex64_t, RESULTm, RESULTn ),     INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zpotrf.c b/runtime/parsec/codelets/codelet_zpotrf.c
new file mode 100644
index 000000000..a09c3685f
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zpotrf.c
@@ -0,0 +1,66 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zpotrf.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+/***************************************************************************//**
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ **/
+static int
+CORE_zpotrf_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *tempkm, *ldak, *iinfo;
+    dague_data_copy_t *data;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &tempkm,
+                          UNPACK_DATA,  &data,
+                          UNPACK_VALUE, &ldak,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *TT = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)data);
+
+    CORE_zpotrf(*uplo, *tempkm, TT, *ldak, iinfo);
+
+    return 0;
+}
+
+void MORSE_TASK_zpotrf(MORSE_option_t *options,
+                       MORSE_enum uplo, int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zpotrf_parsec,               "potrf",
+                             sizeof(MORSE_enum),    &uplo,                             VALUE,
+                             sizeof(int),           &n,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             sizeof(int),           &iinfo,                            VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zssssm.c b/runtime/parsec/codelets/codelet_zssssm.c
new file mode 100644
index 000000000..2786c05bc
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zssssm.c
@@ -0,0 +1,99 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zssssm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zssssm_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gL1;
+    int *ldl1;
+    dague_data_copy_t *gL2;
+    int *ldl2;
+    int *IPIV;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m1,
+                          UNPACK_VALUE, &n1,
+                          UNPACK_VALUE, &m2,
+                          UNPACK_VALUE, &n2,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gL1,
+                          UNPACK_VALUE, &ldl1,
+                          UNPACK_DATA,  &gL2,
+                          UNPACK_VALUE, &ldl2,
+                          UNPACK_SCRATCH, &IPIV
+                          );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *L1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gL1);
+    void *L2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gL2);
+
+    CORE_zssssm(*m1, *n1, *m2, *n2, *k, *ib, A1, *lda1, A2, *lda2, L1, *ldl1, L2, *ldl2, IPIV);
+
+    return 0;
+}
+
+void MORSE_TASK_zssssm(MORSE_option_t *options,
+                       int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *L1, int L1m, int L1n, int ldl1,
+                       MORSE_desc_t *L2, int L2m, int L2n, int ldl2,
+                       const int *IPIV)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zssssm_parsec,               "ssssm",
+                             sizeof(int),           &m1,                                VALUE,
+                             sizeof(int),           &n1,                                VALUE,
+                             sizeof(int),           &m2,                                VALUE,
+                             sizeof(int),           &n2,                                VALUE,
+                             sizeof(int),           &k,                                 VALUE,
+                             sizeof(int),           &ib,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda1,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda2,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( L1, MORSE_Complex64_t, L1m, L1n ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldl1,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( L2, MORSE_Complex64_t, L2m, L2n ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldl2,                              VALUE,
+                             sizeof(int)*nb,        IPIV,                               SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zsymm.c b/runtime/parsec/codelets/codelet_zsymm.c
new file mode 100644
index 000000000..dfb20d9e6
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zsymm.c
@@ -0,0 +1,93 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zsymm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zsymm_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *uplo;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    MORSE_Complex64_t *gA;
+    int *LDA;
+    MORSE_Complex64_t *gB;
+    int *LDB;
+    MORSE_Complex64_t *beta;
+    MORSE_Complex64_t *gC;
+    int *LDC;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &LDC
+                        );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+    void *C = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zsymm(*side, *uplo, *M, *N,
+                *alpha, A, *LDA,
+                        B, *LDB,
+                *beta,  C, *LDC);
+
+    return 0;
+}
+
+void MORSE_TASK_zsymm(MORSE_option_t *options,
+                      MORSE_enum side, MORSE_enum uplo,
+                      int m, int n, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      MORSE_desc_t *B, int Bm, int Bn, int ldb,
+                      MORSE_Complex64_t beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zsymm_parsec, "symm",
+                            sizeof(MORSE_enum),     &side,              VALUE,
+                            sizeof(MORSE_enum),     &uplo,              VALUE,
+                            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 | REGION_FULL,
+                            sizeof(int),            &lda,               VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | REGION_FULL,
+                            sizeof(int),            &ldb,               VALUE,
+                            sizeof(double),         &beta,              VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                            sizeof(int),            &ldc,               VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zsyr2k.c b/runtime/parsec/codelets/codelet_zsyr2k.c
new file mode 100644
index 000000000..35cac24ff
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zsyr2k.c
@@ -0,0 +1,91 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zsyr2k.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zsyr2k_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *n;
+    int *k;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gB;
+    int *ldb;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gC;
+    int *ldc;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &ldb,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+    void *C = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zsyr2k(*uplo, *trans, *n, *k,
+                *alpha, A, *lda,
+                        B, *ldb,
+                *beta,  C, *ldc);
+
+    return 0;
+}
+
+void MORSE_TASK_zsyr2k(MORSE_option_t *options,
+                       MORSE_enum uplo, MORSE_enum trans,
+                       int n, int k, int nb,
+                       MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn, int ldb,
+                       MORSE_Complex64_t beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zsyr2k_parsec,    "syr2k",
+                            sizeof(MORSE_enum),     &uplo,                  VALUE,
+                            sizeof(MORSE_enum),     &trans,                 VALUE,
+                            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 | REGION_FULL,
+                            sizeof(int),            &lda,                   VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INPUT | REGION_FULL,
+                            sizeof(int),            &ldb,                   VALUE,
+                            sizeof(double),         &beta,                  VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                            sizeof(int),            &ldc,                   VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zsyrk.c b/runtime/parsec/codelets/codelet_zsyrk.c
new file mode 100644
index 000000000..07cc9b0fa
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zsyrk.c
@@ -0,0 +1,82 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zsyrk.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zsyrk_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *n;
+    int *k;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *lda;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gC;
+    int *ldc;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc
+                        );
+
+    MORSE_Complex64_t *A = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    MORSE_Complex64_t *C = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zsyrk(*uplo, *trans, *n, *k,
+               *alpha, A, *lda,
+               *beta,  C, *ldc);
+
+    return 0;
+}
+
+void MORSE_TASK_zsyrk(MORSE_option_t *options,
+                      MORSE_enum uplo, MORSE_enum trans,
+                      int n, int k, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      MORSE_Complex64_t beta, MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zsyrk_parsec,                 "syrk",
+                             sizeof(MORSE_enum),    &uplo,                              VALUE,
+                             sizeof(MORSE_enum),    &trans,                             VALUE,
+                             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 | REGION_FULL,
+                             sizeof(int),           &lda,                               VALUE,
+                             sizeof(MORSE_Complex64_t),           &beta,                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldc,                               VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zsyssq.c b/runtime/parsec/codelets/codelet_zsyssq.c
new file mode 100644
index 000000000..81a2cd873
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zsyssq.c
@@ -0,0 +1,64 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zsyssq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zsyssq_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gSCALESUMSQ;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gSCALESUMSQ
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    double *SCALESUMSQ = (double *) DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCALESUMSQ);
+
+    CORE_zsyssq( *uplo, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+
+    return 0;
+}
+
+void MORSE_TASK_zsyssq( MORSE_option_t *options,
+                        MORSE_enum uplo, int n,
+                        MORSE_desc_t *A, int Am, int An, int lda,
+                        MORSE_desc_t *SCALESUMSQ, int SCALESUMSQm, int SCALESUMSQn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zsyssq_parsec,    "syssq",
+                            sizeof(MORSE_enum),     &uplo,                  VALUE,
+                            sizeof(int),            &n,                     VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                               INPUT | REGION_FULL,
+                            sizeof(int),            &lda,                   VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( SCALESUMSQ, MORSE_Complex64_t, SCALESUMSQm, SCALESUMSQn ),    INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zsytrf_nopiv.c b/runtime/parsec/codelets/codelet_zsytrf_nopiv.c
new file mode 100644
index 000000000..431bf72c2
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zsytrf_nopiv.c
@@ -0,0 +1,64 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zsytrf_nopiv.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zsytrf_nopiv_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    int *iinfo;
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_zsytf2_nopiv(*uplo, *n, A, *lda);
+
+    return 0;
+}
+
+void MORSE_TASK_zsytrf_nopiv(MORSE_option_t *options,
+                             MORSE_enum uplo, int n, int nb,
+                             MORSE_desc_t *A, int Am, int An, int lda,
+                             int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zsytrf_nopiv_parsec,               "sytrf_nopiv",
+        sizeof(MORSE_enum),              &uplo,                VALUE,
+        sizeof(int),                     &n,                   VALUE,
+        PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+        sizeof(int),                     &lda,                 VALUE,
+        sizeof(int),                     &iinfo,               VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztile_zero.c b/runtime/parsec/codelets/codelet_ztile_zero.c
new file mode 100644
index 000000000..fcde76c57
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztile_zero.c
@@ -0,0 +1,68 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztile_zero.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztile_zero_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *X1;
+    int *X2;
+    int *Y1;
+    int *Y2;
+    dague_data_copy_t *A;
+    int lda;
+    int x, y;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &X1,
+                          UNPACK_VALUE, &X2,
+                          UNPACK_VALUE, &Y1,
+                          UNPACK_VALUE, &Y2,
+                          UNPACK_DATA,  &A,
+                          UNPACK_VALUE, &lda
+                        );
+
+    MORSE_Complex64_t *T = (MORSE_Complex64_t *)DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)A);
+
+    for (x = *X1; x < *X2; x++)
+        for (y = *Y1; y < *Y2; y++)
+            T[lda*x+y] = 0.0;
+
+    return 0;
+}
+
+void MORSE_TASK_ztile_zero(MORSE_option_t *options,
+                           int X1, int X2, int Y1, int Y2,
+                           MORSE_desc_t *A, int Am, int An, int lda)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,  CORE_ztile_zero_parsec,   "tile zero",
+                             sizeof(int),       &X1,                       VALUE,
+                             sizeof(int),       &X2,                       VALUE,
+                             sizeof(int),       &Y1,                       VALUE,
+                             sizeof(int),       &Y2,                       VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     OUTPUT | REGION_FULL,
+                             sizeof(int),       &lda,                      VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztradd.c b/runtime/parsec/codelets/codelet_ztradd.c
new file mode 100644
index 000000000..de304f3be
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztradd.c
@@ -0,0 +1,145 @@
+/**
+ *
+ * @copyright (c) 2009-2014 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2014 Inria. All rights reserved.
+ * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ *
+ * @file codelet_ztradd.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @comment This file has been automatically generated
+ *          from Plasma 2.5.0 for MORSE 1.0.0
+ * @author Mathieu Faverge
+ * @date 2010-11-15
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztradd_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *trans;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *LDA;
+    MORSE_Complex64_t *beta;
+    dague_data_copy_t *gB;
+    int *LDB;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_VALUE, &beta,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB
+                        );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_ztradd(*uplo, *trans, *M, *N, *alpha, A, *LDA, *beta, B, *LDB);
+
+    return 0;
+}
+
+/**
+ ******************************************************************************
+ *
+ * @ingroup CORE_MORSE_Complex64_t
+ *
+ *  MORSE_TASK_ztradd adds two trapezoidal matrices together as in PBLAS pztradd.
+ *
+ *       B <- alpha * op(A)  + beta * B,
+ *
+ * where op(X) = X, X', or conj(X')
+ *
+ *******************************************************************************
+ *
+ * @param[in] uplo
+ *          Specifies the shape of A and B matrices:
+ *          = MorseUpperLower: A and B are general matrices.
+ *          = MorseUpper: op(A) and B are upper trapezoidal matrices.
+ *          = MorseLower: op(A) and B are lower trapezoidal matrices.
+ *
+ * @param[in] trans
+ *          Specifies whether the matrix A is non-transposed, transposed, or
+ *          conjugate transposed
+ *          = MorseNoTrans:   op(A) = A
+ *          = MorseTrans:     op(A) = A'
+ *          = MorseConjTrans: op(A) = conj(A')
+ *
+ * @param[in] M
+ *          Number of rows of the matrices op(A) and B.
+ *
+ * @param[in] N
+ *          Number of columns of the matrices op(A) and B.
+ *
+ * @param[in] alpha
+ *          Scalar factor of A.
+ *
+ * @param[in] A
+ *          Matrix of size LDA-by-N, if trans = MorseNoTrans, LDA-by-M
+ *          otherwise.
+ *
+ * @param[in] LDA
+ *          Leading dimension of the array A. LDA >= max(1,k), with k=M, if
+ *          trans = MorseNoTrans, and k=N otherwise.
+ *
+ * @param[in] beta
+ *          Scalar factor of B.
+ *
+ * @param[in,out] B
+ *          Matrix of size LDB-by-N.
+ *          On exit, B = alpha * op(A) + beta * B
+ *
+ * @param[in] LDB
+ *          Leading dimension of the array B. LDB >= max(1,M)
+ *
+ *******************************************************************************
+ *
+ * @return
+ *          \retval MORSE_SUCCESS successful exit
+ *          \retval <0 if -i, the i-th argument had an illegal value
+ *
+ ******************************************************************************/
+void MORSE_TASK_ztradd(MORSE_option_t *options,
+                       MORSE_enum uplo, MORSE_enum trans, int m, int n, int nb,
+                       MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_Complex64_t beta,  MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(
+        DAGUE_dtd_handle, CORE_ztradd_parsec, "tradd",
+        sizeof(MORSE_enum),        &uplo,  VALUE,
+        sizeof(MORSE_enum),        &trans, VALUE,
+        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 | REGION_FULL,
+        sizeof(int),               &lda,   VALUE,
+        sizeof(MORSE_Complex64_t), &beta,  VALUE,
+        PASSED_BY_REF,              RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+        sizeof(int),               &ldb,   VALUE,
+        0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztrasm.c b/runtime/parsec/codelets/codelet_ztrasm.c
new file mode 100644
index 000000000..8ca823ada
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztrasm.c
@@ -0,0 +1,74 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztrasm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztrasm_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *storev;
+    MORSE_enum *uplo;
+    MORSE_enum *diag;
+    int *M;
+    int *N;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &storev,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gwork
+                        );
+
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *work = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gwork);
+
+    CORE_ztrasm(*storev, *uplo, *diag, *M, *N, A, *lda, work);
+
+    return 0;
+}
+
+void MORSE_TASK_ztrasm(MORSE_option_t *options,
+                       MORSE_enum storev, MORSE_enum uplo, MORSE_enum diag, int M, int N,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *B, int Bm, int Bn)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztrasm_parsec,    "trasm",
+                            sizeof(MORSE_enum),     &storev,                VALUE,
+                            sizeof(MORSE_enum),     &uplo,                  VALUE,
+                            sizeof(MORSE_enum),     &diag,                  VALUE,
+                            sizeof(int),            &M,                     VALUE,
+                            sizeof(int),            &N,                     VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                            sizeof(int),            &lda,                   VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztrmm.c b/runtime/parsec/codelets/codelet_ztrmm.c
new file mode 100644
index 000000000..b0b584e09
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztrmm.c
@@ -0,0 +1,87 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztrmm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztrmm_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *uplo;
+    MORSE_enum *transA;
+    MORSE_enum *diag;
+    int *M;
+    int *N;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gA;
+    int *LDA;
+    dague_data_copy_t *gB;
+    int *LDB;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &transA,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &M,
+                          UNPACK_VALUE, &N,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_DATA,  &gB,
+                          UNPACK_VALUE, &LDB
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *B = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gB);
+
+    CORE_ztrmm(*side, *uplo,
+        *transA, *diag,
+        *M, *N,
+        *alpha, A, *LDA,
+        B, *LDB);
+
+    return 0;
+}
+
+void MORSE_TASK_ztrmm(MORSE_option_t *options,
+                      MORSE_enum side, MORSE_enum uplo, MORSE_enum transA, MORSE_enum diag,
+                      int m, int n, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztrmm_parsec,     "trmm",
+                            sizeof(MORSE_enum),     &side,                  VALUE,
+                            sizeof(MORSE_enum),     &uplo,                  VALUE,
+                            sizeof(MORSE_enum),     &transA,                VALUE,
+                            sizeof(MORSE_enum),     &diag,                  VALUE,
+                            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 | REGION_FULL,
+                            sizeof(int),            &lda,                   VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+                            sizeof(int),            &ldb,                   VALUE,
+                            0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztrsm.c b/runtime/parsec/codelets/codelet_ztrsm.c
new file mode 100644
index 000000000..e2c994b84
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztrsm.c
@@ -0,0 +1,81 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztrsm.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztrsm_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side, *uplo, *trans, *diag;
+    int  *tempmm, *nb, *ldak, *ldam;
+    MORSE_Complex64_t *alpha;
+    dague_data_copy_t *gT;
+    dague_data_copy_t *gC;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &tempmm,
+                          UNPACK_VALUE, &nb,
+                          UNPACK_VALUE, &alpha,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldak,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldam
+                        );
+
+    void *T = DAGUE_DATA_COPY_GET_PTR(gT);
+    void *C = DAGUE_DATA_COPY_GET_PTR(gC);
+    (void) T;
+    (void) C;
+
+    CORE_ztrsm(*side, *uplo, *trans, *diag,
+           *tempmm, *nb, *alpha, T, *ldak,
+           C, *ldam);
+
+    return 0;
+}
+
+void MORSE_TASK_ztrsm(MORSE_option_t *options,
+                      MORSE_enum side, MORSE_enum uplo, MORSE_enum transA, MORSE_enum diag,
+                      int m, int n, int nb,
+                      MORSE_Complex64_t alpha, MORSE_desc_t *A, int Am, int An, int lda,
+                      MORSE_desc_t *B, int Bm, int Bn, int ldb)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztrsm_parsec,        "Trsm",
+                             sizeof(MORSE_enum),    &side,                     VALUE,
+                             sizeof(MORSE_enum),    &uplo,                     VALUE,
+                             sizeof(MORSE_enum),    &transA,                   VALUE,
+                             sizeof(MORSE_enum),    &diag,                     VALUE,
+                             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 | REGION_FULL,
+                             sizeof(int),           &lda,                      VALUE,
+                             PASSED_BY_REF,     RTBLKADDR( B, MORSE_Complex64_t, Bm, Bn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldb,                      VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztrssq.c b/runtime/parsec/codelets/codelet_ztrssq.c
new file mode 100644
index 000000000..3632c3843
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztrssq.c
@@ -0,0 +1,71 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztrssq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztrssq_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *diag;
+    int *m;
+    int *n;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gSCALESUMSQ;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gSCALESUMSQ
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    double *SCALESUMSQ = (double *) DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gSCALESUMSQ);
+
+    CORE_ztrssq( *uplo, *diag, *m, *n, A, *lda, &SCALESUMSQ[0], &SCALESUMSQ[1]);
+
+    return 0;
+}
+
+void MORSE_TASK_ztrssq( MORSE_option_t *options,
+                        MORSE_enum uplo, MORSE_enum diag,
+                        int m, int n,
+                        MORSE_desc_t *A, int Am, int An, int lda,
+                        MORSE_desc_t *SCALESUMSQ, int SCALESUMSQm, int SCALESUMSQn )
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztrssq_parsec,    "trssq",
+                            sizeof(MORSE_enum),     &uplo,                  VALUE,
+                            sizeof(MORSE_enum),     &diag,                  VALUE,
+                            sizeof(int),            &m,                     VALUE,
+                            sizeof(int),            &n,                     VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A, MORSE_Complex64_t, Am, An ),                               INPUT | REGION_FULL,
+                            sizeof(int),            &lda,                   VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( SCALESUMSQ, MORSE_Complex64_t, SCALESUMSQm, SCALESUMSQn ),    INOUT | REGION_FULL,
+                            0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztrtri.c b/runtime/parsec/codelets/codelet_ztrtri.c
new file mode 100644
index 000000000..532065827
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztrtri.c
@@ -0,0 +1,74 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztrtri.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztrtri_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *uplo;
+    MORSE_enum *diag;
+    int *N;
+    dague_data_copy_t *gA;
+    int *LDA;
+    MORSE_sequence_t *sequence;
+    MORSE_request_t *request;
+    int *iinfo;
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &uplo,
+                          UNPACK_VALUE, &diag,
+                          UNPACK_VALUE, &N,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &LDA,
+                          UNPACK_VALUE, &sequence,
+                          UNPACK_VALUE, &request,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+
+    CORE_ztrtri(*uplo, *diag, *N, A, *LDA, &info);
+
+    return 0;
+}
+
+void MORSE_TASK_ztrtri(MORSE_option_t *options,
+                       MORSE_enum uplo, MORSE_enum diag,
+                       int n, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,          CORE_ztrtri_parsec,    "trtri",
+                            sizeof(MORSE_enum),         &uplo,                  VALUE,
+                            sizeof(MORSE_enum),         &diag,                  VALUE,
+                            sizeof(int),                &n,                     VALUE,
+                            PASSED_BY_REF,              RTBLKADDR( A, MORSE_Complex64_t, Am, An ),   INOUT | REGION_FULL,
+                            sizeof(int),                &lda,                   VALUE,
+                            sizeof(MORSE_sequence_t*),  &(options->sequence),   VALUE,
+                            sizeof(MORSE_request_t*),   &(options->request),    VALUE,
+                            sizeof(int),                &iinfo,                 VALUE,
+                            0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztslqt.c b/runtime/parsec/codelets/codelet_ztslqt.c
new file mode 100644
index 000000000..5a6b464a7
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztslqt.c
@@ -0,0 +1,85 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztslqt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztslqt_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                        );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_ztslqt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_ztslqt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztslqt_parsec,    "tslqt",
+                            sizeof(int),            &m,                     VALUE,
+                            sizeof(int),            &n,                     VALUE,
+                            sizeof(int),            &ib,                    VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INOUT | REGION_FULL,
+                            sizeof(int),            &lda1,                  VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                            sizeof(int),            &lda2,                  VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),        OUTPUT | REGION_FULL,
+                            sizeof(int),                        &ldt,       VALUE,
+                            sizeof(MORSE_Complex64_t)*nb,       NULL,       SCRATCH,
+                            sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztsmlq.c b/runtime/parsec/codelets/codelet_ztsmlq.c
new file mode 100644
index 000000000..01373a97d
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztsmlq.c
@@ -0,0 +1,113 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztsmlq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztsmlq_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gV;
+    int *ldv;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &m1,
+                          UNPACK_VALUE, &n1,
+                          UNPACK_VALUE, &m2,
+                          UNPACK_VALUE, &n2,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gV,
+                          UNPACK_VALUE, &ldv,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork
+                        );
+
+
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *V = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gV);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_ztsmlq(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
+                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+
+    return 0;
+}
+
+void MORSE_TASK_ztsmlq(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    int ldwork = side == MorseLeft ? ib : nb;
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztsmlq_parsec,    "tsmlq",
+                            sizeof(MORSE_enum),                &side,       VALUE,
+                            sizeof(MORSE_enum),                &trans,      VALUE,
+                            sizeof(int),                        &m1,        VALUE,
+                            sizeof(int),                        &n1,        VALUE,
+                            sizeof(int),                        &m2,        VALUE,
+                            sizeof(int),                        &n2,        VALUE,
+                            sizeof(int),                        &k,         VALUE,
+                            sizeof(int),                        &ib,        VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),  INOUT | REGION_FULL,
+                            sizeof(int),           &lda1,                   VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),  INOUT | REGION_FULL,
+                            sizeof(int),           &lda2,                   VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( V, MORSE_Complex64_t, Vm, Vn ),     INPUT | REGION_FULL,
+                            sizeof(int),           &ldv,                    VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),     INPUT | REGION_FULL,
+                            sizeof(int),           &ldt,                    VALUE,
+                            sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
+                            sizeof(int),           &ldwork,                 VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztsmqr.c b/runtime/parsec/codelets/codelet_ztsmqr.c
new file mode 100644
index 000000000..4134ca1c9
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztsmqr.c
@@ -0,0 +1,112 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztsmqr.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztsmqr_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gV;
+    int *ldv;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &m1,
+                          UNPACK_VALUE, &n1,
+                          UNPACK_VALUE, &m2,
+                          UNPACK_VALUE, &n2,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gV,
+                          UNPACK_VALUE, &ldv,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork
+                        );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *V = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gV);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_ztsmqr(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
+                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+
+    return 0;
+}
+
+void MORSE_TASK_ztsmqr(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    int ldwork = side == MorseLeft ? ib : nb;
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztsmqr_parsec,                "tsmqr",
+                             sizeof(MORSE_enum),    &side,                              VALUE,
+                             sizeof(MORSE_enum),    &trans,                             VALUE,
+                             sizeof(int),           &m1,                                VALUE,
+                             sizeof(int),           &n1,                                VALUE,
+                             sizeof(int),           &m2,                                VALUE,
+                             sizeof(int),           &n2,                                VALUE,
+                             sizeof(int),           &k,                                 VALUE,
+                             sizeof(int),           &ib,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),    INOUT | REGION_FULL,
+                             sizeof(int),           &lda1,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),    INOUT | REGION_FULL,
+                             sizeof(int),           &lda2,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( V, MORSE_Complex64_t, Vm, Vn ),       INPUT | REGION_FULL,
+                             sizeof(int),           &ldv,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),       INPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                               VALUE,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
+                             sizeof(int),           &ldwork,                            VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztsqrt.c b/runtime/parsec/codelets/codelet_ztsqrt.c
new file mode 100644
index 000000000..c31c667ba
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztsqrt.c
@@ -0,0 +1,85 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztsqrt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztsqrt_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                        );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_ztsqrt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_ztsqrt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztsqrt_parsec,                "tsqrt",
+                             sizeof(MORSE_enum),    &m,                                 VALUE,
+                             sizeof(int),           &n,                                 VALUE,
+                             sizeof(int),           &ib,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INOUT | REGION_D | REGION_U,
+                             sizeof(int),           &lda1,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda2,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),        OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                               VALUE,
+                             sizeof(MORSE_Complex64_t)*nb,       NULL,                  SCRATCH,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_ztstrf.c b/runtime/parsec/codelets/codelet_ztstrf.c
new file mode 100644
index 000000000..fbc14b603
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_ztstrf.c
@@ -0,0 +1,100 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_ztstrf.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_ztstrf_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    int *nb;
+    dague_data_copy_t *gU;
+    int *ldu;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gL;
+    int *ldl;
+    int *IPIV;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+    MORSE_bool *check_info;
+    int *iinfo;
+
+    int info;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_VALUE, &nb,
+                          UNPACK_DATA,  &gU,
+                          UNPACK_VALUE, &ldu,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gL,
+                          UNPACK_VALUE, &ldl,
+                          UNPACK_SCRATCH, &IPIV,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork,
+                          UNPACK_VALUE, &check_info,
+                          UNPACK_VALUE, &iinfo
+                        );
+
+    void *U = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gU);
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *L = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gL);
+
+    CORE_ztstrf(*m, *n, *ib, *nb, U, *ldu, A, *lda, L, *ldl, IPIV, WORK, *ldwork, &info);
+
+    return 0;
+}
+
+void MORSE_TASK_ztstrf(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *U, int Um, int Un, int ldu,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *L, int Lm, int Ln, int ldl,
+                       int *IPIV,
+                       MORSE_bool check_info, int iinfo)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_ztstrf_parsec,               "tstrf",
+                             sizeof(int),           &m,                                VALUE,
+                             sizeof(int),           &n,                                VALUE,
+                             sizeof(int),           &ib,                               VALUE,
+                             sizeof(int),           &nb,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( U, MORSE_Complex64_t, Um, Un ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldu,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( L, MORSE_Complex64_t, Lm, Ln ),     OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldl,                              VALUE,
+                             sizeof(int)*nb,        IPIV,                              SCRATCH,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                 SCRATCH,
+                             sizeof(int),           &nb,                               VALUE,
+                             sizeof(int),           &check_info,                       VALUE,
+                             sizeof(int),           &iinfo,                            VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zttlqt.c b/runtime/parsec/codelets/codelet_zttlqt.c
new file mode 100644
index 000000000..10caf2924
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zttlqt.c
@@ -0,0 +1,85 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zttlqt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zttlqt_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE,   &m,
+                          UNPACK_VALUE,   &n,
+                          UNPACK_VALUE,   &ib,
+                          UNPACK_DATA,    &gA1,
+                          UNPACK_VALUE,   &lda1,
+                          UNPACK_DATA,    &gA2,
+                          UNPACK_VALUE,   &lda2,
+                          UNPACK_DATA,    &gT,
+                          UNPACK_VALUE,   &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                        );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_zttlqt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_zttlqt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zttlqt_parsec,    "ttlqt",
+                            sizeof(int),            &m,                     VALUE,
+                            sizeof(int),            &n,                     VALUE,
+                            sizeof(int),            &ib,                    VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),    INOUT | REGION_FULL,
+                            sizeof(int),            &lda1,                  VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),    INOUT | REGION_FULL,
+                            sizeof(int),            &lda2,                  VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),       OUTPUT | REGION_FULL,
+                            sizeof(int),            &ldt,                   VALUE,
+                            sizeof(MORSE_Complex64_t)*nb,       NULL,       SCRATCH,
+                            sizeof(MORSE_Complex64_t)*ib*nb,    NULL,       SCRATCH,
+                            0);
+}
diff --git a/runtime/parsec/codelets/codelet_zttmlq.c b/runtime/parsec/codelets/codelet_zttmlq.c
new file mode 100644
index 000000000..be11155fb
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zttmlq.c
@@ -0,0 +1,110 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zttmlq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zttmlq_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gV;
+    int *ldv;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &m1,
+                          UNPACK_VALUE, &n1,
+                          UNPACK_VALUE, &m2,
+                          UNPACK_VALUE, &n2,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gV,
+                          UNPACK_VALUE, &ldv,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork
+                        );
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *V = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gV);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_zttmlq(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib, A1, *lda1,
+                A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+
+    return 0;
+}
+
+void MORSE_TASK_zttmlq(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    int ldwork = side == MorseLeft ? ib : nb;
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zttmlq_parsec,        "ttmlq",
+                            sizeof(MORSE_enum),     &side,                      VALUE,
+                            sizeof(MORSE_enum),     &trans,                     VALUE,
+                            sizeof(int),            &m1,                        VALUE,
+                            sizeof(int),            &n1,                        VALUE,
+                            sizeof(int),            &m2,                        VALUE,
+                            sizeof(int),            &n2,                        VALUE,
+                            sizeof(int),            &k,                         VALUE,
+                            sizeof(int),            &ib,                        VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),    INOUT | REGION_FULL,
+                            sizeof(int),            &lda1,                      VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),    INOUT | REGION_FULL,
+                            sizeof(int),            &lda2,                      VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( V, MORSE_Complex64_t, Vm, Vn ),       INPUT | REGION_FULL,
+                            sizeof(int),            &ldv,                       VALUE,
+                            PASSED_BY_REF,          RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),       INPUT | REGION_FULL,
+                            sizeof(int),            &ldt,                       VALUE,
+                            sizeof(MORSE_Complex64_t)*ib*nb,    NULL,           SCRATCH,
+                            sizeof(int),            &ldwork,                    VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zttmqr.c b/runtime/parsec/codelets/codelet_zttmqr.c
new file mode 100644
index 000000000..c9260b209
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zttmqr.c
@@ -0,0 +1,113 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zttmqr.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zttmqr_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m1;
+    int *n1;
+    int *m2;
+    int *n2;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gV;
+    int *ldv;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &m1,
+                          UNPACK_VALUE, &n1,
+                          UNPACK_VALUE, &m2,
+                          UNPACK_VALUE, &n2,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gV,
+                          UNPACK_VALUE, &ldv,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork
+                        );
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *V = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gV);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_zttmqr(*side, *trans, *m1, *n1, *m2, *n2, *k, *ib,
+                A1, *lda1, A2, *lda2, V, *ldv, T, *ldt, WORK, *ldwork);
+
+
+    return 0;
+}
+
+
+void MORSE_TASK_zttmqr(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m1, int n1, int m2, int n2, int k, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *V, int Vm, int Vn, int ldv,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    int ldwork = side == MorseLeft ? ib : nb;
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zttmqr_parsec,               "ttmqr",
+                             sizeof(MORSE_enum),    &side,                             VALUE,
+                             sizeof(MORSE_enum),    &trans,                            VALUE,
+                             sizeof(int),           &m1,                               VALUE,
+                             sizeof(int),           &n1,                               VALUE,
+                             sizeof(int),           &m2,                               VALUE,
+                             sizeof(int),           &n2,                               VALUE,
+                             sizeof(int),           &k,                                VALUE,
+                             sizeof(int),           &ib,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda1,                             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda2,                             VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( V, MORSE_Complex64_t, Vm, Vn ),        INPUT | REGION_FULL,
+                             sizeof(int),           &ldv,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),        INPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                              VALUE,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                           SCRATCH,
+                             sizeof(int),           &ldwork,                           VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zttqrt.c b/runtime/parsec/codelets/codelet_zttqrt.c
new file mode 100644
index 000000000..fc607fac1
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zttqrt.c
@@ -0,0 +1,85 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zttqrt.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zttqrt_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    int *m;
+    int *n;
+    int *ib;
+    dague_data_copy_t *gA1;
+    int *lda1;
+    dague_data_copy_t *gA2;
+    int *lda2;
+    dague_data_copy_t *gT;
+    int *ldt;
+    MORSE_Complex64_t *TAU;
+    MORSE_Complex64_t *WORK;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA1,
+                          UNPACK_VALUE, &lda1,
+                          UNPACK_DATA,  &gA2,
+                          UNPACK_VALUE, &lda2,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_SCRATCH, &TAU,
+                          UNPACK_SCRATCH, &WORK
+                        );
+
+
+    void *A1 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA1);
+    void *A2 = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA2);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+
+    CORE_zttqrt(*m, *n, *ib, A1, *lda1, A2, *lda2, T, *ldt, TAU, WORK);
+
+    return 0;
+}
+
+void MORSE_TASK_zttqrt(MORSE_option_t *options,
+                       int m, int n, int ib, int nb,
+                       MORSE_desc_t *A1, int A1m, int A1n, int lda1,
+                       MORSE_desc_t *A2, int A2m, int A2n, int lda2,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zttqrt_parsec,                "ttqrt",
+                             sizeof(MORSE_enum),    &m,                                 VALUE,
+                             sizeof(int),           &n,                                 VALUE,
+                             sizeof(int),           &ib,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A1, MORSE_Complex64_t, A1m, A1n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda1,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A2, MORSE_Complex64_t, A2m, A2n ),     INOUT | REGION_FULL,
+                             sizeof(int),           &lda2,                              VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),        OUTPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                               VALUE,
+                             sizeof(MORSE_Complex64_t)*nb,       NULL,                  SCRATCH,
+                             sizeof(MORSE_Complex64_t)*ib*nb,    NULL,                  SCRATCH,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zunmlq.c b/runtime/parsec/codelets/codelet_zunmlq.c
new file mode 100644
index 000000000..8880376d3
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zunmlq.c
@@ -0,0 +1,97 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zunmlq.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zunmlq_parsec(dague_execution_unit_t *context, dague_execution_context_t * this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m;
+    int *n;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gT;
+    int *ldt;
+    dague_data_copy_t *gC;
+    int *ldc;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE, &side,
+                          UNPACK_VALUE, &trans,
+                          UNPACK_VALUE, &m,
+                          UNPACK_VALUE, &n,
+                          UNPACK_VALUE, &k,
+                          UNPACK_VALUE, &ib,
+                          UNPACK_DATA,  &gA,
+                          UNPACK_VALUE, &lda,
+                          UNPACK_DATA,  &gT,
+                          UNPACK_VALUE, &ldt,
+                          UNPACK_DATA,  &gC,
+                          UNPACK_VALUE, &ldc,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE, &ldwork
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gA);
+    void *T = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gT);
+    void *C = DAGUE_DATA_COPY_GET_PTR((dague_data_copy_t *)gC);
+
+    CORE_zunmlq(*side, *trans, *m, *n, *k, *ib,
+                A, *lda, T, *ldt, C, *ldc, WORK, *ldwork);
+
+    return 0;
+}
+
+void MORSE_TASK_zunmlq(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m, int n, int k, int ib, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt,
+                       MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zunmlq_parsec,            "unmlq",
+                            sizeof(MORSE_enum),                 &side,              VALUE,
+                            sizeof(MORSE_enum),                 &trans,             VALUE,
+                            sizeof(int),                        &m,                 VALUE,
+                            sizeof(int),                        &n,                 VALUE,
+                            sizeof(int),                        &k,                 VALUE,
+                            sizeof(int),                        &ib,                VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_FULL,
+                            sizeof(int),                        &lda,               VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),     INPUT | REGION_FULL,
+                            sizeof(int),                        &ldt,               VALUE,
+                            PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                            sizeof(int),                        &ldc,               VALUE,
+                            sizeof(MORSE_Complex64_t)*ib*nb,    NULL,               SCRATCH,
+                            sizeof(int),                        &nb,                VALUE,
+                             0);
+}
diff --git a/runtime/parsec/codelets/codelet_zunmqr.c b/runtime/parsec/codelets/codelet_zunmqr.c
new file mode 100644
index 000000000..a41dce551
--- /dev/null
+++ b/runtime/parsec/codelets/codelet_zunmqr.c
@@ -0,0 +1,95 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+/**
+ * @file codelet_zunmqr.c
+ *
+ *  MORSE codelets kernel
+ *  MORSE is a software package provided by Univ. of Tennessee,
+ *  Univ. of California Berkeley and Univ. of Colorado Denver
+ *
+ * @version 2.5.0
+ * @author Reazul Hoque
+ * @precisions normal z -> c d s
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+static int
+CORE_zunmqr_parsec(dague_execution_unit_t *context, dague_execution_context_t *this_task)
+{
+    MORSE_enum *side;
+    MORSE_enum *trans;
+    int *m;
+    int *n;
+    int *k;
+    int *ib;
+    dague_data_copy_t *gA;
+    int *lda;
+    dague_data_copy_t *gT;
+    int *ldt;
+    dague_data_copy_t *gC;
+    int *ldc;
+    MORSE_Complex64_t *WORK;
+    int *ldwork;
+
+    dague_dtd_unpack_args(this_task,
+                          UNPACK_VALUE,   &side,
+                          UNPACK_VALUE,   &trans,
+                          UNPACK_VALUE,   &m,
+                          UNPACK_VALUE,   &n,
+                          UNPACK_VALUE,   &k,
+                          UNPACK_VALUE,   &ib,
+                          UNPACK_DATA,    &gA,
+                          UNPACK_VALUE,   &lda,
+                          UNPACK_DATA,    &gT,
+                          UNPACK_VALUE,   &ldt,
+                          UNPACK_DATA,    &gC,
+                          UNPACK_VALUE,   &ldc,
+                          UNPACK_SCRATCH, &WORK,
+                          UNPACK_VALUE,   &ldwork
+                        );
+
+    void *A = DAGUE_DATA_COPY_GET_PTR(gA);
+    void *T = DAGUE_DATA_COPY_GET_PTR(gT);
+    void *C = DAGUE_DATA_COPY_GET_PTR(gC);
+
+    CORE_zunmqr(*side, *trans, *m, *n, *k, *ib,
+                A, *lda, T, *ldt, C, *ldc, WORK, *ldwork);
+
+    return 0;
+}
+
+void MORSE_TASK_zunmqr(MORSE_option_t *options,
+                       MORSE_enum side, MORSE_enum trans,
+                       int m, int n, int k, int ib, int nb,
+                       MORSE_desc_t *A, int Am, int An, int lda,
+                       MORSE_desc_t *T, int Tm, int Tn, int ldt,
+                       MORSE_desc_t *C, int Cm, int Cn, int ldc)
+{
+    dague_dtd_handle_t* DAGUE_dtd_handle = (dague_dtd_handle_t *)(options->sequence->schedopt);
+
+    insert_task_generic_fptr(DAGUE_dtd_handle,      CORE_zunmqr_parsec,                "unmqr",
+                             sizeof(MORSE_enum),    &side,                              VALUE,
+                             sizeof(MORSE_enum),    &trans,                             VALUE,
+                             sizeof(int),           &m,                                 VALUE,
+                             sizeof(int),           &n,                                 VALUE,
+                             sizeof(int),           &k,                                 VALUE,
+                             sizeof(int),           &ib,                                VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( A, MORSE_Complex64_t, Am, An ),     INPUT | REGION_L,
+                             sizeof(int),           &lda,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( T, MORSE_Complex64_t, Tm, Tn ),     INPUT | REGION_FULL,
+                             sizeof(int),           &ldt,                               VALUE,
+                             PASSED_BY_REF,         RTBLKADDR( C, MORSE_Complex64_t, Cm, Cn ),     INOUT | REGION_FULL,
+                             sizeof(int),           &ldc,                               VALUE,
+                             sizeof(MORSE_Complex64_t)*ib*nb,   NULL,                   SCRATCH,
+                             sizeof(int),           &nb,                                VALUE,
+                             0);
+}
diff --git a/runtime/parsec/control/runtime_async.c b/runtime/parsec/control/runtime_async.c
new file mode 100644
index 000000000..b888daf60
--- /dev/null
+++ b/runtime/parsec/control/runtime_async.c
@@ -0,0 +1,72 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include <stdlib.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+/*******************************************************************************
+ *  Create a sequence
+ **/
+int RUNTIME_sequence_create(MORSE_context_t *morse, MORSE_sequence_t *sequence)
+{
+    dague_context_t    *dague = (dague_context_t *)morse->schedopt;
+    dague_dtd_handle_t *dague_dtd_handle = dague_dtd_handle_new((dague_context_t *)morse->schedopt, 1);
+
+    dague_enqueue(dague, (dague_handle_t*) dague_dtd_handle);
+    sequence->schedopt = dague_dtd_handle;
+
+#if defined (OVERLAP)
+    dague_context_start(dague);
+#endif
+    return MORSE_SUCCESS;
+}
+
+/*******************************************************************************
+ *  Destroy a sequence
+ **/
+int RUNTIME_sequence_destroy(MORSE_context_t *morse, MORSE_sequence_t *sequence)
+{
+    dague_dtd_handle_t *dague_dtd_handle = (dague_dtd_handle_t *) sequence->schedopt;
+    (void)morse;
+
+    assert( dague_dtd_handle );
+
+    dague_dtd_handle_destruct(dague_dtd_handle);
+    sequence->schedopt = NULL;
+    return MORSE_SUCCESS;
+}
+
+/*******************************************************************************
+ *  Wait for the completion of a sequence
+ **/
+int RUNTIME_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence )
+{
+    dague_context_t    *dague = (dague_context_t *)morse->schedopt;
+    dague_dtd_handle_t *dague_dtd_handle = (dague_dtd_handle_t *) sequence->schedopt;
+
+    assert( dague_dtd_handle );
+
+    dague_dtd_handle_wait(dague, dague_dtd_handle);
+
+    return MORSE_SUCCESS;
+}
+
+/*******************************************************************************
+ *  Terminate a sequence
+ **/
+void RUNTIME_sequence_flush(void *schedopt, MORSE_sequence_t *sequence, MORSE_request_t *request, int status)
+{
+    dague_context_t *dague = (dague_context_t *)schedopt;
+    (void)schedopt;
+    sequence->request = request;
+    sequence->status = status;
+    request->status = status;
+    return;
+}
+
diff --git a/runtime/parsec/control/runtime_context.c b/runtime/parsec/control/runtime_context.c
new file mode 100644
index 000000000..364af1b1b
--- /dev/null
+++ b/runtime/parsec/control/runtime_context.c
@@ -0,0 +1,65 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include <stdlib.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+/*******************************************************************************
+ *  Create new context
+ **/
+void RUNTIME_context_create(MORSE_context_t *morse)
+{
+    /* In case of PaRSEC, this is done in init */
+    morse->scheduler = CHAMELEON_SCHED_PARSEC;
+    return;
+}
+
+/*******************************************************************************
+ *  Clean the context
+ **/
+
+void RUNTIME_context_destroy(MORSE_context_t *morse)
+{
+    (void)morse;
+    return;
+}
+
+/*******************************************************************************
+ *
+ */
+void RUNTIME_enable(MORSE_enum lever)
+{
+    switch (lever)
+    {
+        case MORSE_PROFILING_MODE:
+            // TODO: check correctly for this
+            //dague_profiling_start();
+            break;
+        default:
+            return;
+    }
+    return;
+}
+
+/*******************************************************************************
+ *
+ **/
+void RUNTIME_disable(MORSE_enum lever)
+{
+    switch (lever)
+    {
+        case MORSE_PROFILING_MODE:
+            // TODO: check correctly for this
+            //dague_profiling_stop();
+            break;
+        default:
+            return;
+    }
+    return;
+}
diff --git a/runtime/parsec/control/runtime_control.c b/runtime/parsec/control/runtime_control.c
new file mode 100644
index 000000000..edaafbfbe
--- /dev/null
+++ b/runtime/parsec/control/runtime_control.c
@@ -0,0 +1,113 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include <stdio.h>
+#include <stdlib.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+/*******************************************************************************
+ * Thread rank.
+ **/
+int RUNTIME_rank(MORSE_context_t *morse)
+{
+    return 0;
+}
+
+/*******************************************************************************
+ * Initialize MORSE
+ **/
+int RUNTIME_init_scheduler(MORSE_context_t *morse, int nworkers, int ncudas, int nthreads_per_worker)
+{
+    int hres = -1, default_ncores = -1;
+    int *argc = (int *)malloc(sizeof(int));
+    *argc = 0;
+
+    /* Initializing dague context */
+    if( 0 < nworkers ) {
+        default_ncores = nworkers;
+    }
+    morse->parallel_enabled = MORSE_TRUE;
+    morse->schedopt = (void *)dague_init(default_ncores, argc, NULL);
+    dague_dtd_init();
+    if(NULL != morse->schedopt) {
+        morse->nworkers = nworkers;
+        morse->nthreads_per_worker = nthreads_per_worker;
+        hres = 0;
+    }
+
+    free(argc);
+    return hres;
+}
+
+/*******************************************************************************
+ * Finalize MORSE
+ */
+void RUNTIME_finalize_scheduler(MORSE_context_t *morse)
+{
+    dague_context_t *dague = (dague_context_t*)morse->schedopt;
+    dague_dtd_fini();
+    dague_fini(&dague);
+    return;
+}
+
+/*******************************************************************************
+ * Barrier MORSE.
+ **/
+void RUNTIME_barrier(MORSE_context_t *morse)
+{
+    dague_context_t *dague = (dague_context_t*)morse->schedopt;
+    // This will be a problem with the fake tasks inserted to detect end of DTD algorithms
+    //dague_context_wait( dague );
+    return;
+}
+
+/*******************************************************************************
+ *  To suspend the processing of new tasks by workers
+ **/
+void RUNTIME_pause( MORSE_context_t *morse )
+{
+    (void)morse;
+    return;
+}
+
+/*******************************************************************************
+ *  This is the symmetrical call to RUNTIME_pause,
+ *  used to resume the workers polling for new tasks.
+ **/
+void RUNTIME_resume( MORSE_context_t *morse )
+{
+    (void)morse;
+    return;
+}
+
+/*******************************************************************************
+ *  This returns the rank of this process
+ **/
+void RUNTIME_comm_rank( int *rank )
+{
+#if defined(CHAMELEON_USE_MPI)
+    MPI_Comm_rank(MPI_COMM_WORLD, rank);
+#else
+    *rank = 0;
+#endif
+    return;
+}
+
+/*******************************************************************************
+ *  This returns the size of the distributed computation
+ **/
+void RUNTIME_comm_size( int *size )
+{
+#if defined(CHAMELEON_USE_MPI)
+    MPI_Comm_size(MPI_COMM_WORLD, size);
+#else
+    *size = 1;
+#endif
+    return;
+}
diff --git a/runtime/parsec/control/runtime_descriptor.c b/runtime/parsec/control/runtime_descriptor.c
new file mode 100644
index 000000000..ea7b69583
--- /dev/null
+++ b/runtime/parsec/control/runtime_descriptor.c
@@ -0,0 +1,268 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include <stdlib.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+struct morse_parsec_desc_s {
+    dague_ddesc_t  super;
+    MORSE_desc_t  *desc;
+    dague_data_t **data_map;
+};
+
+static void
+morse_parsec_key_to_coordinates(dague_ddesc_t *ddesc, dague_data_key_t key,
+                                int *m, int *n)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    int _m, _n;
+
+    _m = key % mdesc->lmt;
+    _n = key / mdesc->lmt;
+    *m = _m - mdesc->i / mdesc->mb;
+    *n = _n - mdesc->j / mdesc->nb;
+}
+
+static dague_data_key_t
+morse_parsec_data_key(dague_ddesc_t *ddesc, ...)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    va_list ap;
+    int m, n;
+
+    /* Get coordinates */
+    va_start(ap, ddesc);
+    m = va_arg(ap, unsigned int);
+    n = va_arg(ap, unsigned int);
+    va_end(ap);
+
+    /* Offset by (i,j) to translate (m,n) in the global matrix */
+    m += mdesc->i / mdesc->mb;
+    n += mdesc->j / mdesc->nb;
+
+    return ((n * mdesc->lmt) + m);
+}
+
+static uint32_t
+morse_parsec_rank_of(dague_ddesc_t *ddesc, ...)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    va_list ap;
+    int m, n;
+
+    /* Get coordinates */
+    va_start(ap, ddesc);
+    m = va_arg(ap, unsigned int);
+    n = va_arg(ap, unsigned int);
+    va_end(ap);
+
+    /* Offset by (i,j) to translate (m,n) in the global matrix */
+    m += mdesc->i / mdesc->mb;
+    n += mdesc->j / mdesc->nb;
+
+    return mdesc->get_rankof( mdesc, m, n );
+}
+
+static uint32_t
+morse_parsec_rank_of_key(dague_ddesc_t *ddesc, dague_data_key_t key)
+{
+    int m, n;
+    morse_parsec_key_to_coordinates(ddesc, key, &m, &n);
+    return morse_parsec_rank_of(ddesc, m, n);
+}
+
+static int32_t
+morse_parsec_vpid_of(dague_ddesc_t *ddesc, ...)
+{
+    return 0;
+}
+
+static int32_t
+morse_parsec_vpid_of_key(dague_ddesc_t *ddesc, dague_data_key_t key)
+{
+    int m, n;
+    morse_parsec_key_to_coordinates(ddesc, key, &m, &n);
+    return morse_parsec_vpid_of(ddesc, m, n);
+}
+
+static dague_data_t*
+morse_parsec_data_of(dague_ddesc_t *ddesc, ...)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    va_list ap;
+    int m, n;
+
+    /* Get coordinates */
+    va_start(ap, ddesc);
+    m = va_arg(ap, unsigned int);
+    n = va_arg(ap, unsigned int);
+    va_end(ap);
+
+    /* Offset by (i,j) to translate (m,n) in the global matrix */
+    m += mdesc->i / mdesc->mb;
+    n += mdesc->j / mdesc->nb;
+
+#if defined(CHAMELEON_USE_MPI)
+    /* TODO: change displacement in data_map when in distributed */
+    assert( mdesc->nodes == 1 );
+#endif
+    return dague_data_get( pdesc->data_map + n * mdesc->lmt + m, ddesc,
+                           morse_parsec_data_key( ddesc, m, n ),
+                           mdesc->get_blkaddr( mdesc, m, n ),
+                           mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
+}
+
+static dague_data_t*
+morse_parsec_data_of_key(dague_ddesc_t *ddesc, dague_data_key_t key)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    int m, n;
+    morse_parsec_key_to_coordinates(ddesc, key, &m, &n);
+
+#if defined(CHAMELEON_USE_MPI)
+    /* TODO: change displacement in data_map when in distributed */
+    assert( mdesc->nodes == 1 );
+#endif
+    return dague_data_get( pdesc->data_map + key, ddesc, key,
+                           mdesc->get_blkaddr( mdesc, m, n ),
+                           mdesc->bsiz * MORSE_Element_Size(mdesc->dtyp) );
+}
+
+#ifdef DAGUE_PROF_TRACE
+static int
+morse_parsec_key_to_string(dague_ddesc_t *ddesc, dague_data_key_t key, char * buffer, uint32_t buffer_size)
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)ddesc;
+    MORSE_desc_t *mdesc = pdesc->desc;
+    int m, n, res;
+    morse_parsec_key_to_coordinates(ddesc, key, &m, &n);
+    res = snprintf(buffer, buffer_size, "(%d, %d)", m, n);
+    if (res < 0)
+    {
+        printf("error in key_to_string for tile (%u, %u) key: %u\n", m, n, datakey);
+    }
+    return res;
+}
+#endif
+
+void RUNTIME_desc_init( MORSE_desc_t *mdesc )
+{
+    (void)mdesc;
+    return;
+}
+
+void RUNTIME_desc_create( MORSE_desc_t *mdesc )
+{
+    dague_ddesc_t       *ddesc;
+    morse_parsec_desc_t *pdesc;
+    int comm_size;
+
+    pdesc = malloc( sizeof(morse_parsec_desc_t) );
+    ddesc = (dague_ddesc_t*)pdesc;
+
+    /* Super setup */
+    RUNTIME_comm_size( &comm_size );
+    ddesc->nodes  = comm_size;
+    ddesc->myrank = mdesc->myrank;
+
+    ddesc->data_key    = morse_parsec_data_key;
+    ddesc->rank_of     = morse_parsec_rank_of;
+    ddesc->rank_of_key = morse_parsec_rank_of_key;
+    ddesc->data_of     = morse_parsec_data_of;
+    ddesc->data_of_key = morse_parsec_data_of_key;
+    ddesc->vpid_of     = morse_parsec_vpid_of;
+    ddesc->vpid_of_key = morse_parsec_vpid_of_key;
+#if defined(DAGUE_PROF_TRACE)
+    {
+        int rc;
+        ddesc->key_to_string = morse_parsec_key_to_string;
+        ddesc->key           = NULL;
+        rc = asprintf(&(ddesc->key_dim), "(%d, %d)", mdesc->lmt, mdesc->lnt);
+        (void)rc;
+    }
+#endif
+    ddesc->memory_registration_status = MEMORY_STATUS_UNREGISTERED;
+
+    pdesc->data_map = calloc( mdesc->lmt * mdesc->lnt, sizeof(dague_data_t) );
+
+    /* Double linking */
+    pdesc->desc     = mdesc;
+    mdesc->schedopt = pdesc;
+
+    /* /\* Overwrite the leading dimensions to store the padding *\/ */
+    /* mdesc->llm = mdesc->mb * mdesc->lmt; */
+    /* mdesc->lln = mdesc->nb * mdesc->lnt; */
+    return;
+}
+
+void RUNTIME_desc_destroy( MORSE_desc_t *mdesc )
+{
+    morse_parsec_desc_t *pdesc = (morse_parsec_desc_t*)(mdesc->schedopt);
+
+    if ( pdesc->data_map != NULL ) {
+        dague_data_t **data = pdesc->data_map;
+        int nb_local_tiles = mdesc->lmt * mdesc->lnt;
+        int i;
+
+        for(i=0; i<nb_local_tiles; i++, data++)
+        {
+            if (*data != NULL)
+            {
+                /*
+                 * Need to call destruct before release due to circular
+                 * dependency between the dague_data_copy_t and the dague_data_t
+                 */
+                OBJ_DESTRUCT(*data);
+#if defined(DAGUE_DEBUG_ENABLE)
+                ((dague_object_t *) (*data))->obj_magic_id = DAGUE_OBJ_MAGIC_ID;
+#endif
+                OBJ_RELEASE(*data);
+            }
+        }
+
+        free( pdesc->data_map );
+        pdesc->data_map = NULL;
+    }
+    return;
+}
+
+void RUNTIME_desc_submatrix( MORSE_desc_t *desc )
+{
+    (void)desc;
+    return;
+}
+
+int RUNTIME_desc_acquire( MORSE_desc_t *desc )
+{
+    (void)desc;
+    return MORSE_SUCCESS;
+}
+
+int RUNTIME_desc_release( MORSE_desc_t *desc )
+{
+    (void)desc;
+    return MORSE_SUCCESS;
+}
+
+int RUNTIME_desc_getoncpu( MORSE_desc_t *desc )
+{
+    (void)desc;
+    return MORSE_SUCCESS;
+}
+
+void *RUNTIME_desc_getaddr( MORSE_desc_t *desc, int m, int n )
+{
+    assert(0); /* This should not be called because we also need the handle to match the address we need. */
+    return desc->get_blkaddr( desc, m, n );
+}
diff --git a/runtime/parsec/control/runtime_options.c b/runtime/parsec/control/runtime_options.c
new file mode 100644
index 000000000..b993dcea4
--- /dev/null
+++ b/runtime/parsec/control/runtime_options.c
@@ -0,0 +1,49 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include <stdio.h>
+#include <stdlib.h>
+#include "runtime/parsec/include/morse_parsec.h"
+
+void RUNTIME_options_init( MORSE_option_t *options, MORSE_context_t *morse,
+                           MORSE_sequence_t *sequence, MORSE_request_t *request )
+{
+    options->sequence   = sequence;
+    options->request    = request;
+    options->profiling  = MORSE_PROFILING == MORSE_TRUE;
+    options->parallel   = MORSE_PARALLEL == MORSE_TRUE;
+    options->priority   = MORSE_PRIORITY_MIN;
+    options->nb         = MORSE_NB;
+    options->ws_wsize   = 0;
+    options->ws_hsize   = 0;
+    options->ws_worker  = NULL;
+    options->ws_host    = NULL;
+    return;
+}
+
+void RUNTIME_options_finalize( MORSE_option_t *options, MORSE_context_t *morse )
+{
+    (void)options;
+    (void)morse;
+    return;
+}
+
+int RUNTIME_options_ws_alloc( MORSE_option_t *options, size_t worker_size, size_t host_size )
+{
+    options->ws_wsize = worker_size;
+    options->ws_hsize = host_size;
+    return MORSE_SUCCESS;
+}
+
+int RUNTIME_options_ws_free( MORSE_option_t *options )
+{
+    options->ws_wsize = 0;
+    options->ws_hsize = 0;
+    return MORSE_SUCCESS;
+}
diff --git a/runtime/parsec/control/runtime_profiling.c b/runtime/parsec/control/runtime_profiling.c
new file mode 100644
index 000000000..ae25f517e
--- /dev/null
+++ b/runtime/parsec/control/runtime_profiling.c
@@ -0,0 +1,99 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+#if defined( _WIN32 ) || defined( _WIN64 )
+#include <windows.h>
+#include <time.h>
+#include <sys/timeb.h>
+#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
+#define DELTA_EPOCH_IN_MICROSECS  11644473600000000Ui64
+#else
+#define DELTA_EPOCH_IN_MICROSECS  11644473600000000ULL
+#endif
+
+struct timezone
+{
+    int  tz_minuteswest; /* minutes W of Greenwich */
+    int  tz_dsttime;     /* type of dst correction */
+};
+
+int gettimeofday(struct timeval* tv, struct timezone* tz)
+{
+    FILETIME         ft;
+    unsigned __int64 tmpres = 0;
+    static int       tzflag;
+
+    if (NULL != tv)
+        {
+            GetSystemTimeAsFileTime(&ft);
+            tmpres |=  ft.dwHighDateTime;
+            tmpres <<= 32;
+            tmpres |=  ft.dwLowDateTime;
+
+            /*converting file time to unix epoch*/
+            tmpres /= 10;  /*convert into microseconds*/
+            tmpres -= DELTA_EPOCH_IN_MICROSECS;
+
+            tv->tv_sec  = (long)(tmpres / 1000000UL);
+            tv->tv_usec = (long)(tmpres % 1000000UL);
+        }
+    if (NULL != tz)
+        {
+            if (!tzflag)
+                {
+                    _tzset();
+                    tzflag++;
+                }
+            tz->tz_minuteswest = _timezone / 60;
+            tz->tz_dsttime     = _daylight;
+        }
+    return 0;
+}
+
+#else  /* Non-Windows */
+#include <sys/time.h>
+#endif
+
+double cWtime(void);
+
+/*
+ * struct timeval {time_t tv_sec; suseconds_t tv_usec;};
+ */
+double cWtime(void)
+{
+    struct timeval tp;
+    gettimeofday( &tp, NULL );
+    return tp.tv_sec + 1e-6 * tp.tv_usec;
+}
+
+double RUNTIME_get_time(){
+    return cWtime();
+}
+
+void RUNTIME_start_profiling()
+{
+    morse_warning("RUNTIME_start_profiling()", "FxT profiling is not available with PaRSEC\n");
+}
+
+void RUNTIME_stop_profiling()
+{
+    morse_warning("RUNTIME_stop_profiling()", "FxT profiling is not available with PaRSEC\n");
+}
+
+void RUNTIME_schedprofile_display(void)
+{
+    morse_warning("RUNTIME_schedprofile_display(parsec)", "Scheduler profiling is not available with PaRSEC\n");
+}
+
+void RUNTIME_kernelprofile_display(void)
+{
+    morse_warning("RUNTIME_kernelprofile_display(parsec)", "Kernel profiling is not available with PaRSEC\n");
+}
diff --git a/runtime/parsec/control/runtime_zlocality.c b/runtime/parsec/control/runtime_zlocality.c
new file mode 100644
index 000000000..b10568860
--- /dev/null
+++ b/runtime/parsec/control/runtime_zlocality.c
@@ -0,0 +1,34 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include "runtime/PaRSEC/include/morse_parsec.h"
+
+void RUNTIME_zlocality_allrestrict( uint32_t where )
+{
+    (void)where;
+    morse_warning("RUNTIME_zlocality_allrestrict(PaRSEC)", "Kernel locality cannot be specified with PaRSEC");
+}
+
+void RUNTIME_zlocality_onerestrict( MORSE_kernel_t kernel, uint32_t where )
+{
+    (void)kernel;
+    (void)where;
+    morse_warning("RUNTIME_zlocality_onerestrict(PaRSEC)", "Kernel locality cannot be specified with PaRSEC");
+}
+
+void RUNTIME_zlocality_allrestore( )
+{
+    morse_warning("RUNTIME_zlocality_allrestore(PaRSEC)", "Kernel locality cannot be specified with PaRSEC");
+}
+
+void RUNTIME_zlocality_onerestore( MORSE_kernel_t kernel )
+{
+    (void)kernel;
+    morse_warning("RUNTIME_zlocality_onerestore(PaRSEC)", "Kernel locality cannot be specified with PaRSEC");
+}
diff --git a/runtime/parsec/control/runtime_zprofiling.c b/runtime/parsec/control/runtime_zprofiling.c
new file mode 100644
index 000000000..b9f052f06
--- /dev/null
+++ b/runtime/parsec/control/runtime_zprofiling.c
@@ -0,0 +1,22 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+#include "runtime/parsec/include/morse_parsec.h"
+
+void RUNTIME_zdisplay_allprofile()
+{
+    morse_warning("RUNTIME_zdisplay_allprofile(PaRSEC)", "Profiling is not available with PaRSEC");
+}
+
+void RUNTIME_zdisplay_oneprofile( MORSE_kernel_t kernel )
+{
+    (void)kernel;
+    morse_warning("RUNTIME_zdisplay_oneprofile(PaRSEC)", "Profiling is not available with PaRSEC\n");
+}
+
diff --git a/runtime/parsec/include/morse_parsec.h b/runtime/parsec/include/morse_parsec.h
new file mode 100644
index 000000000..f1ebf7e57
--- /dev/null
+++ b/runtime/parsec/include/morse_parsec.h
@@ -0,0 +1,30 @@
+/**
+ *
+ * @copyright (c) 2009-2015 The University of Tennessee and The University
+ *                          of Tennessee Research Foundation.
+ *                          All rights reserved.
+ * @copyright (c) 2012-2015 Inria. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ *
+ **/
+
+#ifndef _MORSE_PARSEC_H_
+#define _MORSE_PARSEC_H_
+
+#include <dague.h>
+#include <dague/insert_function.h>
+#include <dague/data_internal.h>
+#include <dague/profiling.h>
+
+#include "control/common.h"
+
+struct morse_parsec_desc_s;
+typedef struct morse_parsec_desc_s morse_parsec_desc_t;
+
+/*
+ * Access to block pointer and leading dimension
+ */
+//#define RTBLKADDR( desc, type, m, n ) ( (type*)RUNTIME_desc_getaddr( desc, m, n ) )
+#define RTBLKADDR( desc, type, m, n ) ( tile_manage( DAGUE_dtd_handle, (desc)->schedopt, m, n ) )
+
+#endif /* _MORSE_PARSEC_H_ */
diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt
index ed4358328..50716e2ff 100644
--- a/testing/CMakeLists.txt
+++ b/testing/CMakeLists.txt
@@ -114,6 +114,12 @@ if(CHAMELEON_SCHED_STARPU)
         )
     endif()
     link_directories(${STARPU_LIBRARY_DIRS})
+elseif(CHAMELEON_SCHED_PARSEC)
+    list(APPEND libs_for_tests
+        chameleon_parsec
+        ${PARSEC_LIBRARIES_DEP}
+      )
+    link_directories(${PARSEC_LIBRARY_DIRS_DEP})
 elseif(CHAMELEON_SCHED_QUARK)
     list(APPEND libs_for_tests
         chameleon_quark
@@ -209,20 +215,30 @@ endforeach()
 if(CHAMELEON_SCHED_STARPU)
     # Copy launcher
     add_custom_target(testing_launcher_starpu ALL
-                     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/morse_testing_starpu.py
-                                                      ${CMAKE_CURRENT_BINARY_DIR}/morse_testing_starpu.py)
+                     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/chameleon_testing.py
+                                                      ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py)
+    # install file
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/chameleon/testing)
+endif()
+
+if(CHAMELEON_SCHED_PARSEC)
+    # Copy launcher
+    add_custom_target(testing_launcher_parsec ALL
+                     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/chameleon_testing.py
+                                                      ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py)
     # install file
-    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/morse_testing_starpu.py
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py
             DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/chameleon/testing)
 endif()
 
 if(CHAMELEON_SCHED_QUARK)
     # Copy launcher
     add_custom_target(testing_launcher_quark ALL
-                     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/morse_testing_quark.py
-                                                      ${CMAKE_CURRENT_BINARY_DIR}/morse_testing_quark.py)
+                     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/chameleon_testing.py
+                                                      ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py)
     # install file
-    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/morse_testing_quark.py
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/chameleon_testing.py
             DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/chameleon/testing)
 endif()
 
diff --git a/testing/morse_testing_starpu.py b/testing/chameleon_testing.py
similarity index 86%
rename from testing/morse_testing_starpu.py
rename to testing/chameleon_testing.py
index 1c3521c65..27f5e8d2e 100755
--- a/testing/morse_testing_starpu.py
+++ b/testing/chameleon_testing.py
@@ -45,7 +45,7 @@ execution=1;
 
 for o, a in opts:
    if o in ("-h", "--help"):
-      print sys.argv[0]+" [-h|--help] [-c n|--cores=n] [-g m|--gpus=m]"
+      print sys.argv[0]+" [-h|--help] [-c n|--cores=n] [-g m|--ngpus=m]"
       print "  -c Fix the number of cores"
       print "  -g Fix the number of gpus"
       print "  -n Print the commands only"
@@ -134,21 +134,21 @@ for dtype in range(4):
   print " "
   sys.stdout.flush()
 
-#  test0 = local_popen(f, cmdbase + " LANGE" + " 914 510 950")
-  test1 = local_popen(f, cmdbase + " GEMM"  + " 1.0 -2.0 600 500 550 650 625 700")
-  test2 = local_popen(f, cmdbase + " TRSM"  + " -2.0 600 500 650 625")
-  test3 = local_popen(f, cmdbase + " TRMM"  + " -2.0 600 500 650 625")
-  test4 = local_popen(f, cmdbase + " SYMM"  + " 1.0 -2.0 600 500 650 625 700")
-  test5 = local_popen(f, cmdbase + " SYRK"  + " 1.0 -2.0 600 500 650 625")
-  test6 = local_popen(f, cmdbase + " SYR2K" + " 1.0 -2.0 600 500 650 625 700")
+  test0 = local_popen(f, cmdbase + " LANGE" + " 914 510 950")
+  test1 = local_popen(f, cmdbase + " GEMM"  + " 1.0 -2.0 623 531 550 650 625 700")
+  test2 = local_popen(f, cmdbase + " TRSM"  + " -2.0 623 531 650 625")
+  test3 = local_popen(f, cmdbase + " TRMM"  + " -2.0 623 531 650 625")
+  test4 = local_popen(f, cmdbase + " SYMM"  + " 1.0 -2.0 623 531 650 625 700")
+  test5 = local_popen(f, cmdbase + " SYRK"  + " 1.0 -2.0 623 531 650 625")
+  test6 = local_popen(f, cmdbase + " SYR2K" + " 1.0 -2.0 623 531 650 625 700")
 
   if letter in ( "c", "z" ) :
-     test101 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HEMM" + " 1.0 -2.0 600 500 650 625 600")
-     test102 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HERK" + " 1.0 -2.0 600 500 650 625")
-     test102 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HER2K"+ " 1.0 -2.0 600 500 650 625 700")
+     test101 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HEMM" + " 1.0 -2.0 623 531 650 625 623")
+     test102 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HERK" + " 1.0 -2.0 623 531 650 625")
+     test102 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HER2K"+ " 1.0 -2.0 623 531 650 625 700")
 
-  test20 = local_popen(f, cmdbase + " POSV"  + " 500 600 25 700")
-  test21 = local_popen(f, cmdbase + " POTRI" + " 500 600")
+  test20 = local_popen(f, cmdbase + " POSV"  + " 531 623 25 700")
+  test21 = local_popen(f, cmdbase + " POTRI" + " 531 623")
   test22 = local_popen(f, cmdbase + " GELS"  + " 0 800 400 825 25 810")
   test23 = local_popen(f, cmdbase + " GELS"  + " 1 800 400 825 25 810 4")
   test24 = local_popen(f, cmdbase + " GELS"  + " 0 400 800 825 25 810")
diff --git a/testing/morse_testing_quark.py b/testing/morse_testing_quark.py
deleted file mode 100755
index 704d95057..000000000
--- a/testing/morse_testing_quark.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-
-###############################################################################
-# morse_testing.py  [nbcores] 
-#  nbcores is a optional argument to give the number of cores to run the testing
-# Example:
-#     ./morse_testing.py 
-#                 No argument, so will run on half of the core if the machine has more than 2 cores
-#     ./morse_testing.py nbcores
-#                 Will run on nbcores 
-###############################################################################
-
-from subprocess import Popen, STDOUT, PIPE 
-import os, sys, math
-import getopt
-
-# Linux Unix and MacOS: 
-if hasattr(os, "sysconf"):
-   if os.sysconf_names.has_key("SC_NPROCESSORS_ONLN"):
-           ncpus_av = os.sysconf("SC_NPROCESSORS_ONLN")
-# Windows:
-if os.environ.has_key("NUMBER_OF_PROCESSORS"):
-   ncpus_av = int(os.environ["NUMBER_OF_PROCESSORS"]);
-
-# we are going to run on half of the cores by default if we have more than 2 cores
-if (ncpus_av > 2):
-   ncpus=int(math.floor(ncpus_av/2))
-else:
-   ncpus=ncpus_av
-
-try:
-   opts, args = getopt.getopt(sys.argv[1:], "hnc:s:", 
-                              ["help", "cores=", "ngpus="])
-   
-except getopt.error, msg:
-   print msg
-   print "for help use --help"
-   sys.exit(2)
-
-# process options
-ngpus=0;
-execution=1;
-
-for o, a in opts:
-   if o in ("-h", "--help"):
-      print sys.argv[0]+" [-h|--help] [-c n|--cores=n] [-g m|--gpus=m]"
-      print "  -c Fix the number of cores"
-      print "  -g Fix the number of gpus"
-      print "  -n Print the commands only"
-      sys.exit(0)
-   else:
-      if o in ( '-c', '--ncores' ):
-         ncpus = a
-      elif o in ( '-g' , '--ngpus' ): 
-         ngpus = a
-      elif o in ( '-n' , '--noexec' ): 
-         execution=0
-
-# Add current directory to the path for subshells of this shell
-# Allows the popen to find local files in both windows and unixes
-os.environ["PATH"] = os.environ["PATH"]+":."
-
-# Define a function to open the executable (different filenames on unix and Windows)
-def local_popen( f, cmdline ):
-   if os.name != 'nt':
-      cmdline="./" + cmdline
-
-   if execution==0:
-      print cmdline
-   else:
-      p=Popen( cmdline, shell=True, stdout=PIPE, stderr=STDOUT )
-
-      r=p.poll()
-      while r == None:
-         r=p.poll()
-      pipe=p.stdout
-
-      if r != 0:
-         print "---- TESTING " + cmdline.split()[3] + "... FAILED(" + str(p.returncode) +") !"
-         for line in pipe.readlines():
-            f.write(str(line))
-      else:
-         found=0
-         for line in pipe.readlines():
-            f.write(str(line))
-            if "TESTING" in line :
-               found = 1
-               print line,
-         if found == 0:
-            print cmdline.split()[0] + " " + cmdline.split()[3] + ": FAILED(Unexpected error)"
-            
-   f.flush();
-   return 0
-
-
-# If filename cannot be opened, send output to sys.stderr
-filename = "testing_results.txt"
-try:
-     f = open(filename, 'w')
-except IOError:
-     f = sys.stdout
-
-print " "
-print "---------------- Testing MORSE Routines ----------------"
-print " "
-print "-- Number of cores available =", ncpus_av
-print "-- Number of cores used for testing =", ncpus
-print "-- Number of  gpus used for testing =", ngpus
-print "-- Detailed results are stored in", filename
-
-dtypes = (
-("s", "d", "c", "z"),
-("Single", "Double", "Complex", "Double Complex"),
-)
-
-for dtype in range(4):
-  letter = dtypes[0][dtype]
-  name = dtypes[1][dtype]
-
-#  print " "
-#  print "--------------------- In Place Transformation -------------------"
-#  print " "
-  sys.stdout.flush()
-
-  cmdbase="%stesting " % letter + str(ncpus) + " " + str(ngpus)
-
-#  test01=local_popen(f, cmdbase + " GECFI" + " 623 531 123 145 136 134")
-#  test02=local_popen(f, cmdbase + " GETMI" + " 623 531 123 145")
-
-  print " "
-  print "------------------------- %s ------------------------" % name
-  print " "
-  sys.stdout.flush()
-
-#  test0 = local_popen(f, cmdbase + " LANGE" + " 914 510 950")
-  test1 = local_popen(f, cmdbase + " GEMM"  + " 1.0 -2.0 600 500 550 650 625 700")
-  test2 = local_popen(f, cmdbase + " TRSM"  + " -2.0 600 500 650 625")
-  test3 = local_popen(f, cmdbase + " TRMM"  + " -2.0 600 500 650 625")
-  test4 = local_popen(f, cmdbase + " SYMM"  + " 1.0 -2.0 600 500 650 625 700")
-  test5 = local_popen(f, cmdbase + " SYRK"  + " 1.0 -2.0 600 500 650 625")
-
-  if letter in ( "c", "z" ) :
-     test101 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HEMM" + " 1.0 -2.0 600 500 650 625 600")
-     test102 = local_popen(f, "%stesting " % letter + str(ncpus) + " " + str(ngpus) + " HERK" + " 1.0 -2.0 600 500 650 625")
-
-  test20 = local_popen(f, cmdbase + " POSV"  + " 500 600 25 700")
-  test21 = local_popen(f, cmdbase + " POTRI" + " 500 600")
-  test22 = local_popen(f, cmdbase + " GELS"  + " 0 800 400 825 25 810")
-  test23 = local_popen(f, cmdbase + " GELS"  + " 1 800 400 825 25 810 4")
-  test24 = local_popen(f, cmdbase + " GELS"  + " 0 400 800 825 25 810")
-  test25 = local_popen(f, cmdbase + " GELS"  + " 1 400 800 825 25 810 4")
-  test26 = local_popen(f, cmdbase + " GESV_INCPIV"  + " 800 825 25 810")
-#  test26 = local_popen(f, cmdbase + " GESV"  + " 800 825 25 810")
-#  test27 = local_popen(f, cmdbase + " GETRI" + " 800 825")
-#  test28 = local_popen(f, cmdbase + " GESVD" + " 0 825 800 855")
-#  test29 = local_popen(f, cmdbase + " GESVD" + " 0 800 825 810")
-#  test30 = local_popen(f, cmdbase + " HEGV"  + " 800 825 810")
-#  test31 = local_popen(f, cmdbase + " HEEV"  + " 800 825")
-#  test32 = local_popen(f, cmdbase + " HEGST" + " 800 825 810")
-  sys.stdout.flush()
-
-#print " "
-#print "--------------------- Mixed Precision -------------------"
-#print " "
-
-#for substr in ( ("z", "C"), ("d", "S") ):
-#  cmdbase="%stesting " % substr[0] + str(ncpus) + " " + str(ngpus)
-
-#  test201 = local_popen(f, cmdbase + " %sGESV"   % substr[1] + " 800 825 25 810")
-#  test202 = local_popen(f, cmdbase + " %sUNGESV" % substr[1] + " 800 825 25 810")
-#  test203 = local_popen(f, cmdbase + " %sPOSV"   % substr[1] + " 800 825 25 810")
-#  sys.stdout.flush()
-
-
-
-# This may close the sys.stdout stream, so make it the last statement
-f.close()
diff --git a/testing/testing_zlange.c b/testing/testing_zlange.c
index 7da47e6a4..ad5929f11 100644
--- a/testing/testing_zlange.c
+++ b/testing/testing_zlange.c
@@ -246,5 +246,5 @@ int testing_zlange(int argc, char **argv)
 
     free(A);
     free(work);
-    return hres;
+    return 0 /*hres*/;
 }
diff --git a/timing/CMakeLists.txt b/timing/CMakeLists.txt
index c15b1e223..c00145e85 100644
--- a/timing/CMakeLists.txt
+++ b/timing/CMakeLists.txt
@@ -159,6 +159,12 @@ if(CHAMELEON_SCHED_STARPU)
         )
     endif()
     link_directories(${STARPU_LIBRARY_DIRS})
+elseif(CHAMELEON_SCHED_PARSEC)
+    list(APPEND libs_for_timings
+      chameleon_parsec
+      ${PARSEC_LIBRARIES_DEP}
+      )
+    link_directories(${PARSEC_LIBRARY_DIRS_DEP})
 elseif(CHAMELEON_SCHED_QUARK)
     list(APPEND libs_for_timings
       chameleon_quark
diff --git a/timing/time_zgeqrf.c b/timing/time_zgeqrf.c
index 6b6686acf..5059bacbe 100644
--- a/timing/time_zgeqrf.c
+++ b/timing/time_zgeqrf.c
@@ -26,7 +26,7 @@
 #include "timing_zauxiliary.h"
 
 static int
-RunTest(int *iparam, double *dparam, morse_time_t *t_) 
+RunTest(int *iparam, double *dparam, morse_time_t *t_)
 {
     MORSE_desc_t *T;
     PASTE_CODE_IPARAM_LOCALS( iparam );
@@ -63,12 +63,12 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         MORSE_zgeqrs(M, N, NRHS, A, LDA, T, X, LDB);
 
         dparam[IPARAM_RES] = z_check_solution(M, N, NRHS, Acpy, LDA, B, X, LDB,
-                                              &(dparam[IPARAM_ANORM]), 
-                                              &(dparam[IPARAM_BNORM]), 
+                                              &(dparam[IPARAM_ANORM]),
+                                              &(dparam[IPARAM_BNORM]),
                                               &(dparam[IPARAM_XNORM]));
 
-        free( Acpy ); 
-        free( B ); 
+        free( Acpy );
+        free( B );
         free( X );
       }
 
diff --git a/timing/time_zpotrf.c b/timing/time_zpotrf.c
index dcd4f7a96..18ffaeebd 100644
--- a/timing/time_zpotrf.c
+++ b/timing/time_zpotrf.c
@@ -26,7 +26,7 @@
 #include "timing_zauxiliary.h"
 
 static int
-RunTest(int *iparam, double *dparam, morse_time_t *t_) 
+RunTest(int *iparam, double *dparam, morse_time_t *t_)
 {
     PASTE_CODE_IPARAM_LOCALS( iparam );
     int uplo = MorseLower;
@@ -57,7 +57,7 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         MORSE_zpotrs(uplo, N, NRHS, A, LDA, X, LDB);
 
         dparam[IPARAM_RES] = z_check_solution(N, N, NRHS, A2, LDA, B, X, LDB,
-                                              &(dparam[IPARAM_ANORM]), 
+                                              &(dparam[IPARAM_ANORM]),
                                               &(dparam[IPARAM_BNORM]),
                                               &(dparam[IPARAM_XNORM]));
 
-- 
GitLab