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