MPI-3 Window type for one-sided communication (RMA)
Wraps MPI_Win to provide object-oriented interface for Remote Memory Access (RMA) operations needed for DDI
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | private | :: | is_valid | = | .false. | ||
| type(MPI_Win), | private | :: | m_win | = | MPI_WIN_NULL |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=dp), | intent(in) | :: | buffer(*) | |||
| type(MPI_Op), | intent(in), | optional | :: | op |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int32), | intent(in) | :: | buffer(*) | |||
| type(MPI_Op), | intent(in), | optional | :: | op |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int64), | intent(in) | :: | buffer(*) | |||
| type(MPI_Op), | intent(in), | optional | :: | op |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=sp), | intent(in) | :: | buffer(*) | |||
| type(MPI_Op), | intent(in), | optional | :: | op |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int64), | intent(in) | :: | value | |||
| integer(kind=int64), | intent(out) | :: | result |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=dp), | intent(out) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int32), | intent(out) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int64), | intent(out) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=sp), | intent(out) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in), | optional | :: | assert |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=dp), | intent(in) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int32), | intent(in) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int64), | intent(in) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=sp), | intent(in) | :: | buffer(*) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=dp), | intent(out) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int32), | intent(out) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int64), | intent(out) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=sp), | intent(out) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=dp), | intent(in) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int32), | intent(in) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| integer(kind=int64), | intent(in) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | target_rank | |||
| integer(kind=MPI_ADDRESS_KIND), | intent(in) | :: | target_disp | |||
| integer(kind=int32), | intent(in) | :: | count | |||
| real(kind=sp), | intent(in) | :: | buffer(*) | |||
| type(request_t), | intent(out) | :: | request |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this | |||
| integer(kind=int32), | intent(in) | :: | rank |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(win_t), | intent(in) | :: | this |
type :: win_t !! MPI-3 Window type for one-sided communication (RMA) !! !! Wraps MPI_Win to provide object-oriented interface for !! Remote Memory Access (RMA) operations needed for DDI private type(MPI_Win) :: m_win = MPI_WIN_NULL logical :: is_valid = .false. contains procedure :: is_null => win_is_null procedure :: get_handle => win_get_handle procedure :: fence => win_fence procedure :: lock => win_lock procedure :: unlock => win_unlock procedure :: lock_all => win_lock_all procedure :: unlock_all => win_unlock_all procedure :: flush => win_flush procedure :: flush_all => win_flush_all ! Double precision (dp) RMA operations procedure :: get_dp => win_get_dp procedure :: put_dp => win_put_dp procedure :: rget_dp => win_rget_dp procedure :: rput_dp => win_rput_dp procedure :: accumulate_dp => win_accumulate_dp ! Single precision (sp) RMA operations procedure :: get_sp => win_get_sp procedure :: put_sp => win_put_sp procedure :: rget_sp => win_rget_sp procedure :: rput_sp => win_rput_sp procedure :: accumulate_sp => win_accumulate_sp ! Integer32 RMA operations procedure :: get_i32 => win_get_i32 procedure :: put_i32 => win_put_i32 procedure :: rget_i32 => win_rget_i32 procedure :: rput_i32 => win_rput_i32 procedure :: accumulate_i32 => win_accumulate_i32 ! Integer64 RMA operations procedure :: get_i64 => win_get_i64 procedure :: put_i64 => win_put_i64 procedure :: rget_i64 => win_rget_i64 procedure :: rput_i64 => win_rput_i64 procedure :: accumulate_i64 => win_accumulate_i64 procedure :: fetch_and_add_i64 => win_fetch_and_add_i64 procedure :: finalize => win_finalize end type win_t