OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid > Class Template Reference

This class is an helper for the communication of grid_dist_id. More...

Detailed Description

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
class grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >

This class is an helper for the communication of grid_dist_id.

Template Parameters
dimDimensionality of the grid
StType of space where the grid is living
Tobject the grid is storing
DecompositionClass that decompose the grid for example CartDecomposition
MemoryIs the allocator
device_gridof base structure is going to store the data
See also
grid_dist_id

Definition at line 140 of file grid_dist_id_comm.hpp.

#include <grid_dist_id_comm.hpp>

+ Inheritance diagram for grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >:

Data Structures

struct  rp_id
 

Public Member Functions

void grids_reconstruct (openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &m_oGrid_recv, openfpm::vector< device_grid > &loc_grid, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm)
 Reconstruct the local grids. More...
 
void labelIntersectionGridsProcessor (Decomposition &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< device_grid > &loc_grid_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_global, openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &lbl_b, openfpm::vector< size_t > &prc_sz)
 Label intersection grids for mappings. More...
 
void map_ (Decomposition &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< device_grid > &loc_grid, openfpm::vector< device_grid > &loc_grid_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_global)
 Moves all the grids that does not belong to the local processor to the respective processor. More...
 
template<int... prp>
void ghost_get_ (const openfpm::vector< ip_box_grid< dim >> &ig_box, const openfpm::vector< ep_box_grid< dim >> &eg_box, const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, const openfpm::vector< e_box_multi< dim >> &eb_gid_list, bool use_bx_def, openfpm::vector< device_grid > &loc_grid, const grid_sm< dim, void > &ginfo, std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, size_t opt)
 It fill the ghost part of the grids. More...
 
template<template< typename, typename > class op, int... prp>
void ghost_put_ (Decomposition &dec, const openfpm::vector< ip_box_grid< dim >> &ig_box, const openfpm::vector< ep_box_grid< dim >> &eg_box, const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< device_grid > &loc_grid, openfpm::vector< std::unordered_map< size_t, size_t >> &g_id_to_internal_ghost_box)
 It merge the information in the ghost with the real information. More...
 
 grid_dist_id_comm ()
 Constructor. More...
 
 grid_dist_id_comm (const grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid > &gc)
 Copy constructor. More...
 

Private Member Functions

template<int... prp>
void ghost_get_local (const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< device_grid > &loc_grid, std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, const grid_sm< dim, void > &ginfo, bool use_bx_def, size_t opt)
 Sync the local ghost part. More...
 
template<template< typename, typename > class op, int... prp>
void ghost_put_local (const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< device_grid > &loc_grid, openfpm::vector< std::unordered_map< size_t, size_t >> &g_id_to_external_ghost_box)
 Sync the local ghost part. More...
 
void send_or_queue (size_t prc, char *pointer, char *pointer2)
 
template<typename prp_object >
void queue_recv_data_get (const openfpm::vector< ep_box_grid< dim >> &eg_box, std::vector< size_t > &prp_recv, ExtPreAlloc< Memory > &prRecv_prp)
 
template<typename prp_object >
void queue_recv_data_put (const openfpm::vector< ip_box_grid< dim >> &ig_box, std::vector< size_t > &prp_recv, ExtPreAlloc< Memory > &prRecv_prp)
 
template<typename mem , unsigned ... prp>
void unpack_data_to_ext_ghost (ExtPreAlloc< mem > &emem, openfpm::vector< device_grid > &loc_grid, size_t i, const openfpm::vector< ep_box_grid< dim >> &eg_box, const std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, const openfpm::vector< e_box_multi< dim >> &eb_gid_list, Unpack_stat &ps, size_t opt)
 
template<typename mem , typename header_type , unsigned ... prp>
void unpack_data_to_ext_ghost_with_header (ExtPreAlloc< mem > &emem, openfpm::vector< device_grid > &loc_grid, header_type &headers, size_t i, const openfpm::vector< ep_box_grid< dim >> &eg_box, const std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, const openfpm::vector< e_box_multi< dim >> &eb_gid_list, Unpack_stat &ps, size_t opt)
 
template<unsigned int ... prp>
void fill_headers (size_t opt)
 
template<unsigned ... prp>
void merge_received_data_get (openfpm::vector< device_grid > &loc_grid, const openfpm::vector< ep_box_grid< dim >> &eg_box, const std::vector< size_t > &prp_recv, ExtPreAlloc< Memory > &prRecv_prp, const std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, const openfpm::vector< e_box_multi< dim >> &eb_gid_list, size_t opt)
 
template<template< typename, typename > class op, unsigned ... prp>
void merge_received_data_put (Decomposition &dec, openfpm::vector< device_grid > &loc_grid, const openfpm::vector< ip_box_grid< dim >> &ig_box, const std::vector< size_t > &prp_recv, ExtPreAlloc< Memory > &prRecv_prp, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, const openfpm::vector< std::unordered_map< size_t, size_t >> &g_id_to_internal_ghost_box)
 

Static Private Member Functions

static void * receive_dynamic (size_t msg_i, size_t total_msg, size_t total_p, size_t i, size_t ri, size_t tag, void *ptr)
 

Private Attributes

Vcluster< Memory > & v_cl
 VCluster.
 
openfpm::vector< size_t > p_map_req
 Maps the processor id with the communication request into map procedure.
 
openfpm::vector< size_t > prc_recv_map
 Stores the list of processors that communicate with us (local processor)
 
openfpm::vector< size_t > recv_sz_map
 Stores the size of the elements added for each processor that communicate with us (local processor)
 
openfpm::vector< size_t > send_prc_queue
 List of processor to send to.
 
openfpm::vector< void * > send_pointer
 Pointer to the memory to send.
 
openfpm::vector< size_t > send_size
 size to send
 
openfpm::vector_fr< BMemory< Memory > > recv_buffers
 receiving buffers in case of dynamic
 
openfpm::vector< rp_idrecv_proc
 receiving processors
 
openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int > > > > m_oGrid
 
Memory g_send_prp_mem
 Memory for the ghost sending buffer.
 
Memory g_recv_prp_mem
 Memory for the ghost receiving buffer.
 
openfpm::vector< void * > pointers
 send pointers
 
openfpm::vector< void * > pointers2
 
openfpm::vector_gpu< aggregate< void *, void *, int > > pointers_h
 header unpacker info
 
int n_headers_slot = 1
 
openfpm::vector_gpu< aggregate< size_t, size_t, unsigned int > > headers
 
size_t opt
 Receiving option.
 

Constructor & Destructor Documentation

◆ grid_dist_id_comm() [1/2]

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::grid_dist_id_comm ( )
inline

Constructor.

Definition at line 1560 of file grid_dist_id_comm.hpp.

◆ grid_dist_id_comm() [2/2]

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::grid_dist_id_comm ( const grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid > &  gc)
inline

Copy constructor.

It does not really copy. This structure it suppose to store only temporal data

Definition at line 1572 of file grid_dist_id_comm.hpp.

Member Function Documentation

◆ ghost_get_()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<int... prp>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::ghost_get_ ( const openfpm::vector< ip_box_grid< dim >> &  ig_box,
const openfpm::vector< ep_box_grid< dim >> &  eg_box,
const openfpm::vector< i_lbox_grid< dim >> &  loc_ig_box,
const openfpm::vector< e_lbox_grid< dim >> &  loc_eg_box,
const openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
const openfpm::vector< e_box_multi< dim >> &  eb_gid_list,
bool  use_bx_def,
openfpm::vector< device_grid > &  loc_grid,
const grid_sm< dim, void > &  ginfo,
std::unordered_map< size_t, size_t > &  g_id_to_external_ghost_box,
size_t  opt 
)
inline

It fill the ghost part of the grids.

Parameters
ig_boxinternal ghost box
eg_boxexternal ghost box
loc_ig_boxlocal internal ghost box
loc_eg_boxlocal external ghost box
gdb_extlocal grids information
loc_gridset of local grid
g_id_to_external_ghost_boxindex to external ghost box

Definition at line 1189 of file grid_dist_id_comm.hpp.

◆ ghost_get_local()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<int... prp>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::ghost_get_local ( const openfpm::vector< i_lbox_grid< dim >> &  loc_ig_box,
const openfpm::vector< e_lbox_grid< dim >> &  loc_eg_box,
const openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
openfpm::vector< device_grid > &  loc_grid,
std::unordered_map< size_t, size_t > &  g_id_to_external_ghost_box,
const grid_sm< dim, void > &  ginfo,
bool  use_bx_def,
size_t  opt 
)
inlineprivate

Sync the local ghost part.

Template Parameters
prp...properties to sync
Parameters
loc_ig_boxlocal internel ghost boxes
loc_eg_boxlocal external ghost boxes
gdb_extinformation about the local grids
loc_gridlocal grids
g_id_to_external_ghost_boxfrom global index to external ghost box

For all the sub-domains

For all the internal ghost boxes of each sub-domain

Definition at line 215 of file grid_dist_id_comm.hpp.

◆ ghost_put_()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<template< typename, typename > class op, int... prp>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::ghost_put_ ( Decomposition dec,
const openfpm::vector< ip_box_grid< dim >> &  ig_box,
const openfpm::vector< ep_box_grid< dim >> &  eg_box,
const openfpm::vector< i_lbox_grid< dim >> &  loc_ig_box,
const openfpm::vector< e_lbox_grid< dim >> &  loc_eg_box,
const openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
openfpm::vector< device_grid > &  loc_grid,
openfpm::vector< std::unordered_map< size_t, size_t >> &  g_id_to_internal_ghost_box 
)
inline

It merge the information in the ghost with the real information.

Template Parameters
opmerge operation
Parameters
ig_boxinternal ghost box
eg_boxexternal ghost box
loc_ig_boxlocal internal ghost box
loc_eg_boxlocal external ghost box
gdb_extlocal grids information
loc_gridset of local grid
g_id_to_internal_ghost_boxindex to internal ghost box

Definition at line 1439 of file grid_dist_id_comm.hpp.

◆ ghost_put_local()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<template< typename, typename > class op, int... prp>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::ghost_put_local ( const openfpm::vector< i_lbox_grid< dim >> &  loc_ig_box,
const openfpm::vector< e_lbox_grid< dim >> &  loc_eg_box,
const openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
openfpm::vector< device_grid > &  loc_grid,
openfpm::vector< std::unordered_map< size_t, size_t >> &  g_id_to_external_ghost_box 
)
inlineprivate

Sync the local ghost part.

Template Parameters
prp...properties to sync
Parameters
loc_ig_boxlocal internel ghost boxes
loc_eg_boxlocal external ghost boxes
gdb_extinformation about the local grids
loc_gridlocal grids
g_id_to_external_ghost_boxglobal-if to external ghost box

For all the sub-domains

For all the external ghost boxes of each sub-domain

Definition at line 315 of file grid_dist_id_comm.hpp.

◆ grids_reconstruct()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::grids_reconstruct ( openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &  m_oGrid_recv,
openfpm::vector< device_grid > &  loc_grid,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
CellDecomposer_sm< dim, St, shift< dim, St >> &  cd_sm 
)
inline

Reconstruct the local grids.

Parameters
m_oGrid_recvVector of labeled grids to combine into a local grid
loc_gridlocal grids
gdb_extinformation of the local grids
cd_smCell-decomposer

Definition at line 948 of file grid_dist_id_comm.hpp.

◆ labelIntersectionGridsProcessor()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::labelIntersectionGridsProcessor ( Decomposition dec,
CellDecomposer_sm< dim, St, shift< dim, St >> &  cd_sm,
openfpm::vector< device_grid > &  loc_grid_old,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext_old,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext_global,
openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &  lbl_b,
openfpm::vector< size_t > &  prc_sz 
)
inline

Label intersection grids for mappings.

Parameters
decDecomposition
loc_grid_oldold local grids
cd_smCell-decomposer
gdb_extinformation of the local grids
gdb_ext_oldinformation of the old local grids
gdb_ext_globalinformation of the grids globaly
lbl_blabel for each grid
prc_szFor each processor the number of grids to send to

Definition at line 1016 of file grid_dist_id_comm.hpp.

◆ map_()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::map_ ( Decomposition dec,
CellDecomposer_sm< dim, St, shift< dim, St >> &  cd_sm,
openfpm::vector< device_grid > &  loc_grid,
openfpm::vector< device_grid > &  loc_grid_old,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext_old,
openfpm::vector< GBoxes< device_grid::dims >> &  gdb_ext_global 
)
inline

Moves all the grids that does not belong to the local processor to the respective processor.

This function in general is called if the decomposition change

Parameters
decDecomposition
cd_smcell-decomposer
loc_gridset of local grids
loc_grid_oldset of old local grids
gdb_extinformation of the local grids
gdb_ext_oldinformation of the old local grids
gdb_ext_globalit contain the decomposition at global level

Definition at line 1128 of file grid_dist_id_comm.hpp.

◆ queue_recv_data_get()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<typename prp_object >
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::queue_recv_data_get ( const openfpm::vector< ep_box_grid< dim >> &  eg_box,
std::vector< size_t > &  prp_recv,
ExtPreAlloc< Memory > &  prRecv_prp 
)
inlineprivate

Receive the information from each processors

Resize the receiving buffer

Definition at line 413 of file grid_dist_id_comm.hpp.

◆ queue_recv_data_put()

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
template<typename prp_object >
void grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::queue_recv_data_put ( const openfpm::vector< ip_box_grid< dim >> &  ig_box,
std::vector< size_t > &  prp_recv,
ExtPreAlloc< Memory > &  prRecv_prp 
)
inlineprivate

Resize the receiving buffer

Definition at line 483 of file grid_dist_id_comm.hpp.

Field Documentation

◆ m_oGrid

template<unsigned int dim, typename St, typename T, typename Decomposition = CartDecomposition<dim,St>, typename Memory = HeapMemory, typename device_grid = grid_cpu<dim,T>>
openfpm::vector<openfpm::vector<aggregate<device_grid,SpaceBox<dim,long int> > > > grid_dist_id_comm< dim, St, T, Decomposition, Memory, device_grid >::m_oGrid
private

For each near processor, outgoing intersection grid

Warning
m_oGrid is assumed to be an ordered list first id is grid second id is the processor id

Definition at line 184 of file grid_dist_id_comm.hpp.


The documentation for this class was generated from the following file: