Ensures that given memtype has requested settings.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_memtype_type), | intent(inout) | :: | memtype | |||
logical, | intent(in), | optional | :: | acc_hostalloc | ||
logical, | intent(in), | optional | :: | acc_devalloc | ||
logical, | intent(in), | optional | :: | mpi | ||
type(acc_stream_type), | optional | :: | acc_stream | |||
real(kind=dp), | optional | :: | oversize_factor | |||
logical, | intent(in), | optional | :: | has_pool |
SUBROUTINE dbcsr_memtype_setup(memtype, acc_hostalloc, acc_devalloc, mpi, &
!! Ensures that given memtype has requested settings.
acc_stream, oversize_factor, has_pool)
TYPE(dbcsr_memtype_type), INTENT(INOUT) :: memtype
LOGICAL, INTENT(IN), OPTIONAL :: acc_hostalloc, acc_devalloc, mpi
TYPE(acc_stream_type), OPTIONAL :: acc_stream
REAL(KIND=dp), OPTIONAL :: oversize_factor
LOGICAL, INTENT(IN), OPTIONAL :: has_pool
LOGICAL :: is_ok, my_has_pool
TYPE(dbcsr_memtype_type) :: aim
! variable aim is initialized with default values from type definition
my_has_pool = .FALSE.
IF (PRESENT(has_pool)) my_has_pool = has_pool
IF (PRESENT(acc_hostalloc)) aim%acc_hostalloc = acc_hostalloc
IF (PRESENT(acc_devalloc)) aim%acc_devalloc = acc_devalloc
IF (PRESENT(mpi)) aim%mpi = mpi
IF (PRESENT(acc_stream)) aim%acc_stream = acc_stream
IF (PRESENT(oversize_factor)) aim%oversize_factor = oversize_factor
IF (.NOT. aim%acc_devalloc .EQV. acc_stream_associated(aim%acc_stream)) &
DBCSR_ABORT("acc_stream missing")
is_ok = .TRUE.
is_ok = is_ok .AND. (memtype%acc_hostalloc .EQV. aim%acc_hostalloc)
is_ok = is_ok .AND. (memtype%acc_devalloc .EQV. aim%acc_devalloc)
is_ok = is_ok .AND. (memtype%mpi .EQV. aim%mpi)
is_ok = is_ok .AND. acc_stream_equal(memtype%acc_stream, aim%acc_stream)
is_ok = is_ok .AND. (memtype%oversize_factor == aim%oversize_factor)
is_ok = is_ok .AND. (ASSOCIATED(memtype%pool) .EQV. my_has_pool)
IF (.NOT. is_ok) THEN
IF (ASSOCIATED(memtype%pool)) &
CALL dbcsr_mempool_destruct(memtype%pool)
memtype%acc_hostalloc = aim%acc_hostalloc
memtype%acc_devalloc = aim%acc_devalloc
memtype%mpi = aim%mpi
memtype%acc_stream = aim%acc_stream
memtype%oversize_factor = aim%oversize_factor
IF (my_has_pool) &
CALL dbcsr_mempool_create(memtype%pool)
END IF
END SUBROUTINE dbcsr_memtype_setup