Skip to content

Commit

Permalink
build based on 5bab4bf
Browse files Browse the repository at this point in the history
  • Loading branch information
Documenter.jl committed Jun 11, 2021
0 parents commit 5cb3ff2
Show file tree
Hide file tree
Showing 357 changed files with 308,678 additions and 0 deletions.
17 changes: 17 additions & 0 deletions dev/MPITopology/index.html
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>
Loading

0 comments on commit 5cb3ff2

Please sign in to comment.