ScalES-PPM
Loading...
Searching...
No Matches
Data Types | Functions/Subroutines | Variables
dist_array.f90 File Reference

distributed array implementation, optimized for read-only access in parallel phase More...

Data Types

type  ppm_distributed_array::global_array_desc
 describes one array-like global data structure to be distributed More...
 
type  ppm_distributed_array::dist_mult_array
 dist_mult_array describes a global array where each rank only holds a part of the whole and this object can be used to access values stored on other ranks. More...
 
interface  ppm_distributed_array::dist_mult_array_local_ptr
 get POINTER to local portion of sub-array More...
 

Functions/Subroutines

type(dist_mult_array) function, public ppm_distributed_array::dist_mult_array_new (sub_arrays, local_chunk, comm, cache_size, sync_mode)
 Get value out of distributed multi-array, independent of rank the data resides on.
 
type(dist_mult_array) function, public ppm_distributed_array::dist_mult_array_copy (dm_array)
 copy dist_mult_array data type
 
subroutine, public ppm_distributed_array::dist_mult_array_delete (dm_array)
 destruct dist_mult_array data type
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_c (dm_array, sub_array_idx, sub_array_ptr)
 retrieve TYPE(c_ptr) to local chunk
 
subroutine, public ppm_distributed_array::dist_mult_array_expose (dm_array)
 make local data available to other ranks
 
subroutine, public ppm_distributed_array::dist_mult_array_unexpose (dm_array)
 wait for all ranks to finish queries in current exposure epoch
 
subroutine, public ppm_distributed_array::dist_mult_array_rma_sync (dm_array)
 synchronize RMA updates only, ignore local updates
 
integer function, public ppm_distributed_array::dist_mult_array_get_sync_mode (dm_array)
 query sync protocol
 
subroutine, public ppm_distributed_array::dist_mult_array_set_sync_mode (dm_array, sync_mode, cache_size)
 change sync protocol
 
subroutine ppm_distributed_array::dist_mult_array_rank_rect (dm_array, sub_array_idx, rank, rect)
 
integer function, public ppm_distributed_array::dist_mult_array_comm (dm_array)
 
subroutine, public ppm_distributed_array::dist_mult_array_set_transfer_mode (dm_array, mode)
 
integer function, public ppm_distributed_array::dist_mult_array_get_transfer_mode (dm_array)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_1d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_2d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_3d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_4d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_5d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_6d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i4_7d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_1d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_2d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_3d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_4d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_5d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_6d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_i8_7d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_1d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_2d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_3d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_4d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_5d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_6d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_l_7d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_1d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_2d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_3d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_4d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_5d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_6d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_sp_7d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_1d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_2d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_3d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_4d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_5d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_6d (dm_array, sub_array_idx, sub_array_ptr)
 
subroutine ppm_distributed_array::dist_mult_array_local_ptr_dp_7d (dm_array, sub_array_idx, sub_array_ptr)
 

Variables

external ppm_distributed_array_rename::ppm_dist_mult_array_get_f2c
 
integer, parameter ppm_distributed_array::max_rank = 7
 
integer, parameter, public ppm_distributed_array::sync_mode_passive_target = 0
 
integer, parameter, public ppm_distributed_array::sync_mode_active_target = 1
 
integer, parameter, public ppm_distributed_array::sync_mode_local_only = 2
 
integer, parameter, public ppm_distributed_array::transfer_mode_struct = 0
 
integer, parameter, public ppm_distributed_array::transfer_mode_bytes = 1
 

Detailed Description

distributed array implementation, optimized for read-only access in parallel phase

Version
1.0
Author
Thomas Jahns jahns.nosp@m.@dkr.nosp@m.z.de Moritz Hanke hanke.nosp@m.@dkr.nosp@m.z.de

Function/Subroutine Documentation

◆ dist_mult_array_copy()

type(dist_mult_array) function, public ppm_distributed_array::dist_mult_array_copy ( type(dist_mult_array), intent(inout) dm_array)

copy dist_mult_array data type

Remarks
since an MPI window is created, this routine is collective for all processes which participated in the corresponding call to dist_mult_array_new or dist_mult_array_copy
Parameters
[in,out]dm_arraydistributed multi-array to copy
Returns
copy of distributed multi-array dm_array

◆ dist_mult_array_delete()

subroutine, public ppm_distributed_array::dist_mult_array_delete ( type(dist_mult_array), intent(inout) dm_array)

destruct dist_mult_array data type

Remarks
since an MPI window is freed, this routine is collective for all processes which participated in the corresponding call to dist_mult_array_new or dist_mult_array_copy
Parameters
[in,out]dm_arraydistributed multi-array to delete

◆ dist_mult_array_expose()

subroutine, public ppm_distributed_array::dist_mult_array_expose ( type(dist_mult_array), intent(inout) dm_array)

make local data available to other ranks

This call is collective for all ranks in the communicator used to create dm_array

note: this enters an exposure epoch on the data shared via RMA local data must not be changed while the array is in exposed state

◆ dist_mult_array_new()

type(dist_mult_array) function, public ppm_distributed_array::dist_mult_array_new ( type(global_array_desc), dimension(:), intent(in) sub_arrays,
type(extent), dimension(:, :), intent(in) local_chunk,
integer, intent(in) comm,
integer, intent(in), optional cache_size,
integer, intent(in), optional sync_mode )

Get value out of distributed multi-array, independent of rank the data resides on.

For example, to query the data assigned in the example for dist_mult_array_local_ptr, use a query like this:

TYPE(dist_mult_array) :: dma
INTEGER :: i5
CALL dist_mult_array_expose(dma)
CALL dist_mult_array_get(dma, 5, (/ i_l, j_l /), i5)

In case dma was initialized with sync_mode=sync_mode_active_target, the value of i5 must not be accessed before calling a synchronizing routine, either

CALL dist_mult_array_unexpose(dma)

or

CALL dist_mult_array_rma_sync(dma)

create distributed multi-array data structure

The resulting data type represents a number of arrays distributed over the ranks of the communicator passed to this function.

Returns
initialized dist_mult_array structure
Remarks
This operation is collective for all MPI ranks in comm
Parameters
[in]sub_arraysgives number (by its size), array ranks, data types and bounds of each distributed global array. The bounds are represented by an extent type that stores start and size.
[in]local_chunklocal_chunk(i, j) describes for dimension i of sub_array j of the global arrays the local part available on this MPI rank.
Only contiguous local parts are possible.
SIZE(local_chunk, 2) must match SIZE(sub_arrays) and SHAPE(local_chunk) = (/ max_rank or more, num_sub_arrays /)
[in]commMPI communicator for which this data structure is collectively created
[in]cache_sizenumber of ranks to cache remote local parts of
[in]sync_modeswitch synchronization modes, either sync_mode_passive_target (the default) or sync_mode_active_target_mode. For sync_mode=sync_mode_active_target_mode, execution of RMA is deferred until the next synchronizing call (dist_mult_array_unexpose or dist_mult_array_rma_sync). (see dist_mult_array_get for example)

◆ dist_mult_array_rma_sync()

subroutine, public ppm_distributed_array::dist_mult_array_rma_sync ( type(dist_mult_array), intent(inout) dm_array)

synchronize RMA updates only, ignore local updates

This call is collective for all ranks in the communicator used to create dm_array. Also dm_array must be in exposed state.

◆ dist_mult_array_set_sync_mode()

subroutine, public ppm_distributed_array::dist_mult_array_set_sync_mode ( type(dist_mult_array), intent(inout) dm_array,
integer, intent(in) sync_mode,
integer, intent(in), optional cache_size )

change sync protocol

This call is collective for all ranks in the communicator used to create dm_array

note: this ends an exposure epoch on the data shared via RMA

Parameters
[in,out]dm_arraydistributed multiple arrays to change access/sync mode for
[in]sync_modenew sync mode to set
[in]cache_sizein case sync_mode is sync_mode_passive_target, the number of ranks to cache data for is set to this value (or determined automatically if 0 or not present)

◆ dist_mult_array_unexpose()

subroutine, public ppm_distributed_array::dist_mult_array_unexpose ( type(dist_mult_array), intent(inout) dm_array)

wait for all ranks to finish queries in current exposure epoch

This call is collective for all ranks in the communicator used to create dm_array

note: local data can only be changed after the distributed array was initially created or dist_mult_array_unexpose has been called

Das diesem Bericht zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung, und Forschung unter dem Förderkennzeichen 01IH08004E gefördert. Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor.