OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
 
Loading...
Searching...
No Matches
DistParMetisDistribution< dim, T > Class Template Reference

Detailed Description

template<unsigned int dim, typename T>
class DistParMetisDistribution< dim, T >

Definition at line 17 of file DistParMetisDistribution.hpp.

Public Member Functions

 DistParMetisDistribution (Vcluster<> &v_cl)
 
void createCartGraph (grid_sm< dim, void > &grid, Box< dim, T > dom)
 Initialize the distribution graph.
 
DistGraph_CSR< nm_v< dim >, nm_e > & getGraph ()
 Get the current graph (main)
 
void decompose ()
 Create first decomposition, it divides the graph in slices and give each slice to a processor.
 
void refine ()
 Refine current decomposition.
 
float getUnbalance ()
 Compute the unbalance value.
 
void getSubSubDomainPosition (size_t id, T(&pos)[dim])
 function that return the position of the vertex in the space
 
void setComputationCost (size_t id, size_t weight)
 Function that set the weight of the vertex.
 
bool weightsAreUsed ()
 Checks if weights are used on the vertices.
 
size_t getVertexWeight (size_t id)
 function that get the weight of the vertex
 
size_t getProcessorLoad ()
 Compute the processor load counting the total weights of its vertices.
 
size_t getTotalMovedV ()
 return number of moved vertices in all iterations so far
 
size_t getMaxMovedV ()
 return number of moved vertices in all iterations so far
 
void setMigrationCost (size_t id, size_t migration)
 Set migration cost of the vertex id.
 
void setCommunicationCost (size_t v_id, size_t e, size_t communication)
 Set communication cost of the edge id.
 
size_t getNSubSubDomains ()
 Returns total number of sub-sub-domains in the distribution graph.
 
size_t getNSubSubDomainNeighbors (size_t id)
 Returns total number of neighbors of the sub-sub-domain id.
 
void write (const std::string &file)
 Print current graph and save it to file.
 
const DistParMetisDistribution< dim, T > & operator= (const DistParMetisDistribution< dim, T > &dist)
 copy operator
 
const DistParMetisDistribution< dim, T > & operator= (DistParMetisDistribution< dim, T > &&dist)
 copy operator
 

Static Private Member Functions

static void * message_receive (size_t msg_i, size_t total_msg, size_t total_p, size_t i, size_t ri, void *ptr)
 Callback of the sendrecv to set the size of the array received.
 

Private Attributes

Vclusterv_cl
 Vcluster.
 
grid_sm< dim, void > gr
 Structure that store the cartesian grid information.
 
Box< dim, T > domain
 rectangular domain to decompose
 
DistGraph_CSR< nm_v< dim >, nm_eg
 Processor sub-sub-domain graph.
 
DistParmetis< DistGraph_CSR< nm_v< dim >, nm_e > > parmetis_graph
 Convert the graph to parmetis format.
 
openfpm::vector< idx_t > vtxdist
 Init vtxdist needed for Parmetis.
 
openfpm::vector< openfpm::vector< idx_t > > partitions
 partitions
 
openfpm::vector< openfpm::vector< size_t > > v_per_proc
 Init data structure to keep trace of new vertices distribution in processors (needed to update main graph)
 
size_t g_moved = 0
 Number of moved vertices in all iterations.
 
size_t m_moved = 0
 Max number of moved vertices in all iterations.
 
bool verticesGotWeights = false
 Flag to check if weights are used on vertices.
 

Constructor & Destructor Documentation

◆ DistParMetisDistribution()

template<unsigned int dim, typename T >
DistParMetisDistribution< dim, T >::DistParMetisDistribution ( Vcluster<> &  v_cl)
inline

Constructor for the ParMetis class

Parameters
v_clVcluster to use as communication object in this class

Definition at line 76 of file DistParMetisDistribution.hpp.

Member Function Documentation

◆ createCartGraph()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::createCartGraph ( grid_sm< dim, void > &  grid,
Box< dim, T >  dom 
)
inline

Initialize the distribution graph.

/param grid Grid /param dom Domain

Set grid and domain

Create sub graph

Definition at line 87 of file DistParMetisDistribution.hpp.

◆ decompose()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::decompose ( )
inline

Create first decomposition, it divides the graph in slices and give each slice to a processor.

Init sub graph in parmetis format

Decompose

Get result partition for this processors

Definition at line 115 of file DistParMetisDistribution.hpp.

◆ getGraph()

template<unsigned int dim, typename T >
DistGraph_CSR< nm_v< dim >, nm_e > & DistParMetisDistribution< dim, T >::getGraph ( )
inline

Get the current graph (main)

Definition at line 107 of file DistParMetisDistribution.hpp.

◆ getMaxMovedV()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getMaxMovedV ( )
inline

return number of moved vertices in all iterations so far

Returns
number of moved vertices

Definition at line 278 of file DistParMetisDistribution.hpp.

◆ getNSubSubDomainNeighbors()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getNSubSubDomainNeighbors ( size_t  id)
inline

Returns total number of neighbors of the sub-sub-domain id.

Parameters
idid of the sub-sub-domain
Returns
the number of neighborhood sub-sub-domain

Definition at line 326 of file DistParMetisDistribution.hpp.

◆ getNSubSubDomains()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getNSubSubDomains ( )
inline

Returns total number of sub-sub-domains in the distribution graph.

Returns
number od sub-sub-domain

Definition at line 314 of file DistParMetisDistribution.hpp.

◆ getProcessorLoad()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getProcessorLoad ( )
inline

Compute the processor load counting the total weights of its vertices.

Returns
the computational load of the processor graph

Definition at line 252 of file DistParMetisDistribution.hpp.

◆ getSubSubDomainPosition()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::getSubSubDomainPosition ( size_t  id,
T(&)  pos[dim] 
)
inline

function that return the position of the vertex in the space

Parameters
idvertex id
posvector that will contain x, y, z

Definition at line 190 of file DistParMetisDistribution.hpp.

◆ getTotalMovedV()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getTotalMovedV ( )
inline

return number of moved vertices in all iterations so far

Returns
number of moved vertices

Definition at line 268 of file DistParMetisDistribution.hpp.

◆ getUnbalance()

template<unsigned int dim, typename T >
float DistParMetisDistribution< dim, T >::getUnbalance ( )
inline

Compute the unbalance value.

Returns
the unbalance value

Definition at line 163 of file DistParMetisDistribution.hpp.

◆ getVertexWeight()

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::getVertexWeight ( size_t  id)
inline

function that get the weight of the vertex

Parameters
idvertex id
Returns
the weight of the vertex

Definition at line 238 of file DistParMetisDistribution.hpp.

◆ message_receive()

template<unsigned int dim, typename T >
static void * DistParMetisDistribution< dim, T >::message_receive ( size_t  msg_i,
size_t  total_msg,
size_t  total_p,
size_t  i,
size_t  ri,
void *  ptr 
)
inlinestaticprivate

Callback of the sendrecv to set the size of the array received.

Parameters
msg_iIndex of the message
total_msgTotal numeber of messages
total_pTotal number of processors to comunicate with
iProcessor id
riRequest id
ptrVoid pointer parameter for additional data to pass to the call-back

Definition at line 61 of file DistParMetisDistribution.hpp.

◆ operator=() [1/2]

template<unsigned int dim, typename T >
const DistParMetisDistribution< dim, T > & DistParMetisDistribution< dim, T >::operator= ( const DistParMetisDistribution< dim, T > &  dist)
inline

copy operator

Parameters
distobject to copy
Returns
itself

Definition at line 352 of file DistParMetisDistribution.hpp.

◆ operator=() [2/2]

template<unsigned int dim, typename T >
const DistParMetisDistribution< dim, T > & DistParMetisDistribution< dim, T >::operator= ( DistParMetisDistribution< dim, T > &&  dist)
inline

copy operator

Parameters
distobject to copy
Returns
itself

Definition at line 372 of file DistParMetisDistribution.hpp.

◆ refine()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::refine ( )
inline

Refine current decomposition.

It makes a refinement of the current decomposition using Parmetis function RefineKWay After that it also does the remapping of the graph

Reset parmetis graph and reconstruct it

Refine

Get result partition for this processors

Definition at line 140 of file DistParMetisDistribution.hpp.

◆ setCommunicationCost()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::setCommunicationCost ( size_t  v_id,
size_t  e,
size_t  communication 
)
inline

Set communication cost of the edge id.

Parameters
v_idId of the source vertex of the edge
ei child of the vertex
communicationCommunication value

Definition at line 304 of file DistParMetisDistribution.hpp.

◆ setComputationCost()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::setComputationCost ( size_t  id,
size_t  weight 
)
inline

Function that set the weight of the vertex.

Parameters
idvertex id
weightto give to the vertex

Definition at line 209 of file DistParMetisDistribution.hpp.

◆ setMigrationCost()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::setMigrationCost ( size_t  id,
size_t  migration 
)
inline

Set migration cost of the vertex id.

Parameters
idof the vertex to update
migrationcost of the migration

Definition at line 288 of file DistParMetisDistribution.hpp.

◆ weightsAreUsed()

template<unsigned int dim, typename T >
bool DistParMetisDistribution< dim, T >::weightsAreUsed ( )
inline

Checks if weights are used on the vertices.

Returns
true if weights are used in the decomposition

Definition at line 226 of file DistParMetisDistribution.hpp.

◆ write()

template<unsigned int dim, typename T >
void DistParMetisDistribution< dim, T >::write ( const std::string &  file)
inline

Print current graph and save it to file.

Parameters
filefile

Definition at line 339 of file DistParMetisDistribution.hpp.

Field Documentation

◆ domain

template<unsigned int dim, typename T >
Box<dim, T> DistParMetisDistribution< dim, T >::domain
private

rectangular domain to decompose

Definition at line 26 of file DistParMetisDistribution.hpp.

◆ g

template<unsigned int dim, typename T >
DistGraph_CSR<nm_v<dim>, nm_e> DistParMetisDistribution< dim, T >::g
private

Processor sub-sub-domain graph.

Definition at line 29 of file DistParMetisDistribution.hpp.

◆ g_moved

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::g_moved = 0
private

Number of moved vertices in all iterations.

Definition at line 44 of file DistParMetisDistribution.hpp.

◆ gr

template<unsigned int dim, typename T >
grid_sm<dim, void> DistParMetisDistribution< dim, T >::gr
private

Structure that store the cartesian grid information.

Definition at line 23 of file DistParMetisDistribution.hpp.

◆ m_moved

template<unsigned int dim, typename T >
size_t DistParMetisDistribution< dim, T >::m_moved = 0
private

Max number of moved vertices in all iterations.

Definition at line 47 of file DistParMetisDistribution.hpp.

◆ parmetis_graph

template<unsigned int dim, typename T >
DistParmetis<DistGraph_CSR<nm_v<dim>, nm_e> > DistParMetisDistribution< dim, T >::parmetis_graph
private

Convert the graph to parmetis format.

Definition at line 32 of file DistParMetisDistribution.hpp.

◆ partitions

template<unsigned int dim, typename T >
openfpm::vector<openfpm::vector<idx_t> > DistParMetisDistribution< dim, T >::partitions
private

partitions

Definition at line 38 of file DistParMetisDistribution.hpp.

◆ v_cl

template<unsigned int dim, typename T >
Vcluster& DistParMetisDistribution< dim, T >::v_cl
private

Vcluster.

Definition at line 20 of file DistParMetisDistribution.hpp.

◆ v_per_proc

template<unsigned int dim, typename T >
openfpm::vector<openfpm::vector<size_t> > DistParMetisDistribution< dim, T >::v_per_proc
private

Init data structure to keep trace of new vertices distribution in processors (needed to update main graph)

Definition at line 41 of file DistParMetisDistribution.hpp.

◆ verticesGotWeights

template<unsigned int dim, typename T >
bool DistParMetisDistribution< dim, T >::verticesGotWeights = false
private

Flag to check if weights are used on vertices.

Definition at line 50 of file DistParMetisDistribution.hpp.

◆ vtxdist

template<unsigned int dim, typename T >
openfpm::vector<idx_t> DistParMetisDistribution< dim, T >::vtxdist
private

Init vtxdist needed for Parmetis.

Definition at line 35 of file DistParMetisDistribution.hpp.


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