Skip to content

Commit

Permalink
add env variable to control G2G algo
Browse files Browse the repository at this point in the history
  • Loading branch information
alazzaro committed Jan 29, 2024
1 parent 8865695 commit eaf75c5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
26 changes: 24 additions & 2 deletions src/core/dbcsr_config.F
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ MODULE dbcsr_config
SET_PARAMETER_DEFAULT(USE_MEMPOOLS_CPU, CONF_PAR_LOGICAL, .FALSE.)
SET_PARAMETER_DEFAULT(USE_MPI_ALLOCATOR, CONF_PAR_LOGICAL, .FALSE.)
SET_PARAMETER_DEFAULT(TAS_SPLIT_FACTOR, CONF_PAR_REAL, 1.0_real_8)
#if defined(__DBCSR_ACC_G2G)
SET_PARAMETER_DEFAULT(USE_ACC_G2G, CONF_PAR_LOGICAL, .TRUE.)
#endif
END TYPE dbcsr_config_type

TYPE(dbcsr_config_type), PROTECTED, SAVE :: dbcsr_cfg = dbcsr_config_type() ! defaults
Expand Down Expand Up @@ -346,7 +349,8 @@ SUBROUTINE dbcsr_set_config( &
accdrv_binning_nbins, &
accdrv_binning_binsize, &
use_mempools_cpu, &
tas_split_factor)
tas_split_factor, &
use_acc_g2g)

CHARACTER(len=*), INTENT(IN), OPTIONAL :: mm_driver
LOGICAL, INTENT(IN), OPTIONAL :: use_mpi_allocator
Expand Down Expand Up @@ -374,6 +378,7 @@ SUBROUTINE dbcsr_set_config( &
accdrv_binning_binsize
LOGICAL, INTENT(IN), OPTIONAL :: use_mempools_cpu
REAL(KIND=real_8), INTENT(IN), OPTIONAL :: tas_split_factor
LOGICAL, INTENT(IN), OPTIONAL :: use_acc_g2g

INTEGER, SAVE :: nthreads = 0

Expand All @@ -395,6 +400,11 @@ SUBROUTINE dbcsr_set_config( &
CALL dbcsr_cfg%accdrv_binning_binsize%set(accdrv_binning_binsize)
CALL dbcsr_cfg%use_mempools_cpu%set(use_mempools_cpu)
CALL dbcsr_cfg%tas_split_factor%set(tas_split_factor)
#if defined(__DBCSR_ACC_G2G)
CALL dbcsr_cfg%use_acc_g2g%set(use_acc_g2g)
#else
MARK_USED(use_acc_g2g)
#endif

IF (0 == nthreads) THEN
nthreads = 1
Expand Down Expand Up @@ -435,7 +445,8 @@ SUBROUTINE dbcsr_get_default_config( &
accdrv_binning_nbins, &
accdrv_binning_binsize, &
use_mempools_cpu, &
tas_split_factor)
tas_split_factor, &
use_acc_g2g)
!
LOGICAL, INTENT(OUT), OPTIONAL :: use_mpi_allocator
INTEGER, INTENT(OUT), OPTIONAL :: mm_stack_size, avg_elements_images, &
Expand All @@ -455,6 +466,7 @@ SUBROUTINE dbcsr_get_default_config( &
accdrv_binning_binsize
LOGICAL, INTENT(OUT), OPTIONAL :: use_mempools_cpu
REAL(KIND=real_8), INTENT(OUT), OPTIONAL :: tas_split_factor
LOGICAL, INTENT(OUT), OPTIONAL :: use_acc_g2g

IF (PRESENT(use_mpi_allocator)) use_mpi_allocator = dbcsr_cfg%use_mpi_allocator%defval
IF (PRESENT(mm_stack_size)) mm_stack_size = dbcsr_cfg%mm_stack_size%defval
Expand All @@ -477,6 +489,11 @@ SUBROUTINE dbcsr_get_default_config( &
IF (PRESENT(use_mempools_cpu)) use_mempools_cpu = dbcsr_cfg%use_mempools_cpu%defval
IF (PRESENT(nstacks)) nstacks = dbcsr_cfg%n_stacks%defval
IF (PRESENT(tas_split_factor)) tas_split_factor = dbcsr_cfg%tas_split_factor%defval
#if defined(__DBCSR_ACC_G2G)
IF (PRESENT(use_acc_g2g)) use_acc_g2g = dbcsr_cfg%use_acc_g2g%defval
#else
MARK_USED(use_acc_g2g)
#endif

END SUBROUTINE dbcsr_get_default_config

Expand Down Expand Up @@ -605,6 +622,11 @@ SUBROUTINE dbcsr_print_config(unit_nr)
WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &
"DBCSR| ACC: Min. flop for processing", dbcsr_cfg%accdrv_min_flop_process%val, &
dbcsr_cfg%accdrv_min_flop_process%print_source()
#if defined(__DBCSR_ACC_G2G)
WRITE (UNIT=unit_nr, FMT='(1X,A,T80,L1,A4)') &
"DBCSR| ACC: Use G2G algorithm", dbcsr_cfg%use_acc_g2g%val, &
dbcsr_cfg%use_acc_g2g%print_source()
#endif
IF (dbcsr_cfg%accdrv_stack_sort%val) THEN
WRITE (UNIT=unit_nr, FMT='(1X,A,T70,I11,A4)') &
"DBCSR| ACC: Min. flop for sorting", dbcsr_cfg%accdrv_min_flop_sort%val, &
Expand Down
2 changes: 1 addition & 1 deletion src/mm/dbcsr_mm.F
Original file line number Diff line number Diff line change
Expand Up @@ -907,7 +907,7 @@ SUBROUTINE dbcsr_multiply_generic(transa, transb, &
ELSE
data_type = dbcsr_get_data_type(product_matrix)
#if defined (__DBCSR_ACC_G2G)
IF (data_type .NE. dbcsr_type_real_8) THEN
IF (data_type .NE. dbcsr_type_real_8 .OR. (.NOT. dbcsr_cfg%use_acc_g2g%val)) THEN
! If G2G is enabled, norms have to be calculated on the GPU.
! Since the norms kernel expects only real_8 type data, we
! avoid using G2G for all other data types
Expand Down

0 comments on commit eaf75c5

Please sign in to comment.