-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Documenter.jl
committed
Jun 11, 2021
0 parents
commit 5cb3ff2
Showing
357 changed files
with
308,678 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>MPI topology · PencilArrays.jl</title><script data-outdated-warner src="../assets/warner.js"></script><link rel="canonical" href="https://jipolanco.github.io/PencilArrays.jl/MPITopology/"/><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/><script src="../assets/tomate.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.svg" alt="PencilArrays.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">PencilArrays.jl</a></span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><span class="tocitem">Library</span><ul><li class="is-active"><a class="tocitem" href>MPI topology</a><ul class="internal"><li><a class="tocitem" href="#Construction"><span>Construction</span></a></li><li><a class="tocitem" href="#Types"><span>Types</span></a></li><li><a class="tocitem" href="#Methods"><span>Methods</span></a></li><li><a class="tocitem" href="#Index"><span>Index</span></a></li></ul></li><li><a class="tocitem" href="../Pencils/">Pencil configurations</a></li><li><a class="tocitem" href="../PencilArrays/">Array wrappers</a></li><li><a class="tocitem" href="../Transpositions/">Global MPI operations</a></li><li><a class="tocitem" href="../PencilIO/">Parallel I/O</a></li><li><a class="tocitem" href="../PencilArrays_timers/">Measuring performance</a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li><a class="is-disabled">Library</a></li><li class="is-active"><a href>MPI topology</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>MPI topology</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/jipolanco/PencilArrays.jl/blob/master/docs/src/MPITopology.md#L" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="sec:mpi_topology"><a class="docs-heading-anchor" href="#sec:mpi_topology">MPI topology</a><a id="sec:mpi_topology-1"></a><a class="docs-heading-anchor-permalink" href="#sec:mpi_topology" title="Permalink"></a></h1><p>The <a href="#PencilArrays.Pencils.MPITopologies.MPITopology"><code>MPITopology</code></a> type defines the MPI Cartesian topology of the decomposition. In other words, it contains information about the number of decomposed dimensions, and the number of processes in each of these dimensions.</p><h2 id="Construction"><a class="docs-heading-anchor" href="#Construction">Construction</a><a id="Construction-1"></a><a class="docs-heading-anchor-permalink" href="#Construction" title="Permalink"></a></h2><p>The main <code>MPITopology</code> constructor takes a MPI communicator and a tuple specifying the number of processes in each dimension. For instance, to distribute 12 MPI processes on a <span>$3 × 4$</span> grid:</p><pre><code class="language-julia">comm = MPI.COMM_WORLD # we assume MPI.Comm_size(comm) == 12 | ||
pdims = (3, 4) | ||
topology = MPITopology(comm, pdims)</code></pre><p>A convenience constructor is provided that automatically chooses a default <code>pdims</code> from the number of processes and from the dimension <code>N</code> of decomposition grid. For instance, for a two-dimensional decomposition:</p><pre><code class="language-julia">topology = MPITopology(comm, Val(2))</code></pre><p>Under the hood, this works by letting <a href="https://www.open-mpi.org/doc/current/man3/MPI_Dims_create.3.php"><code>MPI_Dims_create</code></a> choose the number of divisions along each dimension.</p><p>At the lower level, <a href="#PencilArrays.Pencils.MPITopologies.MPITopology"><code>MPITopology</code></a> uses <a href="https://www.open-mpi.org/doc/current/man3/MPI_Cart_create.3.php"><code>MPI_Cart_create</code></a> to define a Cartesian MPI communicator. For more control, one can also create a Cartesian communicator using <code>MPI.Cart_create</code>, and pass that to <code>MPITopology</code>:</p><pre><code class="language-julia">dims = [3, 4] # note: array, not tuple! | ||
periods = zeros(Int, N) | ||
reorder = false | ||
comm_cart = MPI.Cart_create(comm, dims, periods, reorder) | ||
topology = MPITopology(comm_cart)</code></pre><h2 id="Types"><a class="docs-heading-anchor" href="#Types">Types</a><a id="Types-1"></a><a class="docs-heading-anchor-permalink" href="#Types" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="PencilArrays.Pencils.MPITopologies.MPITopology" href="#PencilArrays.Pencils.MPITopologies.MPITopology"><code>PencilArrays.Pencils.MPITopologies.MPITopology</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">MPITopology{N}</code></pre><p>Describes an N-dimensional Cartesian MPI decomposition topology.</p><hr/><pre><code class="nohighlight">MPITopology(comm::MPI.Comm, pdims::Dims{N})</code></pre><p>Create N-dimensional MPI topology information.</p><p>The <code>pdims</code> tuple specifies the number of MPI processes to put in every dimension of the topology. The product of its values must be equal to the number of processes in communicator <code>comm</code>.</p><p><strong>Example</strong></p><p>Divide 2D topology into 4×2 blocks:</p><pre><code class="language-julia">comm = MPI.COMM_WORLD | ||
@assert MPI.Comm_size(comm) == 8 | ||
topology = MPITopology(comm, (4, 2))</code></pre><hr/><pre><code class="nohighlight">MPITopology(comm::MPI.Comm, Val(N))</code></pre><p>Convenient <code>MPITopology</code> constructor defining an <code>N</code>-dimensional decomposition of data among all MPI processes in communicator.</p><p>The number of divisions along each of the <code>N</code> dimensions is automatically determined by a call to <a href="https://juliaparallel.github.io/MPI.jl/stable/topology/#MPI.Dims_create!"><code>MPI.Dims_create!</code></a>.</p><p><strong>Example</strong></p><p>Create 2D decomposition grid:</p><pre><code class="language-julia">comm = MPI.COMM_WORLD | ||
topology = MPITopology(comm, Val(2))</code></pre><hr/><pre><code class="nohighlight">MPITopology{N}(comm_cart::MPI.Comm)</code></pre><p>Create topology information from MPI communicator with Cartesian topology (typically constructed using <code>MPI.Cart_create</code>). The topology must have dimension <code>N</code>.</p><p><strong>Example</strong></p><p>Divide 2D topology into 4×2 blocks:</p><pre><code class="language-julia">comm = MPI.COMM_WORLD | ||
@assert MPI.Comm_size(comm) == 8 | ||
dims = [4, 2] | ||
periods = [0, 0] | ||
reorder = false | ||
comm_cart = MPI.Cart_create(comm, pdims, periods, reorder) | ||
topology = MPITopology{2}(comm_cart)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL8-L73">source</a></section></article><h2 id="Methods"><a class="docs-heading-anchor" href="#Methods">Methods</a><a id="Methods-1"></a><a class="docs-heading-anchor-permalink" href="#Methods" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="PencilArrays.Pencils.MPITopologies.get_comm-Tuple{MPITopology}" href="#PencilArrays.Pencils.MPITopologies.get_comm-Tuple{MPITopology}"><code>PencilArrays.Pencils.MPITopologies.get_comm</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">get_comm(t::MPITopology)</code></pre><p>Get MPI communicator associated to an MPI Cartesian topology.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL201-L205">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="PencilArrays.Pencils.MPITopologies.coords_local-Tuple{MPITopology}" href="#PencilArrays.Pencils.MPITopologies.coords_local-Tuple{MPITopology}"><code>PencilArrays.Pencils.MPITopologies.coords_local</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coords_local(t::MPITopology)</code></pre><p>Get coordinates of local process in MPI topology.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL194-L198">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.length-Tuple{MPITopology}" href="#Base.length-Tuple{MPITopology}"><code>Base.length</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">length(t::MPITopology)</code></pre><p>Get total size of Cartesian topology (i.e. total number of MPI processes).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL187-L191">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.ndims-Tuple{MPITopology}" href="#Base.ndims-Tuple{MPITopology}"><code>Base.ndims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">ndims(t::MPITopology)</code></pre><p>Get dimensionality of Cartesian topology.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL173-L177">source</a></section><section><div><pre><code class="nohighlight">ndims(p::Pencil)</code></pre><p>Number of spatial dimensions associated to pencil data.</p><p>This corresponds to the total number of dimensions of the space, which includes the decomposed and non-decomposed dimensions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/Pencils.jl#LL263-L270">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.size-Tuple{MPITopology}" href="#Base.size-Tuple{MPITopology}"><code>Base.size</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">size(t::MPITopology)</code></pre><p>Get dimensions of Cartesian topology.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/jipolanco/PencilArrays.jl/blob/5bab4bfd4ccc8da2505d448e71b1a96b6b89905a/src/Pencils/MPITopologies.jl#LL180-L184">source</a></section></article><h2 id="Index"><a class="docs-heading-anchor" href="#Index">Index</a><a id="Index-1"></a><a class="docs-heading-anchor-permalink" href="#Index" title="Permalink"></a></h2><ul><li><a href="#PencilArrays.Pencils.MPITopologies.MPITopology"><code>PencilArrays.Pencils.MPITopologies.MPITopology</code></a></li><li><a href="#Base.length-Tuple{MPITopology}"><code>Base.length</code></a></li><li><a href="#Base.ndims-Tuple{MPITopology}"><code>Base.ndims</code></a></li><li><a href="#Base.size-Tuple{MPITopology}"><code>Base.size</code></a></li><li><a href="#PencilArrays.Pencils.MPITopologies.coords_local-Tuple{MPITopology}"><code>PencilArrays.Pencils.MPITopologies.coords_local</code></a></li><li><a href="#PencilArrays.Pencils.MPITopologies.get_comm-Tuple{MPITopology}"><code>PencilArrays.Pencils.MPITopologies.get_comm</code></a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../Pencils/">Pencil configurations »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Friday 11 June 2021 06:58">Friday 11 June 2021</span>. Using Julia version 1.6.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> |
Oops, something went wrong.