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