diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ad68e4242a8014cccea65e34e9168dd0dae6fd8..15ea0144e1860d88c8d9b87ba0464dfb46a92df0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # # @copyright 2009-2014 The University of Tennessee and The University of # Tennessee Research Foundation. All rights reserved. -# @copyright 2012-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, +# @copyright 2012-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, # Univ. Bordeaux. All rights reserved. # ### @@ -501,13 +501,6 @@ else (NOT CHAMELEON_SIMULATION) set(CHAMELEON_ENABLE_EXAMPLE OFF) message("-- ${BoldBlue}CHAMELEON_ENABLE_EXAMPLE is set to ON but we turn it OFF.") endif () - if (CHAMELEON_ENABLE_TESTING) - set(CHAMELEON_ENABLE_TESTING OFF) - message("-- ${BoldBlue}CHAMELEON_ENABLE_TESTING is set to ON but we turn it OFF." - "\n Because we are compiling the simulation mode (CHAMELEON_SIMULATION=ON)," - "\n there is no sense in compiling testing drivers that are used to check" - "\n numerical correctness of algorithms and kernels.${ColourReset}") - endif () # Simulation mode: we depend on SimGrid find_package(SIMGRID REQUIRED) @@ -995,10 +988,13 @@ if(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION) endif(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION) # Testing executables -if(CHAMELEON_ENABLE_TESTING AND NOT CHAMELEON_SIMULATION) - add_subdirectory(testing) +if(CHAMELEON_ENABLE_TESTING) add_subdirectory(new-testing) -endif(CHAMELEON_ENABLE_TESTING AND NOT CHAMELEON_SIMULATION) +endif(CHAMELEON_ENABLE_TESTING) + +if(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION) + add_subdirectory(testing) +endif(CHAMELEON_ENABLE_EXAMPLE AND NOT CHAMELEON_SIMULATION) # Timing executables if(CHAMELEON_ENABLE_TIMING) diff --git a/cmake_modules/local_subs.py b/cmake_modules/local_subs.py index 56ab5e9854df20288f5406da4e4b8fa3fd0bbf82..27be0cb14e5f6f323c43da7db0c28a862b50c46a 100644 --- a/cmake_modules/local_subs.py +++ b/cmake_modules/local_subs.py @@ -78,6 +78,7 @@ subs = { ('testing_p', 'testing_s', 'testing_d', 'testing_c', 'testing_z' ), ('timing_p', 'timing_s', 'timing_d', 'timing_c', 'timing_z' ), ('workspace_p', 'workspace_s', 'workspace_d', 'workspace_c', 'workspace_z' ), + ('check_p', 'check_s', 'check_d', 'check_c', 'check_z' ), # ('CORE_P', 'CORE_S', 'CORE_D', 'CORE_C', 'CORE_Z' ), # ('vec_p', 'vec_s', 'vec_d', 'vec_c', 'vec_z' ), diff --git a/new-testing/CMakeLists.txt b/new-testing/CMakeLists.txt index b228fe0f1c58416dbad41302c30b938fff7abea3..cafc9d720f2c6d2d8412d004c9565cf9720cf23b 100644 --- a/new-testing/CMakeLists.txt +++ b/new-testing/CMakeLists.txt @@ -4,7 +4,7 @@ # # @copyright 2009-2014 The University of Tennessee and The University of # Tennessee Research Foundation. All rights reserved. -# @copyright 2012-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, +# @copyright 2012-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, # Univ. Bordeaux. All rights reserved. # ### @@ -25,9 +25,6 @@ # @date 2014-11-16 # ### -if (CHAMELEON_SIMULATION) - message(ERROR "new-testing directory should not be included when simulation is enabled") -endif() # Generate chameleon auxiliary testing sources for all possible precisions # -------------------------------------------------------------------- @@ -128,10 +125,14 @@ foreach(_precision ${CHAMELEON_PRECISION} ) ) add_dependencies(${_precision}new-testing chameleon_include - coreblas_include control_include new-testing_include ) +if(NOT CHAMELEON_SIMULATION) + add_dependencies(${_precision}new-testing + coreblas_include + ) +endif(NOT CHAMELEON_SIMULATION) set_property(TARGET ${_precision}new-testing PROPERTY LINKER_LANGUAGE Fortran) target_link_libraries(${_precision}new-testing ${libs_for_tests}) diff --git a/new-testing/testing_zcheck.c b/new-testing/testing_zcheck.c index d2f33920eee681d4a84140c4e62a522e7ca9abc3..66d2289aa5721e7d5147508f3140927834a6134e 100644 --- a/new-testing/testing_zcheck.c +++ b/new-testing/testing_zcheck.c @@ -2,7 +2,7 @@ * * @file testing_zcheck.c * - * @copyright 2019-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, + * @copyright 2019-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, * Univ. Bordeaux. All rights reserved. * *** @@ -20,6 +20,10 @@ #include <string.h> #include <math.h> #include <chameleon.h> + + +#if !defined(CHAMELEON_SIMULATION) + #include <coreblas/cblas.h> #include <coreblas/lapacke.h> #include <coreblas.h> @@ -1878,3 +1882,4 @@ int check_zgels( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, C return info_solution; } +#endif /* defined(CHAMELEON_SIMULATION) */ diff --git a/new-testing/testing_zcheck.h b/new-testing/testing_zcheck.h index 0afd9af28235c839b8d96fbfa8222a23aefa45e8..e03346267c6570edf8d1b2c7a685111942edbd34 100644 --- a/new-testing/testing_zcheck.h +++ b/new-testing/testing_zcheck.h @@ -30,6 +30,40 @@ #define CHECK_TRMM 3 #define CHECK_TRSM 4 +#if defined(CHAMELEON_SIMULATION) + +static inline int check_zmatrices ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA, CHAM_desc_t *descB ) { return 0; } +static inline int check_znorm ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_normtype_t norm_type, cham_uplo_t uplo, + cham_diag_t diag, double norm_cham, CHAM_desc_t *descA ) { return 0; } +static inline int check_zsum ( run_arg_list_t *args, cham_uplo_t uplo, cham_trans_t trans, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, + CHAMELEON_Complex64_t beta, CHAM_desc_t *descBref, CHAM_desc_t *descBcham ) { return 0; } +static inline int check_zscale ( run_arg_list_t *args, cham_uplo_t uplo, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; } +static inline int check_zgemm ( run_arg_list_t *args, cham_trans_t transA, cham_trans_t transB, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, + CHAM_desc_t *descB, CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; } +static inline int check_zsymm ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_side_t side, cham_uplo_t uplo, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, CHAM_desc_t *descB, + CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; } +static inline int check_zsyrk ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, cham_trans_t trans, CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, + CHAM_desc_t *descB, CHAMELEON_Complex64_t beta, CHAM_desc_t *descCref, CHAM_desc_t *descC ) { return 0; } +static inline int check_ztrmm ( run_arg_list_t *args, int check_func, cham_side_t side, cham_uplo_t uplo, cham_trans_t trans, cham_diag_t diag, + CHAMELEON_Complex64_t alpha, CHAM_desc_t *descA, CHAM_desc_t *descB, CHAM_desc_t *descBref ) { return 0; } +static inline int check_zlauum ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; } +static inline int check_zxxtrf ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, CHAM_desc_t *descA1, CHAM_desc_t *descA2 ) { return 0; } +static inline int check_zsolve ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_trans_t trans, cham_uplo_t uplo, + CHAM_desc_t *descA, CHAM_desc_t *descX, CHAM_desc_t *descB ) { return 0; } +static inline int check_ztrtri ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_uplo_t uplo, cham_diag_t diag, + CHAM_desc_t *descA, CHAM_desc_t *descAi ) { return 0; } + +/* Using QR factorization */ +static inline int check_zortho ( run_arg_list_t *args, CHAM_desc_t *descQ ) { return 0; } +static inline int check_zgeqrf ( run_arg_list_t *args, CHAM_desc_t *descA, CHAM_desc_t *descAF, CHAM_desc_t *descQ ) { return 0; } +static inline int check_zgelqf ( run_arg_list_t *args, CHAM_desc_t *descA, CHAM_desc_t *descAF, CHAM_desc_t *descQ ) { return 0; } +static inline int check_zgels ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, CHAM_desc_t *descX, CHAM_desc_t *descB ) { return 0; } +static inline int check_zgeqrs ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR ) { return 0; } +static inline int check_zgelqs ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR ) { return 0; } +static inline int check_zqc ( run_arg_list_t *args, cham_side_t side, cham_trans_t trans, CHAM_desc_t *descC, CHAM_desc_t *descQ, CHAM_desc_t *descCC ) { return 0; } + +#else /* !defined(CHAMELEON_SIMULATION) */ + int check_zmatrices ( run_arg_list_t *args, cham_uplo_t uplo, CHAM_desc_t *descA, CHAM_desc_t *descB ); int check_znorm ( run_arg_list_t *args, cham_mtxtype_t mtxtype, cham_normtype_t norm_type, cham_uplo_t uplo, cham_diag_t diag, double norm_cham, CHAM_desc_t *descA ); @@ -60,5 +94,7 @@ int check_zgeqrs ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t int check_zgelqs ( run_arg_list_t *args, cham_trans_t trans, CHAM_desc_t *descA, double Bnorm, CHAM_desc_t *descR ); int check_zqc ( run_arg_list_t *args, cham_side_t side, cham_trans_t trans, CHAM_desc_t *descC, CHAM_desc_t *descQ, CHAM_desc_t *descCC ); +#endif /* defined(CHAMELEON_SIMULATION) */ + #endif diff --git a/new-testing/values.c b/new-testing/values.c index 13f711436fed7803393d1d8707fc6c98cd6168df..28f59bff5ae902ed5eccfaffe7fcd4882c88e7f4 100644 --- a/new-testing/values.c +++ b/new-testing/values.c @@ -2,7 +2,7 @@ * * @file values.c * - * @copyright 2019-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, + * @copyright 2019-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, * Univ. Bordeaux. All rights reserved. *** * @@ -15,7 +15,6 @@ * */ #include "testings.h" -#include <coreblas.h> /** * @brief Convert the input string to an integer @@ -569,6 +568,32 @@ char *sprint_string( val_t val, int human, int nbchar, char *str_in ) return str_in+rc; } +#define Rnd64_A 6364136223846793005ULL +#define Rnd64_C 1ULL +#define RndF_Mul 5.4210108624275222e-20f + +/** + * @brief Generate a random number + */ +static inline unsigned long long int +testing_Rnd64_jump(unsigned long long int n, unsigned long long int seed ) { + unsigned long long int a_k, c_k, ran; + int i; + + a_k = Rnd64_A; + c_k = Rnd64_C; + + ran = seed; + for (i = 0; n; n >>= 1, ++i) { + if (n & 1) + ran = a_k * ran + c_k; + c_k *= (a_k + 1); + a_k *= a_k; + } + + return ran; +} + /** * @brief Generate a random float */ @@ -576,7 +601,14 @@ float testing_salea() { float val; - CORE_splrnt( 1, 1, &val, 1, 1, 1, 0, random() ); + unsigned long long int ran; + + ran = testing_Rnd64_jump( 2, random() ); + + /* Real part */ + val = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + return val; } @@ -587,7 +619,14 @@ double testing_dalea() { double val; - CORE_dplrnt( 1, 1, &val, 1, 1, 1, 0, random() ); + unsigned long long int ran; + + ran = testing_Rnd64_jump( 2, random() ); + + /* Real part */ + val = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + return val; } @@ -598,7 +637,18 @@ CHAMELEON_Complex32_t testing_calea() { CHAMELEON_Complex32_t val; - CORE_cplrnt( 1, 1, &val, 1, 1, 1, 0, random() ); + unsigned long long int ran; + + ran = testing_Rnd64_jump( 2, random() ); + + /* Real part */ + val = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + + /* Imaginary part */ + val += I*(0.5f - ran * RndF_Mul); + ran = Rnd64_A * ran + Rnd64_C; + return val; } @@ -609,6 +659,17 @@ CHAMELEON_Complex64_t testing_zalea() { CHAMELEON_Complex64_t val; - CORE_zplrnt( 1, 1, &val, 1, 1, 1, 0, random() ); + unsigned long long int ran; + + ran = testing_Rnd64_jump( 2, random() ); + + /* Real part */ + val = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + + /* Imaginary part */ + val += I*(0.5f - ran * RndF_Mul); + ran = Rnd64_A * ran + Rnd64_C; + return val; }