Mentions légales du service

Skip to content
Snippets Groups Projects

Support multiple precisions

Merged Abel Calluaud requested to merge acalluau/test_fembem:mr_multi_prec_1 into master
All threads resolved!
Files
2
+ 17
0
#include "main.h"
#include "main.h"
#ifdef HAVE_CHAMELEON
#ifdef HAVE_CHAMELEON
 
#include "chameleon.h"
cham_flttype_t chameleonType;
cham_flttype_t chameleonType;
int (*CHAMELEON_sytrf_Tile)( cham_uplo_t, CHAM_desc_t * ) = NULL; // LLt facto
int (*CHAMELEON_sytrf_Tile)( cham_uplo_t, CHAM_desc_t * ) = NULL; // LLt facto
int (*CHAMELEON_sytrs_Tile)( cham_uplo_t, CHAM_desc_t *, CHAM_desc_t * ) = NULL; // LLt solve
int (*CHAMELEON_sytrs_Tile)( cham_uplo_t, CHAM_desc_t *, CHAM_desc_t * ) = NULL; // LLt solve
@@ -14,6 +15,7 @@ testFEMBEM_initChameleon( ScalarType stype ) {
@@ -14,6 +15,7 @@ testFEMBEM_initChameleon( ScalarType stype ) {
/* Set the scalar type and the functions used by CHAMELEON */
/* Set the scalar type and the functions used by CHAMELEON */
switch(stype) {
switch(stype) {
 
#if defined(CHAMELEON_PREC_S)
case (SIMPLE_PRECISION) :
case (SIMPLE_PRECISION) :
chameleonType = ChamRealFloat;
chameleonType = ChamRealFloat;
CHAMELEON_sytrf_Tile = CHAMELEON_spotrf_Tile;
CHAMELEON_sytrf_Tile = CHAMELEON_spotrf_Tile;
@@ -22,6 +24,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
@@ -22,6 +24,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_sgetrf_nopiv_Tile;
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_sgetrf_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_sgetrs_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_sgetrs_nopiv_Tile;
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_D)
case (DOUBLE_PRECISION) :
case (DOUBLE_PRECISION) :
chameleonType = ChamRealDouble;
chameleonType = ChamRealDouble;
CHAMELEON_sytrf_Tile = CHAMELEON_dpotrf_Tile;
CHAMELEON_sytrf_Tile = CHAMELEON_dpotrf_Tile;
@@ -30,6 +34,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
@@ -30,6 +34,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_dgetrf_nopiv_Tile;
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_dgetrf_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_dgetrs_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_dgetrs_nopiv_Tile;
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_C)
case (SIMPLE_COMPLEX) :
case (SIMPLE_COMPLEX) :
chameleonType = ChamComplexFloat;
chameleonType = ChamComplexFloat;
CHAMELEON_sytrf_Tile = CHAMELEON_csytrf_Tile;
CHAMELEON_sytrf_Tile = CHAMELEON_csytrf_Tile;
@@ -38,6 +44,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
@@ -38,6 +44,8 @@ testFEMBEM_initChameleon( ScalarType stype ) {
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_cgetrf_nopiv_Tile;
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_cgetrf_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_cgetrs_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_cgetrs_nopiv_Tile;
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_Z)
case (DOUBLE_COMPLEX) :
case (DOUBLE_COMPLEX) :
chameleonType = ChamComplexDouble;
chameleonType = ChamComplexDouble;
CHAMELEON_sytrf_Tile = CHAMELEON_zsytrf_Tile;
CHAMELEON_sytrf_Tile = CHAMELEON_zsytrf_Tile;
@@ -46,6 +54,7 @@ testFEMBEM_initChameleon( ScalarType stype ) {
@@ -46,6 +54,7 @@ testFEMBEM_initChameleon( ScalarType stype ) {
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_zgetrf_nopiv_Tile;
CHAMELEON_getrf_nopiv_Tile = CHAMELEON_zgetrf_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_zgetrs_nopiv_Tile;
CHAMELEON_getrs_nopiv_Tile = CHAMELEON_zgetrs_nopiv_Tile;
break ;
break ;
 
#endif
default :
default :
SETERRQ(1, "testHCHAMELEON : unknown scalar type\n") ;
SETERRQ(1, "testHCHAMELEON : unknown scalar type\n") ;
break ;
break ;
@@ -60,30 +69,38 @@ int CHAMELEON_gemm_Tile( CHAM_desc_t *descA,
@@ -60,30 +69,38 @@ int CHAMELEON_gemm_Tile( CHAM_desc_t *descA,
int ierr = 0;
int ierr = 0;
switch(stype) {
switch(stype) {
 
#if defined(CHAMELEON_PREC_S)
case (SIMPLE_PRECISION) :
case (SIMPLE_PRECISION) :
ierr = CHAMELEON_sgemm_Tile( ChamNoTrans, ChamNoTrans,
ierr = CHAMELEON_sgemm_Tile( ChamNoTrans, ChamNoTrans,
(float)1., descA, descX,
(float)1., descA, descX,
(float)0., descY );
(float)0., descY );
CHKERRQ(ierr);
CHKERRQ(ierr);
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_D)
case (DOUBLE_PRECISION) :
case (DOUBLE_PRECISION) :
ierr = CHAMELEON_dgemm_Tile( ChamNoTrans, ChamNoTrans,
ierr = CHAMELEON_dgemm_Tile( ChamNoTrans, ChamNoTrans,
(double)1., descA, descX,
(double)1., descA, descX,
(double)0., descY);
(double)0., descY);
CHKERRQ(ierr);
CHKERRQ(ierr);
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_C)
case (SIMPLE_COMPLEX) :
case (SIMPLE_COMPLEX) :
ierr = CHAMELEON_cgemm_Tile( ChamNoTrans, ChamNoTrans,
ierr = CHAMELEON_cgemm_Tile( ChamNoTrans, ChamNoTrans,
(CHAMELEON_Complex32_t)1., descA, descX,
(CHAMELEON_Complex32_t)1., descA, descX,
(CHAMELEON_Complex32_t)0., descY);
(CHAMELEON_Complex32_t)0., descY);
CHKERRQ(ierr);
CHKERRQ(ierr);
break ;
break ;
 
#endif
 
#if defined(CHAMELEON_PREC_Z)
case (DOUBLE_COMPLEX) :
case (DOUBLE_COMPLEX) :
ierr = CHAMELEON_zgemm_Tile( ChamNoTrans, ChamNoTrans,
ierr = CHAMELEON_zgemm_Tile( ChamNoTrans, ChamNoTrans,
(CHAMELEON_Complex64_t)1., descA, descX,
(CHAMELEON_Complex64_t)1., descA, descX,
(CHAMELEON_Complex64_t)0., descY);
(CHAMELEON_Complex64_t)0., descY);
CHKERRQ(ierr);
CHKERRQ(ierr);
break ;
break ;
 
#endif
default :
default :
SETERRQ(1, "CHAMELEON_gemm_Tile: unknown scalar type\n") ;
SETERRQ(1, "CHAMELEON_gemm_Tile: unknown scalar type\n") ;
break ;
break ;
Loading