From 8755a1601014cc055e4407598fcd698f0a890310 Mon Sep 17 00:00:00 2001
From: Philippe Virouleau <philippe.44@gmail.com>
Date: Thu, 11 Oct 2018 13:54:22 +0200
Subject: [PATCH] Cleanup

---
 CMakeLists.txt                           | 108 +----------------------
 compute/zpotrf.c                         |   1 -
 include/chameleon.h                      |  10 +++
 runtime/openmp/CMakeLists.txt            |  32 +------
 runtime/openmp/control/runtime_options.c |  12 ++-
 timing/time_zgeqrf_tile.c                |   6 --
 timing/timing.c                          |  67 ++++++++------
 7 files changed, 59 insertions(+), 177 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5f73d2271..cf5f355a5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -906,120 +906,14 @@ if( CHAMELEON_SCHED_OPENMP )
 
     find_package(OpenMP COMPONENTS ${OPENMP_COMPONENT_LIST})
 
-    # Add definition and include_dir if found
-    # TODO
     if ( OPENMP_FOUND )
         message("-- ${Blue}Add definition CHAMELEON_SCHED_OPENMP"
         " - Activate OpenMP in Chameleon${ColourReset}")
-        #if (STARPU_INCLUDE_DIRS_DEP)
-            #include_directories(${STARPU_INCLUDE_DIRS_DEP})
-            #set(CMAKE_REQUIRED_INCLUDES "${STARPU_INCLUDE_DIRS_DEP}")
-        #endif()
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
         set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}")
-        #if(STARPU_LDFLAGS_OTHER_DEP)
-            #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${STARPU_LDFLAGS_OTHER_DEP}")
-            #set(CMAKE_REQUIRED_LDFLAGS "${STARPU_LDFLAGS_OTHER_DEP}")
-        #endif()
-        #if(STARPU_LIBRARY_DIRS_DEP)
-            #list(APPEND CMAKE_INSTALL_RPATH "${STARPU_LIBRARY_DIRS_DEP}")
-        #endif()
-        #if (STARPU_LIBRARIES_DEP)
-            #list(INSERT CHAMELEON_DEP 0 ${STARPU_LIBRARIES_DEP})
-            #set(CMAKE_REQUIRED_LIBRARIES "${STARPU_LIBRARIES_DEP}")
-        #endif()
-        #if (CHAMELEON_SIMULATION)
-            #list(APPEND CMAKE_REQUIRED_FLAGS "-include" "starpu_simgrid_wrap.h")
-        #endif()
-        #string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
-        #check_function_exists(starpu_data_idle_prefetch_on_node HAVE_STARPU_IDLE_PREFETCH)
-        #if ( HAVE_STARPU_IDLE_PREFETCH )
-            #message("-- ${Blue}Add definition HAVE_STARPU_IDLE_PREFETCH${ColourReset}")
-        #endif()
-        #check_function_exists(starpu_iteration_push HAVE_STARPU_ITERATION_PUSH)
-        #if ( HAVE_STARPU_ITERATION_PUSH )
-            #message("-- ${Blue}Add definition HAVE_STARPU_ITERATION_PUSH${ColourReset}")
-        #endif()
-        #check_function_exists(starpu_data_wont_use HAVE_STARPU_DATA_WONT_USE)
-        #if ( HAVE_STARPU_DATA_WONT_USE )
-            #message("-- ${Blue}Add definition HAVE_STARPU_DATA_WONT_USE${ColourReset}")
-        #endif()
-        #check_function_exists(starpu_data_set_coordinates HAVE_STARPU_DATA_SET_COORDINATES)
-        #if ( HAVE_STARPU_DATA_SET_COORDINATES )
-            #message("-- ${Blue}Add definition HAVE_STARPU_DATA_SET_COORDINATES${ColourReset}")
-        #endif()
-        #check_function_exists(starpu_malloc_on_node_set_default_flags HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS)
-        #if ( HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS )
-            #message("-- ${Blue}Add definition HAVE_STARPU_MALLOC_ON_NODE_SET_DEFAULT_FLAGS${ColourReset}")
-        #endif()
-        #check_function_exists(starpu_mpi_data_migrate HAVE_STARPU_MPI_DATA_MIGRATE)
-        #if ( HAVE_STARPU_MPI_DATA_MIGRATE )
-            #message("-- ${Blue}Add definition HAVE_STARPU_MPI_DATA_MIGRATE${ColourReset}")
-        #elseif(CHAMELEON_USE_MIGRATE)
-            #set(CHAMELEON_USE_MIGRATE "OFF")
-            #message("-- ${Blue}CHAMELEON_USE_MIGRATE is turned OFF because starpu_mpi_data_migrate not found${ColourReset}")
-        #endif()
+        # TODO: check for compiler support for "_Pragma"
     else ( OPENMP_FOUND )
       message(FATAL_ERROR "Something went wrong when finding OpenMP")
-        #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(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
-                #if (NOT FXT_fxt.h_DIRS)
-                    #Print_Find_Header_Status(fxt fxt.h)
-                #endif ()
-                #if (NOT FXT_fxt_LIBRARY)
-                    #Print_Find_Library_Status(fxt libfxt)
-                #endif ()
-            #endif()
-            #if(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES))
-                #if (NOT SIMGRID_simgrid.h_DIRS)
-                    #Print_Find_Header_Status(simgrid simgrid.h)
-                #endif ()
-                #if (NOT SIMGRID_simgrid_LIBRARY)
-                    #Print_Find_Library_Status(simgrid libsimgrid)
-                #endif ()
-            #endif()
-            #if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR
-                #( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) )
-              #)
-                #foreach(starpu_hdr ${STARPU_hdrs_to_find})
-                    #if (NOT STARPU_${starpu_hdr}_INCLUDE_DIRS)
-                        #Print_Find_Header_Status(starpu ${starpu_hdr})
-                    #endif ()
-                #endforeach()
-                #if(STARPU_VERSION_STRING)
-                    #foreach(starpu_lib ${STARPU_libs_to_find})
-                        #if (NOT STARPU_${starpu_lib}_LIBRARY)
-                            #Print_Find_Library_Status(starpu ${starpu_lib})
-                        #endif ()
-                    #endforeach()
-                #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")
-        #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(CHAMELEON_SIMULATION AND (NOT SIMGRID_FOUND OR NOT SIMGRID_LIBRARIES))
-            #message(FATAL_ERROR "SimGrid library is required but has not been found")
-        #endif()
-        #if(CHAMELEON_ENABLE_TRACING AND (NOT FXT_FOUND OR NOT FXT_LIBRARIES))
-            #message(FATAL_ERROR "FxT library is required but has not been found")
-        #endif()
-        #if( (NOT STARPU_SHM_FOUND) OR (NOT STARPU_SHM_LIBRARIES) OR
-            #( STARPU_LOOK_FOR_MPI AND (NOT STARPU_MPI_FOUND OR NOT STARPU_MPI_LIBRARIES) )
-          #)
-            #message(FATAL_ERROR "StarPU library is required but has not been found")
-        #endif()
     endif ( OPENMP_FOUND )
 
 endif( CHAMELEON_SCHED_OPENMP )
diff --git a/compute/zpotrf.c b/compute/zpotrf.c
index f9ff8878f..bb8485337 100644
--- a/compute/zpotrf.c
+++ b/compute/zpotrf.c
@@ -23,7 +23,6 @@
  *
  */
 #include "control/common.h"
-#include <stdio.h>
 
 /**
  ********************************************************************************
diff --git a/include/chameleon.h b/include/chameleon.h
index da34cab2a..a8afc08c8 100644
--- a/include/chameleon.h
+++ b/include/chameleon.h
@@ -135,6 +135,16 @@ int CHAMELEON_Sequence_Create  (RUNTIME_sequence_t **sequence);
 int CHAMELEON_Sequence_Destroy (RUNTIME_sequence_t *sequence);
 int CHAMELEON_Sequence_Wait    (RUNTIME_sequence_t *sequence);
 
+#if defined(CHAMELEON_SCHED_OPENMP)
+#define CHAMELEON_INIT(nworkers, ncudas)\
+  CHAMELEON_Init(nworkers, ncudas);\
+  _Pragma("omp parallel")\
+  _Pragma("omp master")
+#else
+#define CHAMELEON_INIT(nworkers, ncudas)\
+  CHAMELEON_Init(nworkers, ncudas);
+#endif
+
 END_C_DECLS
 
 #endif /* _chameleon_h_ */
diff --git a/runtime/openmp/CMakeLists.txt b/runtime/openmp/CMakeLists.txt
index d072f05be..6c0ea5ab5 100644
--- a/runtime/openmp/CMakeLists.txt
+++ b/runtime/openmp/CMakeLists.txt
@@ -4,7 +4,7 @@
 #
 # @copyright 2009-2015 The University of Tennessee and The University of
 #                      Tennessee Research Foundation. All rights reserved.
-# @copyright 2012-2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+# @copyright 2012-2018 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
 #                      Univ. Bordeaux. All rights reserved.
 #
 ###
@@ -30,17 +30,6 @@ cmake_minimum_required(VERSION 2.8)
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include )
 include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include )
 
-# Generate headers for all possible precisions
-# --------------------------------------------
-#set(RUNTIME_HDRS_GENERATED "")
-#set(ZHDR
-  #include/runtime_codelet_z.h
-  #)
-
-#precisions_rules_py(RUNTIME_HDRS_GENERATED "${ZHDR}"
-  #PRECISIONS "s;d;c;z;ds;zc"
-  #TARGETDIR  "include")
-
 # Define the list of headers
 # --------------------------
 set(RUNTIME_HDRS
@@ -71,17 +60,6 @@ install(
 
 # Generate the Chameleon common for all possible precisions
 # ---------------------------------------------------------
-# FIXME: restore this generation once file is done
-#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_async.c
@@ -90,21 +68,13 @@ set(RUNTIME_COMMON
   control/runtime_descriptor.c
   control/runtime_options.c
   control/runtime_profiling.c
-  #control/runtime_workspace.c
   ${RUNTIME_COMMON_GENERATED}
   )
 
-#set(flags_to_add "")
-#foreach(_prec ${CHAMELEON_PRECISION})
-  #set(flags_to_add "${flags_to_add} -DPRECISION_${_prec}")
-#endforeach()
-#set_source_files_properties(control/runtime_profiling.c PROPERTIES COMPILE_FLAGS "${flags_to_add}")
-
 # Generate the Chameleon sources for all possible precisions
 # ----------------------------------------------------------
 set(RUNTIME_SRCS_GENERATED "")
 set(ZSRC
-  #codelets/codelet_zcallback.c
   ${CODELETS_ZSRC}
   )
 
diff --git a/runtime/openmp/control/runtime_options.c b/runtime/openmp/control/runtime_options.c
index 83b848012..4511f102b 100644
--- a/runtime/openmp/control/runtime_options.c
+++ b/runtime/openmp/control/runtime_options.c
@@ -50,8 +50,11 @@ int RUNTIME_options_ws_alloc( RUNTIME_option_t *options, size_t worker_size, siz
         options->ws_worker = malloc(worker_size* sizeof(char));
         options->ws_wsize = worker_size;
     }
-    // TODO maybe we'll need it at some point
-    options->ws_hsize = host_size;
+    if (host_size > 0) {
+        // TODO used for scratch, maybe we can do better than malloc
+        options->ws_host = malloc(host_size * sizeof(char));
+        options->ws_hsize = host_size;
+    }
     return CHAMELEON_SUCCESS;
 }
 
@@ -61,6 +64,9 @@ int RUNTIME_options_ws_free( RUNTIME_option_t *options )
         free(options->ws_worker);
         options->ws_wsize = 0;
     }
-    options->ws_hsize = 0;
+    if (options->ws_hsize) {
+        free(options->ws_host);
+        options->ws_hsize = 0;
+    }
     return CHAMELEON_SUCCESS;
 }
diff --git a/timing/time_zgeqrf_tile.c b/timing/time_zgeqrf_tile.c
index e04bfb8a6..b35782a69 100644
--- a/timing/time_zgeqrf_tile.c
+++ b/timing/time_zgeqrf_tile.c
@@ -48,14 +48,8 @@ RunTest(int *iparam, double *dparam, chameleon_time_t *t_)
     memset(descT->mat, 0, (descT->llm*descT->lln)*sizeof(ChamComplexDouble));
 
     /* CHAMELEON ZGEQRF */
-#if defined (CHAMELEON_SCHED_OPENMP)
-#pragma omp parallel
-#pragma omp master
-#endif
-    {
     START_TIMING();
     CHAMELEON_zgeqrf_Tile( descA, descT );
-    }
     STOP_TIMING();
 
     /* Check the solution */
diff --git a/timing/timing.c b/timing/timing.c
index ff268c719..54476685c 100644
--- a/timing/timing.c
+++ b/timing/timing.c
@@ -619,46 +619,25 @@ parse_arguments(int *_argc, char ***_argv, int *iparam, int *start, int *stop, i
     } while(-1 != c);
 }
 
+// NOTE: this function is here to cope with the fact that OpenMP parallel
+// regions must not have instructions jumping outside the region (eg: returns)
+
 int
-main(int argc, char *argv[]) {
-    int i, m, n, mx, nx;
+CHAMELEON_Main(int *iparam, char *prog_name, int start, int stop, int step) {
+
     int status;
+    int i, m, n, mx, nx;
     int nbnode = 1;
-    int start =  500;
-    int stop  = 5000;
-    int step  =  500;
-    int iparam[IPARAM_SIZEOF];
     int success = 0;
 
-    set_iparam_default(iparam);
-
-    parse_arguments(&argc, &argv, iparam, &start, &stop, &step);
-
-#if !defined(CHAMELEON_USE_CUDA)
-    if (iparam[IPARAM_NCUDAS] != 0){
-    	fprintf(stderr, "ERROR: CHAMELEON_USE_CUDA is not defined. "
-    			"The number of CUDA devices must be set to 0 (--gpus=0).\n");
-    	return EXIT_FAILURE;
-    }
-#endif
-
     n  = iparam[IPARAM_N];
     m  = iparam[IPARAM_M];
     mx = iparam[IPARAM_MX];
     nx = iparam[IPARAM_NX];
 
-    /* Initialize CHAMELEON */
-    CHAMELEON_Init( iparam[IPARAM_THRDNBR],
-                iparam[IPARAM_NCUDAS] );
 
-#if defined (CHAMELEON_SCHED_OPENMP)
-#pragma omp parallel
-#pragma omp master
-#endif
-    {
     /* Get the number of threads set by the runtime */
     iparam[IPARAM_THRDNBR] = CHAMELEON_GetThreadNbr();
-    }
 
     /* Stops profiling here to avoid profiling uninteresting routines.
        It will be reactivated in the time_*.c routines with the macro START_TIMING() */
@@ -709,7 +688,7 @@ main(int argc, char *argv[]) {
     CHAMELEON_Set(CHAMELEON_TRANSLATION_MODE, iparam[IPARAM_INPLACE]);
 
     if ( CHAMELEON_My_Mpi_Rank() == 0 ) {
-        print_header( argv[0], iparam);
+        print_header( prog_name, iparam);
     }
 
     if (step < 1) step = 1;
@@ -749,7 +728,37 @@ main(int argc, char *argv[]) {
         if (status != CHAMELEON_SUCCESS) return status;
         success += status;
     }
+}
+
+int
+main(int argc, char *argv[]) {
+    int start =  500;
+    int stop  = 5000;
+    int step  =  500;
+    int iparam[IPARAM_SIZEOF];
+
+    set_iparam_default(iparam);
+
+    parse_arguments(&argc, &argv, iparam, &start, &stop, &step);
+
+#if !defined(CHAMELEON_USE_CUDA)
+    if (iparam[IPARAM_NCUDAS] != 0){
+        fprintf(stderr, "ERROR: CHAMELEON_USE_CUDA is not defined. "
+                "The number of CUDA devices must be set to 0 (--gpus=0).\n");
+        return EXIT_FAILURE;
+    }
+#endif
+    int return_code;
+
+    /* Initialize CHAMELEON */
+    CHAMELEON_INIT( iparam[IPARAM_THRDNBR],
+                iparam[IPARAM_NCUDAS] );
+
+    {
+        return_code = CHAMELEON_Main(iparam, argv[0], start, stop, step);
+    }
+
     CHAMELEON_Finalize();
-    return success;
+    return return_code;
 }
 
-- 
GitLab