Sets entries in given devmem to zero, asynchronously.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(acc_devmem_type), | intent(inout) | :: | this | |||
integer, | intent(in), | optional | :: | first_byte |
begin of region to zero, defaults to 1 if not given. end of region to zero, defaults to size if not given. |
|
integer, | intent(in), | optional | :: | last_byte |
begin of region to zero, defaults to 1 if not given. end of region to zero, defaults to size if not given. |
|
type(acc_stream_type), | intent(in) | :: | stream |
stream on which zeroing is performed. |
SUBROUTINE acc_devmem_setzero_bytes(this, first_byte, last_byte, stream)
!! Sets entries in given devmem to zero, asynchronously.
TYPE(acc_devmem_type), INTENT(INOUT) :: this
INTEGER, INTENT(IN), OPTIONAL :: first_byte, last_byte
!! begin of region to zero, defaults to 1 if not given.
!! end of region to zero, defaults to size if not given.
TYPE(acc_stream_type), INTENT(IN) :: stream
!! stream on which zeroing is performed.
#if ! defined (__DBCSR_ACC)
MARK_USED(this)
MARK_USED(first_byte)
MARK_USED(last_byte)
MARK_USED(stream)
DBCSR_ABORT("__DBCSR_ACC not compiled in.")
#else
INTEGER :: istat
INTEGER(KIND=C_SIZE_T) :: length, offset
TYPE(C_PTR) :: stream_cptr
offset = 0
length = this%size_in_bytes
IF (PRESENT(first_byte)) THEN
offset = first_byte - 1
length = length - offset
END IF
IF (PRESENT(last_byte)) THEN
length = last_byte
IF (PRESENT(first_byte)) length = length - first_byte
END IF
stream_cptr = acc_stream_cptr(stream)
IF (length > 0) THEN
istat = acc_interface_memzero(this%cptr, offset, length, stream_cptr)
IF (istat /= 0) &
DBCSR_ABORT("acc_devmem_setzero: failed")
END IF
#endif
END SUBROUTINE acc_devmem_setzero_bytes