diff --git a/include/main.h b/include/main.h index 008209c73a78928fc794c910dfe082c85f3e9c67..dfc04f7991a7c2f9241c10dca576c3648f53d43b 100644 --- a/include/main.h +++ b/include/main.h @@ -233,6 +233,7 @@ enum algo { _gemvHLIBPRO, _solveHLIBPRO, _gemvHCHAMELEON, + _gemmHCHAMELEON, _solveHCHAMELEON } ; diff --git a/src/main.c b/src/main.c index 2b34a2d48b77ec2603bd5d8349b852b3c23e16ab..490da5067cf9a81a2f210d9a2b7662c66436e4a3 100644 --- a/src/main.c +++ b/src/main.c @@ -43,6 +43,10 @@ int main(int argc, char **argv) { testedAlgo = _solveHLIBPRO ; printf("Testing : solve HLIBPRO.\n") ; } + if (MpfArgHasName(&argc, argv, 1, "-gemmhchameleon") > 0) { + testedAlgo = _gemmHCHAMELEON ; + printf("Testing : gemm H-CHAMELEON.\n") ; + } if (MpfArgHasName(&argc, argv, 1, "-gemvhchameleon") > 0) { testedAlgo = _gemvHCHAMELEON ; printf("Testing : gemv H-CHAMELEON.\n") ; @@ -66,6 +70,7 @@ int main(int argc, char **argv) { case _solveHLIBPRO: break; case _gemvHCHAMELEON: + case _gemmHCHAMELEON: case _solveHCHAMELEON: // Add "--chameleon" in the command line if it is not yet there if (!MpfArgHasName(&argc, argv, 0, "--chameleon")) argv[argc++]="--chameleon"; break; @@ -96,6 +101,7 @@ int main(int argc, char **argv) { ierr=initHLIBPRO(&argc, &argv) ; CHKERRQ(ierr) ; break; case _gemvHCHAMELEON: + case _gemmHCHAMELEON: case _solveHCHAMELEON: mpf_hmat_settings.engine = mpf_hmat_seq; ierr = init_hmat_interface(); CHKERRQ(ierr); @@ -301,6 +307,7 @@ int main(int argc, char **argv) { ierr = testHLIBPRO(); CHKERRQ(ierr); break; case _gemvHCHAMELEON: + case _gemmHCHAMELEON: case _solveHCHAMELEON: ierr = testHCHAMELEON(); CHKERRQ(ierr); break; diff --git a/src/testHCHAMELEON.c b/src/testHCHAMELEON.c index 89c85ecd28481e8762a9ea1d79484cd575c78f26..2244ba770c5709ef0f086e3a2c9dca549316b646 100644 --- a/src/testHCHAMELEON.c +++ b/src/testHCHAMELEON.c @@ -110,6 +110,38 @@ int testHCHAMELEON(void) { /* Switch on the various H-CHAMELEON tests */ /* ===================================================================================== */ switch(testedAlgo) { + case _gemmHCHAMELEON: + { + HCHAM_desc_t hdescB; + HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescB, hi ); + HCHAM_desc_t hdescC; + HCHAMELEON_generate_matrix( chameleonType, NB, dims, &hdescC, hi ); + + /* ===================================================================================== */ + /* Appelle le produit mat.vec : A.rhs -> solHMAT */ + /* ===================================================================================== */ + Mpf_printf(MPI_COMM_WORLD, "\n**** Computing HMATxHMAT product...\n") ; + + temps_initial = getTime (); + + /* Compute the mat.vec product A.rhs -> solCHAM */ + if ( generate_traces ) { + CHAMELEON_Enable( CHAMELEON_PROFILING_MODE ); + } + CHAMELEON_gemm_Tile( hdescA.super, hdescB.super, hdescC.super ); + if ( generate_traces ) { + CHAMELEON_Disable( CHAMELEON_PROFILING_MODE ); + } + + temps_final = getTime (); + temps_cpu = temps_final - temps_initial; + Mpf_printf( MPI_COMM_WORLD,"<PERFTESTS> TpsCpuGEMM = %f \n", temps_cpu ); + + HCHAMELEON_destroy_matrix( &hdescB ); + HCHAMELEON_destroy_matrix( &hdescC ); + } + break; + case _gemvHCHAMELEON: /* ===================================================================================== */