Version 5 (modified by 12 years ago) ( diff ) | ,
---|
Distributed Control
While each processor in scrambler executes the same code and is therefore somewhat autonomous - the AMR nested grid algorithm does create a hierarchy of nodes that is reflected in a hierarchy of processors. Fundamentally there is only need for one real root node. That node creates children and those children then create more children and so on… If nodes are not artificially split, (and single nodes are not shared across processors) then only one processor can determine which regions of the root grid to refine and in turn the nodes for the next higher level (level 1) Since this processor creates the children - it then has to distribute the children to other processors. These processors then create their own children and distribute those children to other processors and so on. In this way the tree is distributed across the entire collection of processors. However, the dependencies present in the nested grid algorithm create a dependency between level 0 processors and level 1 processors and so on.
This dependency requires a certain serialization of the algorithm from level to level - and unfortunately the only way to achieve perfect scalability is to balance these parts of the algorithm across each level. However in general the time spent during these serial portions of the AMR algorithm should be significantly less than the time spent during the parallel portion of the algorithm (ie the advance stage) and it should be possible to achieve good parallelization even with many levels of AMR without artificially fragmenting grids.
Child Groups
Before discussing distributed control it is helpful to first discuss child node groups DistributedTree we can construct
and child processor groups where the denotes whether it is the 0th or 1st generation of children. Using the same definitions inand
Additionally since each node contains a list of processor resources
we can construct a Resource Processor Group:Since during the distribution of resources to children:
we have
Additionally we can define a descendant processor group
Since during the distribution of resouces to children
we also have
Processors in the
will receive child grids (level l+1) directly, while processors in the may receive descendant grids (level > l+1) from the processors in the in which case they need to receive the list of processors in the which contain nodes with resource lists that contain that processor…