From 83d4e84c2270698fd515c434d54a8f7a5ac612c2 Mon Sep 17 00:00:00 2001 From: Florent Pruvost <florent.pruvost@inria.fr> Date: Mon, 11 Oct 2021 12:33:58 +0200 Subject: [PATCH] Fix issue #102 --- CMakeLists.txt | 18 ++++++++++++++++++ cmake_modules/PrintOpts.cmake | 3 +++ control/tile.c | 26 ++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ddad6ab29..5b7a6af28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,6 +108,24 @@ option(BUILD_SHARED_LIBS "Build shared libraries" OFF) set( RP_CHAMELEON_DICTIONNARY ${CMAKE_SOURCE_DIR}/cmake_modules/local_subs.py ) set( RP_CHAMELEON_PRECISIONS "s;d;c;z" ) include(RulesPrecisions) +# Check that at least one option CHAMELEON_PREC_ is set to ON +# count number of CHAMELEON_PREC_ sets to ON +math(EXPR number_of_active_prec 0) +set(CHAMELEON_PRECISIONS "") +foreach (prec ${RP_CHAMELEON_PRECISIONS}) + string(TOUPPER ${prec} PREC) + if (CHAMELEON_PREC_${PREC}) + math(EXPR number_of_active_prec "${number_of_active_prec}+1") + list(APPEND CHAMELEON_PRECISIONS ${PREC}) + endif() +endforeach() +message("-- ${BoldGreen}Floating point precisions enabled (${number_of_active_prec}): ${CHAMELEON_PRECISIONS}.") +if (number_of_active_prec STREQUAL 0) + message(FATAL_ERROR + "Number of active precision is ${number_of_active_prec}, " + "the user should activate at least one precision in the list: " + "CHAMELEON_PREC_S;CHAMELEON_PREC_D;CHAMELEON_PREC_C;CHAMELEON_PREC_Z.") +endif() # Options to select the runtime # ----------------------------- diff --git a/cmake_modules/PrintOpts.cmake b/cmake_modules/PrintOpts.cmake index c439626b1..a8b10c3bb 100644 --- a/cmake_modules/PrintOpts.cmake +++ b/cmake_modules/PrintOpts.cmake @@ -69,6 +69,9 @@ set(dep_message "${dep_message}" " LDFlags .............: ${CMAKE_C_LINK_FLAGS}\n" " EXE LDFlags .........: ${CMAKE_EXE_LINKER_FLAGS}\n" "\n" +" Floating points precisions enabled\n" +" CHAMELEON_PRECISIONS : ${CHAMELEON_PRECISIONS}\n" +"\n" " Implementation paradigm\n" " CUDA ................: ${CHAMELEON_USE_CUDA}\n" " MPI .................: ${CHAMELEON_USE_MPI}\n" diff --git a/control/tile.c b/control/tile.c index 6437d6cb9..2cb446643 100644 --- a/control/tile.c +++ b/control/tile.c @@ -117,20 +117,29 @@ CHAMELEON_Tile_to_Lapack( CHAM_desc_t *A, void *Af77, int LDA ) int CHAMELEON_Lap2Desc( cham_uplo_t uplo, void *Af77, int LDA, CHAM_desc_t *A ) { switch( A->dtyp ) { +#if defined(PRECISION_z) case ChamComplexDouble: return CHAMELEON_zLap2Desc( uplo, (CHAMELEON_Complex64_t *)Af77, LDA, A ); break; +#endif +#if defined(PRECISION_c) case ChamComplexFloat: return CHAMELEON_cLap2Desc( uplo, (CHAMELEON_Complex32_t *)Af77, LDA, A ); break; +#endif +#if defined(PRECISION_s) case ChamRealFloat: return CHAMELEON_sLap2Desc( uplo, (float *)Af77, LDA, A ); break; +#endif +#if defined(PRECISION_d) case ChamRealDouble: - default: return CHAMELEON_dLap2Desc( uplo, (double *)Af77, LDA, A ); + break; +#endif + default: + return CHAMELEON_ERR_ILLEGAL_VALUE; } - return CHAMELEON_ERR_ILLEGAL_VALUE; } /** @@ -164,18 +173,27 @@ int CHAMELEON_Lap2Desc( cham_uplo_t uplo, void *Af77, int LDA, CHAM_desc_t *A ) int CHAMELEON_Desc2Lap( cham_uplo_t uplo, CHAM_desc_t *A, void *Af77, int LDA ) { switch( A->dtyp ) { +#if defined(PRECISION_z) case ChamComplexDouble: return CHAMELEON_zDesc2Lap( uplo, A, (CHAMELEON_Complex64_t *)Af77, LDA ); break; +#endif +#if defined(PRECISION_c) case ChamComplexFloat: return CHAMELEON_cDesc2Lap( uplo, A, (CHAMELEON_Complex32_t *)Af77, LDA ); break; +#endif +#if defined(PRECISION_s) case ChamRealFloat: return CHAMELEON_sDesc2Lap( uplo, A, (float *)Af77, LDA ); break; +#endif +#if defined(PRECISION_d) case ChamRealDouble: - default: return CHAMELEON_dDesc2Lap( uplo, A, (double *)Af77, LDA ); + break; +#endif + default: + return CHAMELEON_ERR_ILLEGAL_VALUE; } - return CHAMELEON_ERR_ILLEGAL_VALUE; } -- GitLab