build based on e7417b1

This commit is contained in:
Documenter.jl committed 2023-08-14 16:53:10 +00:00
1 parent ee83a685f3
commit 28923f533f
18 files changed
+464 -278

No files matched your search

+1 -1
View File
@@ -14,4 +14,4 @@ julia&gt; DataFrame(a=[1,2],b=[3,4])</code></pre><p>You should get an error or a
BenchmarkTools = &quot;6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf&quot;
DataFrames = &quot;a93c6f00-e57d-5684-b7b6-d8193f3e46c0&quot;
MPI = &quot;da04e1cc-30fd-572f-bb4f-1f8673147195&quot;</code></pre><p>Copy the contents of previous code block into a file called <code>Project.toml</code> and place it in an empty folder named <code>newproject</code>. It is important that the file is named <code>Project.toml</code>. You can create a new folder from the REPL with</p><pre><code class="language-julia hljs">julia&gt; mkdir(&quot;newproject&quot;)</code></pre><p>To install all the packages registered in this file you need to activate the folder containing your <code>Project.toml</code> file</p><pre><code class="language-julia hljs">(@v1.8) pkg&gt; activate newproject</code></pre><p>and then <em>instantiating</em> it</p><pre><code class="language-julia hljs">(newproject) pkg&gt; instantiate</code></pre><p>The instantiate command will download and install all listed packages and their dependencies in just one click.</p><h3 id="Getting-help-in-package-mode"><a class="docs-heading-anchor" href="#Getting-help-in-package-mode">Getting help in package mode</a><a id="Getting-help-in-package-mode-1"></a><a class="docs-heading-anchor-permalink" href="#Getting-help-in-package-mode" title="Permalink"></a></h3><p>You can get help about a particular package operator by writing <code>help</code> in front of it</p><pre><code class="language-julia hljs">(@v1.8) pkg&gt; help activate</code></pre><p>You can get an overview of all package commands by typing <code>help</code> alone</p><pre><code class="language-julia hljs">(@v1.8) pkg&gt; help</code></pre><h3 id="Package-operations-in-Julia-code"><a class="docs-heading-anchor" href="#Package-operations-in-Julia-code">Package operations in Julia code</a><a id="Package-operations-in-Julia-code-1"></a><a class="docs-heading-anchor-permalink" href="#Package-operations-in-Julia-code" title="Permalink"></a></h3><p>In some situations it is required to use package commands in Julia code, e.g., to automatize installation and deployment of Julia applications. This can be done using the <code>Pkg</code> package. For instance</p><pre><code class="language-julia hljs">julia&gt; using Pkg
julia&gt; Pkg.status()</code></pre><p>is equivalent to calling <code>status</code> in package mode.</p><pre><code class="language-julia hljs">(@v1.8) pkg&gt; status</code></pre><h2 id="Conclusion"><a class="docs-heading-anchor" href="#Conclusion">Conclusion</a><a id="Conclusion-1"></a><a class="docs-heading-anchor-permalink" href="#Conclusion" title="Permalink"></a></h2><p>We have learned the basics of how to work with Julia. If you want to further dig into the topics we have covered here, you can take a look at the following links:</p><ul><li><a href="https://docs.julialang.org/en/v1/manual/getting-started/">Julia Manual</a></li><li><a href="https://pkgdocs.julialang.org/v1/getting-started/">Package manager</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../notebooks/julia_basics/">Julia Basics »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
julia&gt; Pkg.status()</code></pre><p>is equivalent to calling <code>status</code> in package mode.</p><pre><code class="language-julia hljs">(@v1.8) pkg&gt; status</code></pre><h2 id="Conclusion"><a class="docs-heading-anchor" href="#Conclusion">Conclusion</a><a id="Conclusion-1"></a><a class="docs-heading-anchor-permalink" href="#Conclusion" title="Permalink"></a></h2><p>We have learned the basics of how to work with Julia. If you want to further dig into the topics we have covered here, you can take a look at the following links:</p><ul><li><a href="https://docs.julialang.org/en/v1/manual/getting-started/">Julia Manual</a></li><li><a href="https://pkgdocs.julialang.org/v1/getting-started/">Package manager</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../notebooks/julia_basics/">Julia Basics »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -2,4 +2,4 @@
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Home · XM_40017</title><script data-outdated-warner src="assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/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/favicon.ico" rel="icon" type="image/x-icon"/><script src="assets/iframeResizer.min.js"></script><link href="assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href><img src="assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href>XM_40017</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 class="is-active"><a class="tocitem" href>Home</a><ul class="internal"><li><a class="tocitem" href="#What"><span>What</span></a></li><li><a class="tocitem" href="#How-to-use-this-page"><span>How to use this page</span></a></li><li><a class="tocitem" href="#How-to-run-the-notebooks-locally"><span>How to run the notebooks locally</span></a></li><li><a class="tocitem" href="#Authors"><span>Authors</span></a></li><li><a class="tocitem" href="#License"><span>License</span></a></li><li><a class="tocitem" href="#Acknowledgment"><span>Acknowledgment</span></a></li></ul></li><li><a class="tocitem" href="getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="notebooks/solutions/">Solutions</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 class="is-active"><a href>Home</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Home</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/fverdugo/XM_40017/blob/main/docs/src/index.md#" 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="Programming-Large-Scale-Parallel-Systems-(XM_40017)"><a class="docs-heading-anchor" href="#Programming-Large-Scale-Parallel-Systems-(XM_40017)">Programming Large-Scale Parallel Systems (XM_40017)</a><a id="Programming-Large-Scale-Parallel-Systems-(XM_40017)-1"></a><a class="docs-heading-anchor-permalink" href="#Programming-Large-Scale-Parallel-Systems-(XM_40017)" title="Permalink"></a></h1><p>Welcome to the interactive lecture notes of the <a href="https://studiegids.vu.nl/EN/courses/2023-2024/XM_40017#/">ProgramminLine truncated
julia&gt; Pkg.add(&quot;IJulia&quot;)
julia&gt; using IJulia
julia&gt; notebook()</code></pre><ul><li>These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.</li></ul><h2 id="Authors"><a class="docs-heading-anchor" href="#Authors">Authors</a><a id="Authors-1"></a><a class="docs-heading-anchor-permalink" href="#Authors" title="Permalink"></a></h2><p>This material is created by <a href="https://github.com/fverdugo/">Francesc Verdugo</a> with the help of <a href="https://www.linkedin.com/in/gelieza/">Gelieza Kötterheinrich</a>. Part of the notebooks are based on the course slides by <a href="https://www.vuhpdc.net/henri-bal/">Henri Bal</a>.</p><h2 id="License"><a class="docs-heading-anchor" href="#License">License</a><a id="License-1"></a><a class="docs-heading-anchor-permalink" href="#License" title="Permalink"></a></h2><p>All material on this page that is original to this course may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p><h2 id="Acknowledgment"><a class="docs-heading-anchor" href="#Acknowledgment">Acknowledgment</a><a id="Acknowledgment-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgment" title="Permalink"></a></h2><p>This page was created with the support of the Faculty of Science of <a href="https://vu.nl">Vrije Universiteit Amsterdam</a> in the framework of the project &quot;Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course&quot; funded by the &quot;Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning&quot;.</p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="getting_started_with_julia/">Getting started »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
julia&gt; notebook()</code></pre><ul><li>These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.</li></ul><h2 id="Authors"><a class="docs-heading-anchor" href="#Authors">Authors</a><a id="Authors-1"></a><a class="docs-heading-anchor-permalink" href="#Authors" title="Permalink"></a></h2><p>This material is created by <a href="https://github.com/fverdugo/">Francesc Verdugo</a> with the help of <a href="https://www.linkedin.com/in/gelieza/">Gelieza Kötterheinrich</a>. Part of the notebooks are based on the course slides by <a href="https://www.vuhpdc.net/henri-bal/">Henri Bal</a>.</p><h2 id="License"><a class="docs-heading-anchor" href="#License">License</a><a id="License-1"></a><a class="docs-heading-anchor-permalink" href="#License" title="Permalink"></a></h2><p>All material on this page that is original to this course may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p><h2 id="Acknowledgment"><a class="docs-heading-anchor" href="#Acknowledgment">Acknowledgment</a><a id="Acknowledgment-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgment" title="Permalink"></a></h2><p>This page was created with the support of the Faculty of Science of <a href="https://vu.nl">Vrije Universiteit Amsterdam</a> in the framework of the project &quot;Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course&quot; funded by the &quot;Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning&quot;.</p></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="getting_started_with_julia/">Getting started »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+221 -122
View File
@@ -7476,12 +7476,12 @@ a.anchor-link {
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=1dc78750">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=1dc78750">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div>
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Printf</span>
@@ -7503,18 +7503,6 @@ a.anchor-link {
</div>
</div>
</div>
<div class="jp-Cell-outputWrapper">
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
</div>
<div class="jp-OutputArea jp-Cell-outputArea">
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[2]:</div>
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
<pre>jacobi_4_check (generic function with 1 method)</pre>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=d4cb59d5">
<div class="jp-Cell-inputWrapper" tabindex="0">
@@ -7522,7 +7510,7 @@ a.anchor-link {
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="The-Jacobi-method-for-the-Laplace-equation">The Jacobi method for the Laplace equation<a class="anchor-link" href="#The-Jacobi-method-for-the-Laplace-equation"></a></h2><p>The <a href="https://en.wikipedia.org/wiki/Jacobi_method">Jacobi method</a> is a numerical tool to solve systems of linear algebraic equations. One of the main applications of the method is to solve boundary value problems (BVPs). I.e., given the values at the boundary (of a grid), the Jacobi method will find the interior values that fulfill a certain equation.</p>
<h2 id="The-Jacobi-method-for-the-Laplace-equation">The Jacobi method for the Laplace equation<a class="anchor-link" href="#The-Jacobi-method-for-the-Laplace-equation"></a></h2><p>The <a href="https://en.wikipedia.org/wiki/Jacobi_method">Jacobi method</a> is a numerical tool to solve systems of linear algebraic equations. One of the main applications of the Jacobi method is to solve the equations resulting from boundary value problems (BVPs). I.e., given the values at the boundary (of a grid), we are interested in finding the interior values that fulfill a certain equation.</p>
</div>
</div>
</div>
@@ -7546,7 +7534,7 @@ a.anchor-link {
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>When solving a Laplace equation in 1D, the Jacobi method leads to this iterative scheme. The entry $i$ of vector $u$ at iteration $t+1$ is computed as:</p>
<p>When solving a Laplace equation in 1D, the Jacobi method leads to the following iterative scheme: The entry $i$ of vector $u$ at iteration $t+1$ is computed as:</p>
<p>$u^{t+1}_i = \dfrac{u^t_{i-1}+u^t_{i+1}}{2}$</p>
</div>
</div>
@@ -7558,16 +7546,16 @@ a.anchor-link {
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Serial-implementation">Serial implementation<a class="anchor-link" href="#Serial-implementation"></a></h3><p>The following code implements the iterative scheme above for boundary conditions -1 and 1.</p>
<h3 id="Serial-implementation">Serial implementation<a class="anchor-link" href="#Serial-implementation"></a></h3><p>The following code implements the iterative scheme above for boundary conditions -1 and 1 on a grid with $n$ interior points.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=14a58308">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=14a58308">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [6]:</div>
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="n">jacobi</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">niters</span><span class="p">)</span>
@@ -7588,24 +7576,12 @@ a.anchor-link {
</div>
</div>
</div>
<div class="jp-Cell-outputWrapper">
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
</div>
<div class="jp-OutputArea jp-Cell-outputArea">
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[6]:</div>
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
<pre>jacobi (generic function with 1 method)</pre>
</div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=76e1eba1">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=76e1eba1">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div>
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">jacobi</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
@@ -7614,25 +7590,6 @@ a.anchor-link {
</div>
</div>
</div>
<div class="jp-Cell-outputWrapper">
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
</div>
<div class="jp-OutputArea jp-Cell-outputArea">
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[14]:</div>
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
<pre>7-element Vector{Float64}:
-1.0
0.0
0.0
0.0
0.0
0.0
1.0</pre>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=6e085701">
<div class="jp-Cell-inputWrapper" tabindex="0">
@@ -7773,7 +7730,7 @@ d) The inner, but not the outer</code></pre>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Parallelization-of-the-Jacobi-method">Parallelization of the Jacobi method<a class="anchor-link" href="#Parallelization-of-the-Jacobi-method"></a></h2>
<h2 id="Parallelization-of-the-Jacobi-method">Parallelization of the Jacobi method<a class="anchor-link" href="#Parallelization-of-the-Jacobi-method"></a></h2><p>Now, let us parallelize the Jacobi method.</p>
</div>
</div>
</div>
@@ -7784,9 +7741,49 @@ d) The inner, but not the outer</code></pre>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Parallelization-strategy">Parallelization strategy<a class="anchor-link" href="#Parallelization-strategy"></a></h3><ul>
<h3 id="Parallelization-strategy">Parallelization strategy<a class="anchor-link" href="#Parallelization-strategy"></a></h3><p>We saw in the previous notebook that a sufficiently large grain size is needed to achieve performance in a distributed algorithm. For Jacobi, one could update each entry of vector <code>u_new</code> in a different worker, but this would not be efficient. Instead, we use a parallelization strategy with a larger grain size that is analogous to the algorithm 3 we studied for the matrix-matrix multiplication:</p>
<ul>
<li>Each worker updates a consecutive section of the array <code>u_new</code></li>
</ul>
<p>The following figure displays the data distribution over 3 processes.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a9667c42">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=3f90d701">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Data-dependencies">Data dependencies<a class="anchor-link" href="#Data-dependencies"></a></h3><p>Recall the Jacobi update:</p>
<p><code>u_new[i] = 0.5*(u[i-1]+u[i+1])</code></p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=210e80e7">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
@@ -7797,21 +7794,23 @@ d) The inner, but not the outer</code></pre>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Data-dependencies">Data dependencies<a class="anchor-link" href="#Data-dependencies"></a></h3><p>Recall:</p>
<p><code>u_new[i] = 0.5*(u[i-1]+u[i+1])</code></p>
<p>Thus, each process will need values from the neighboring processes to perform the update of its boundary values.</p>
<div class="alert alert-block alert-success">
<b>Question:</b> In order to update the entries u_new[r:s], which data from other process will be needed by the process that owns the entries u[r:s]? Note: r and s are integers indicating the first and last index owned by this process (see picture above).
</div>
<pre><code>b) Data at positions r-1 and s+1 </code></pre>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=428bce86">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=3c437326">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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86W2M4zntttuuzjJxW3nGMdJSW5pO8Q4FqbsfMxcF2XkD3clOiDFv/Y/enXbCcZ360urG0ymzmBy1cfaTjGBN9W3Up2Rwt7f7rjjjkfHCxYsWJzC8lFRUGeXLakK6ruS/FaqDz7D7khyTZIPppree2OSh+uv3T+NGQEAAHpSUGefzan2FvxekuNSXRP1nvrxpnfWNwAAgCIoqLPXziTfaTvEvrrnnnu+uHLlyqKP4XnZy162+JFHHhlIkvXr1++88847izpGNtW02eHf8d0Z2WNeivmpMibVXv2dLWbpx46JV6EQ52f0cVClWZDqj4dJma/9wST7N5ZLfO0vzsj1vHem7BP/7W47AH27MdVxkyVrzo57KMlQW0HGsCgj778Pp7DX/xlnnLHguOOO2y9Jli5dumf//fcv7f13lAsvvPDBtjO0QUGlSFdcccVQyvxQ1CQflKnoDxwzxANtB5iA9zemwp6U/9qS73FYt25d1q1b9+jydddd12IaxuIyMwAAABRBQQUAAKAICioAAABFUFABAAAogoIKAABAERRUAAAAiqCgAgAAUAQFFQAAgCIoqAAAABRBQQUAAKAICioAAABFUFABAAAogoIKAABAERRUAAAAiqCgAgAAUAQFFQAAgCIoqAAAABRBQQUAAKAICioAAABFUFABAAAogoIKAABAERRUAAAAiqCgAgAAUAQFFQAAgCIoqAAAABRBQQUAAKAICioAAABFUFABAAAogoIKAABAERRUAAAAiqCgAgAAUAQFFQAAgCIoqAAAABRBQQUAAKAI89sOAADQomclOS/JT5L8r5azAMx5CioAMJe9KsmqJPdEQQVonSm+AAAAFMEeVABgLvufSdYl2dp2EAAUVABgbvtafQOgAAoqADDXHJDk8K7H9iS5q4UsADQoqADAXPPiJH/T9dg9SY5qIQsADQoqADDX3J3k7+rxMUnObjELAA0KKgAw13y5viXJK5L8VYtZAGhwmRkAAACKoKACAABQBAUVAACAIiioAAAAFEFBBQAAoAgKKgAwl3Xq+4FWUwCQREEFAOa27fX9E+NzEUDrvBEDAHPZbfX9fkme3WYQABRUAGBu25Dk5nr8F0lel+T8+nZmW6EA5qr5bQcAAGjZbyf5lyRHJflo4/Hrk7yglUQAc5SCCgDMdXckOTXJa5KclmRp/fi/tZYIYI5SUAEAkp8m+UDbIQDmOsegAgAAUAQFFQAAgCIoqAAAABRBQQUAAKAICioAAABFUFABAAAogoIKAABAERRUAAAAiqCgAgAAUIT5bQeAXtasLine truncated
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="c"># TODO</span>
</pre></div>
</div>
</div>
</div>
@@ -7823,24 +7822,63 @@ d) The inner, but not the outer</code></pre>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Ghost-(aka-halo)-cells">Ghost (aka halo) cells<a class="anchor-link" href="#Ghost-(aka-halo)-cells"></a></h3><p>A usual way of handling this type of data dependencies is using so-called ghost cells. Ghost cells represent the missing data dependencies in the data owned by each process. After importing the appropriate values from the neighbor processes one can perform the usual sequential Jacobi update locally in the processes.</p>
<h3 id="Ghost-(aka-halo)-cells">Ghost (aka halo) cells<a class="anchor-link" href="#Ghost-(aka-halo)-cells"></a></h3><p>A usual way of implementing the Jacobi method and related algorithms is using so-called ghost cells. Ghost cells represent the missing data dependencies in the data owned by each process. After importing the appropriate values from the neighbor processes one can perform the usual sequential Jacobi update locally in the processes.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=cd1e3760">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=98e0eb71">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0148f9b3">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>Thus, the algorithm is usually implemented following two main phases at each iteration Jacobi:</p>
<ol>
<li>Fill the ghost entries with communications</li>
<li>Do the Jacobi update sequentially at each process</li>
</ol>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=baccd833">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6gAAAFACAYAAACxyVHuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15fFT19f/x12cmIQFkE1wANxBFrTu4b1itimQC2mKrtfrtRtXazbbWrmJba+1m7S5fv9Wqrbb5VWBugFatpe4buGvdFVcU2cISSOZ+fn+cO2QyTCAsmXszeT8fj/vIvXPv3Dm5M3PnnvvZ3DXXXOMRERERERERiVkq7gBEREREREREQAmqiIiIiIiIJERV0fLJzrlX4whEREREREREehbv/W7AP/PL7RJU59yrU6ZMeb7cQYmIiIiIiEjPM23aNLxv6xZJVXxFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBJBCaqIiIiIiIgkghJUERERERERSQQlqCIiIiIiIpIISlBFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBKhKu4ARDbGe+8aGxsvizuODbnuuusOWLhw4SCAhQsXvvbiiy++EndMRXYBRkbzy4H5McZSSn/g4ILlu4FcTLGUdPjhhx+dTqerAE455ZSnDjzwwEVxx9QR59yDdXV1s8rxWtls9nPOueHleK3NMXv27BFPPPHErgArV65c8thjjz0ed0xFBgEHFCzPjSmODRlXMP84sCSmODpyAHYcARYAL8cYy3pGjBixy7Bhw0YCbLvttsunTJmStPNvO+l0+vJTTz11TVe/ThAEewFndfXrbK7m5ub0L3/5y2Pyy88+++z8xYsXL48zphIOxn4/wT73C2KMpZQRwK7R/FLgsRhjWc/gwYMH7rXXXgfmly+55JK5MYazUWEY3jBx4sQX446jHJSgSuJddtllbsyYMd+NO44NeeGFF3jyySfzi8dsaNuEmBB3ABuRuGP4wAMPrJsfN25c4uIr5L3/LVCWBBX4DDC2TK+1yd577z3uvffewofq44qlkxL92SL58SXOK6+8wiuv2D3LUaNGQcLPv9XV1T8HujxB9d6Pds4l+re96NyR9M9+0uMDyMQdQKH333+/3XschuExqVRyK5em0+l7gR6RoCb3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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8b436c73">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h2 id="Efficiency">Efficiency<a class="anchor-link" href="#Efficiency"></a></h2>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=5c397005">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
@@ -8119,20 +8157,20 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Latency-hiding">Latency hiding<a class="anchor-link" href="#Latency-hiding"></a></h3><p>Note that we only need communications to update the values at the boundary of the portion owned by each process. The other values (the one in green in the figure below) can be updated without communications. This provides the opportunity of overlapping the computation of the interior values (green cells in the figure) with the communication of the ghost values. This technique is called latency hiding, since we are hiding communication latency by overlapping it with communications that we need to do anyway.</p>
<h3 id="Latency-hiding">Latency hiding<a class="anchor-link" href="#Latency-hiding"></a></h3><p>Can our implementation above be improved? Note that we only need communications to update the values at the boundary of the portion owned by each process. The other values (the one in green in the figure below) can be updated without communications. This provides the opportunity of overlapping the computation of the interior values (green cells in the figure) with the communication of the ghost values. This technique is called latency hiding, since we are hiding communication latency by overlapping it with communications that we need to do anyway.</p>
<p>The modification of the implementation above to include latency hiding is leaved as an exercise (see below).</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=5ae8701f">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7d66b1a2">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
@@ -8149,14 +8187,14 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=df867b3d">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=f14142ea">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
@@ -8170,6 +8208,7 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>For the Laplace equation in 2D, the interior values in the computational grid (represented by a matrix $u$) are computed with this iterative scheme. The entry $(i,j)$ of matrix $u$ at iteration $t+1$ is computed as:</p>
<p>$u^{t+1}_{(i,j)} = \dfrac{u^t_{(i-1,j)}+u^t_{(i+1,j)}+u^t_{(i,j-1)}+u^t_{(i,j+1)}}{4}$</p>
<p>Note that each entry is updated as the average of the four neighbors (top,bottom,left,right) of that entry in the previous iteration.</p>
</div>
</div>
</div>
@@ -8184,12 +8223,12 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=4ab59b2f">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=4ab59b2f">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [26]:</div>
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="n">jacobi_2d</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">niters</span><span class="p">)</span>
@@ -8215,24 +8254,12 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
</div>
</div>
<div class="jp-Cell-outputWrapper">
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
</div>
<div class="jp-OutputArea jp-Cell-outputArea">
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[26]:</div>
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
<pre>jacobi_2d (generic function with 1 method)</pre>
</div>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=6da0aa54">
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=6da0aa54">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea">
<div class="jp-InputPrompt jp-InputArea-prompt">In [25]:</div>
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="cm-editor cm-s-jupyter">
<div class="highlight hl-julia"><pre><span></span><span class="n">u</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">jacobi_2d</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
@@ -8241,30 +8268,6 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
</div>
</div>
<div class="jp-Cell-outputWrapper">
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
</div>
<div class="jp-OutputArea jp-Cell-outputArea">
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[25]:</div>
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
<pre>12×12 Matrix{Float64}:
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0</pre>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=45d786dd">
<div class="jp-Cell-inputWrapper" tabindex="0">
@@ -8272,7 +8275,7 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Where-do-we-can-exploit-parallelism?">Where do we can exploit parallelism?<a class="anchor-link" href="#Where-do-we-can-exploit-parallelism?"></a></h3><div class="highlight"><pre><span></span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">niters</span>
<h3 id="Where-can-we-exploit-parallelism?">Where can we exploit parallelism?<a class="anchor-link" href="#Where-can-we-exploit-parallelism?"></a></h3><div class="highlight"><pre><span></span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">niters</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">2</span><span class="o">:</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">2</span><span class="o">:</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="n">north</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">u</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
@@ -8299,78 +8302,174 @@ d) Yes, because there are no writes to the send buffer in this iteration.</code>
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Parallelization-strategies">Parallelization strategies<a class="anchor-link" href="#Parallelization-strategies"></a></h3>
<h3 id="Parallelization-strategies">Parallelization strategies<a class="anchor-link" href="#Parallelization-strategies"></a></h3><p>In 2d one has more flexibility in order to distribute the data over the processes. We consider these three alternatives:</p>
<ul>
<li>1D block partition (each worker handles a subset of consecutive rows and all columns)</li>
<li>2D block partition (each worker handles a subset of consecutive rows and columns)</li>
<li>2D cyclic partition (each workers handles a subset of alternating rows ans columns)</li>
</ul>
<p>The three partition types are depicted in the following figure for 4 processes.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7445dc4a">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e52959a5">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e0cee28b">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<p>Which of the thee alternatives is more efficient? To answer this question we need to quantify how much data is processed and communicated in each case. The following analysis assumes that the grid is of $N$ by $N$ cells and that the number of processes is $P$.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=f6ea16f5">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="1D-block-partition">1D block partition<a class="anchor-link" href="#1D-block-partition"></a></h3>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0cfeca62">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4600c94a">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<ul>
<li>We update $N^2/P$ items per iteration</li>
<li>We need data from 2 neighbors (2 messages per iteration)</li>
<li>We communicate $N$ items per message</li>
<li>Communication/computation ratio is $O(P/N)$</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=969c42ee">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Data-dependencies">Data dependencies<a class="anchor-link" href="#Data-dependencies"></a></h3>
<h3 id="2D-block-partition">2D block partition<a class="anchor-link" href="#2D-block-partition"></a></h3>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b343f4c1">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e5142fa1">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=df861921">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=091b0310">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<ul>
<li>We update $N^2/P$ items per iteration</li>
<li>We need data from 4 neighbors (4 messages per iteration)</li>
<li>We communicate $N/\sqrt{P}$ items per message</li>
<li>Communication/computation ratio is $O(\sqrt{P}/N)$</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=6f97781b">
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a8fb49a3">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="2D-cyclic-partition">2D cyclic partition<a class="anchor-link" href="#2D-cyclic-partition"></a></h3>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=1bc30b74">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<div>
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUUAAAFFCAYAAAB7dP9dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13nBxl/cffz+yVQAISShpFrChiQUGwgYJItWOkQ8rt7CUQkSKiIgvShYAhyd3sccQCCkHFgiggAnYEREUEpUpLgpqjhUtub+f7++PZyT47N7u3M7u3M/qb9+t1r+zMPjPzyczud5/yLQoQUlJSUlIAsOIWkJKSkpIkUqOYkpKSYtDh2z4Z+FMcQupwA7BJ+fXdwGkxagnCAV5bfj0EHBqjliBOAD5Wfi3AB2PUEsSbgcuM7ROB+2LSUoufA6r8+gfA5TFqCeK7wNTy64cBO0YtQVwI7FZ+PQwcEqOWIN4GXGLuEONvnzgUjcOLVPTdHLOWIO6lom91zFqCuJyKvlLMWoLYi+rP4F7xygmkREVf0gwi6M+dp+/emLUEcTMVfS/GrCWIfTA+g+nwOSUlJcUgNYopKSkpBqlRTElJSTFIjWJKSkqKgX/1uR4K2MK372VgQ4hzdAJTfPteBEZDnKMeFvAK374kacwAm/v2rQNGQpyjC5js2/cCrVlEmYL+/3uMEn5ifAsqK7Wg7/3LTeqC4OcS9v+9CTDJt2+oGVE+WvFsUo36O2x22EbQ35NGCbJVw8D6Rk/Q6OqzAr7va3830B1C7NW+4++j4m5TizCrzwq43neNu9AfhEb5tu/4v4yjMczqswXc4jv/7Whj2QgW8DPf8b+n2pD5CbP6/CnfuUeAPRvUBtrVwjWOLwLvHueYRlefNwP+7mvbF0LbFOAB3/GDDR7b6OrzFsAjvmssa1LjQAPHhVl93gJ41HeNMCvqU4AHfcc74xwTdvX5877zrwV2DKHxJN/xzwGvrtN+H1/7UC45QTf0srpHVOj1HfcS8MYGjgvrkjMVeMx3rcUNalzoO+5F4A3jHBPWJWc68IzvOvkG9X2B8B+WsC45fb5rPMzY3ncQ2wP/9h17SgPHhXHJeQf6195sf0QD1wD4pu+4+4FNGzw2jEvObujesXmtwxu8zrd8x/21QY1hXXJ2D9D4iQY1XuU77r4GNIY1igr4ke86d1L/x98j6P823v1vyigGXdQFPj7OMW9GD6HMax3dwLUgmp/iOwM0fqzuEcEaj2rgWlH8FD+AHpqaxmo8p+o90T038//00QauFdYodgN/pPo+rBznmA7gN75jbqR6GF2LsH6Kn/G1fxHYaZxj5vmOGQbe2oA2j7B+iif6rjdeTwVgfoDGtzSoL4qfor83NQS8apxjsr5jGu3YRPFT3AZ4yne9C8Y5JqjTtrSBazVtFEH3ABq9oZOJPmyB6M7bn/Nds16vKuqwBaI7b5/ru95qYEaNtlOBx33tL6nR1k8U5+3XAs/7rper0/6rvrZPAVs3eK2wRjHsNM6b0PNRZvt5DWrzCGsUw07jBGmcE0JfFKMYpPEPdTTuEqDx2AavFdV5ey+qOw8u8OE67b/j0zfe1JdHS4yiQoc7mcfeSfAN9Q9b/o6eH2qUqEZRAT9sUGPUYQtEN4oZ4FbfdX/B2PnFoHtd78PrJ2pEy6d91xwGdg1odyDV84glwkVGRYloaXQaZxLwZ1+7a0Jo84gS0dLoNM5k9FC+GY1RI1qCNF5cQ+PffO2+E+I6zUS0nOG77rPAtgHtjve1a2Tqy6MlRhGCey8X+do0O2yB5sL8tgzQeKGvTTPDFmguzG9b4F++63/B1+Zk3/uNDHNMmgnzu8J37X9QvXq+XYD+L4W8RtQwv0amca70nfshxq7+N0LUML9GpnG+3gKNzYT5BWn0T8t8g7GfgzAdm2aMouU7XoA7qO48vIVoU18eLTOKAHswdp7rI+X3goYE80OeH5qPfX4fehW0UY1zQ56/2dhnf09rlMpziDJp7KcZozgJnSAkqBfTAfzK995tNL6S7tFM7HO9aRx/T3c9wT3dRmgm9vlUnw5zGuewFmlsNvb5tACNryy/N8f33jA6gUIYmo19nsbYxcmzyu8FrYY3OvXl0VKjCHC67xz/QU98+4ct10Y4N7QmIcQXAzS+keaHLdCahBAX+XQ8iZ7XizJp7KfZhBCvR/uxmTrmAOf59q0BZkY4fzNGsdY0zpsYOye6III2j2aMYj2N/vtab962Hs0axaCppt/X0JiNcP5WJIR4P2MXJ/ejuakvj5YbxSDfOX/vK2x326QVRtECbhpH44OMdQ5uhFYYxU7gt+Pou5exDrON0IosOcf5tAxTbSgaWT2vRbNZcrYCnqD+vbsuojaPZrPkbI3+oauncbwV/nq0IkvO1oxd7fVrjNJpgNZlyTlrHH3rgJ0jnLflRhGCl8+9v/XA2yOeF1qXOmwa8HQdjVGHVq1KHRbk52d+kBqdNPbTqtRhX6+hTYCzmzhvK1KH+adxzL9/oueWm6EVqcP8LlXm3yM05gtai1alDvNPNZl/jfqrBtEqo2ihc1vW+hyGWbE3mRCjCGOXz72/hU2cE1qbT3FvgjX2NnHOVuZTPJjq+UXvL8yksZ9WGcWgFUgBfkm4cFE/rcqn6J/GEbQRelcT2jxalU/R73zvaQwTNRREK/MpfomxGtejHeej0sp8itOBVQEao/ZiYQLzKa5jbHzwerQvVFJYx1jDMIye80kC69BG0eQ5tCN03BQJjj9dSeti15shKPb2QbR/YFII0vgA2s8yKdTS+Od2C6lBkeBcAd9s5UVa0VMMWgHy/m4n/IqkSat6ilMYGzvbCo2t6inWm4K4gcaiQ4JoVU/x0hraGo1qqEUreoq7MNYlw/s7twltHq3oKQZFTHl/5zSpr1U9xXoam5kiaVVPMcjh3Pzu1Qp+GI8JGT774yH9f2dGPC+0zij6k1H4/86IeN5WGMWgWE//36KI526FUaw1rPf+GknsUYtmjWKtYb35f/5QRG0ezRrFoKguv8b9mtDXCqMYFNXVKo2tMor+8En/30+J1nlouVH0x0O+iC6WZH6QRtFL6lFohVHM+TS+UNbo9w/cO8K5W2EU/X5i/2ZsbGrUeZ1mjeIOaBcmU8tZ6Il3c1+YjDUmzRpFv2PxfYx1cWqmFwHNG0W/28h9jA2NbEZjK4yiv2PzZ3R0i7lvFXpOLyytMIpBiTZORPtUmvtOjXDulhrFIOdnL9HDBbTmoTdrFIOGVt7Chf/LEyZm16NZo1gvosDx6XuY8NEOzRjFDuDXPg1eoodmssGYNGMUj/Md60UjWYwNobyN6FMkzRjFuT4dL6HdRlqpsVmj6I8886ZEghz0g0JRx6NZoxg09eU9hyjp6vy0zCgGxWyaiR6CvlA/JXy272aMYtDQyvR2bya7i0czRnG82NNJvvML4Z3gmzGK/h82/4/GZ33vN5INxk9UoxjkVG5GIwWFUEadIolqFGs5vtfT+MUI+poxikEdm2ON94NCOU8PeY1mjaJ/6suf6GGJ7/0n0P6rjdIyo/h137FBiR6CfO8+F+Ia0JxR9A+tgnLobc/Y4WEjeQA9ohrFRjOpvI6xX6yeENeJahQPYKyDtv/zERStETapbxSjGBR+GPRj0WyyCo8oRrFeiGQ9jWaYZ6NENYpBCTOCEj0cxNje2HtDXKcZo+jPwxrks9sN3ONr92Ma79y0xCj6YzbrJXpotnsb1SgGxWyG0diof1tUoxgm516Y/4ufKEYxyBesVi+rmbRmEM0oFnzH1Eui0ExaM48oRnEghEb/3N2TITVGNYqDvuvWizxbHKCx0d5YVKMYNPVVKw9rULq74xu8TtNGMUrP5Wu+9mG6t1GMYtCwZbwceqbxEBqPhIhiFIMySI83H+fv9Taagi2sUQyKGriN+vNIQYlBGkmAC+GN4mxf+/EiploxRRLWKAZprBcxFRTm+ZMQGqMYxUZTw9XT2KirWBSjGDT1NV4e1rCfDY+mjGLQHFcjMZvNdG/DGsVGh1aNaPxuA8eFNYpBk8bLGzguarLesEYx77vGGmBWA8cFlUp4ZQPHhTGKryFabyBoiuTkBo7zCGMUg3osjSSjCFrlP6lBfWGNYtgkwqZG/2rviQ0cF8UoRu0E+NPdNZKKrSmj2O9rHyYeMuoHOqxRDDO08hPlAx3WKEYp3uURpaxDGKO4N2MzkTTq4xeUdKOREMBGjWKz80af9B0bJgSwUaMY9Ye1WY1hjGJQuYkwCTMODdA4XphiWKPYzHRRlE5RZKMYVOltjwaFekTp3oYxilG7z+Odo96wIoxR9PtLRokGWeA7x3jJIho1itswNmFG2GiQoLx3XxnnmEaNYrMrjKBTr5nnaHSKpFGjGPX8JssjnCOMUVzWAo1hi5uFMYpBU19hFhYhfAmKKqMYJpD/PrRvmscL6F5YGFaiwwHNqlz/CXmOevyFidG4tkldHr+iWt8QOmdiGJYDv6PatemlJnWB7nF9xLcvbLzrs2i/S9PB1x/LHQWF9nb4hrHvGcJ/dk4GVgScuxVY5XOb53+G8J+dzzJ2WqSVGq8s/3lE1XiFb18zSUFMhtGF3TxcwrsZ3Y/2VzVrPzdc8znMf+TBEG3r8ZcWnSeIpGu8v0XnaTYTShDPlv+a5anyXysR9JCvWTagh7cTgduic/83aFzfovME8WT5r1keiXpgK7PkpKSkpPzXkxrFlJSUFIPUKKakpKQYpEYxJSUlxSA1iikpKSkGirKzYhmvSluSMCvsuWjn5SQxmWqXiVa4x7SSSVR7GSRNXwfVVQrXk4zyBibmZ3CUEO4dbcLUJwSXjYiTTWm9C1kryWAEUPiNYkpKSsr/a9Lhc0pKSoqB33n7boKrecXJvlSM9/PAH2LUEsR7qORoHEVnlEkSuwAzje1b4hJSLine truncated
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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 truncated
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=c45f4e44">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<ul>
<li>We update $N^2/P$ items</li>
<li>We need data from 4 neighbors (4 messages per iteration)</li>
<li>We communicate $N^2/P$ items per message (the full data owned by the neighbor)</li>
<li>Communication/computation ratio is $O(1)$</li>
</ul>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=850b1848">
<div class="jp-Cell-inputWrapper" tabindex="0">
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
</div>
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
<h3 id="Complexity-analysis">Complexity analysis<a class="anchor-link" href="#Complexity-analysis"></a></h3><p>The complexity analysis is let as an exercise (see below).</p>
<h3 id="Which-partition-is-the-best-one?">Which partition is the best one?<a class="anchor-link" href="#Which-partition-is-the-best-one?"></a></h3><ul>
<li>Both 1d and 2d block partitions are potentially scalable if $P&lt;&lt;N$</li>
<li>The 2d block partition is with the lowest communication complexity</li>
<li>The 1d block partition requires to send less messages (It can be useful if the fixed cost of sending a message is high)</li>
<li>The best strategy for a given problem size will thus depend on the machine, but the 2d block partition is the one used in practice since it has the lowest communication complexity.</li>
<li>Cyclic partitions are impractical for this application (but they are useful in others)</li>
</ul>
</div>
</div>
</div>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+227 -140
View File
@@ -35,21 +35,10 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"id": "1dc78750",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"jacobi_4_check (generic function with 1 method)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"using Printf\n",
"\n",
@@ -75,7 +64,7 @@
"## The Jacobi method for the Laplace equation\n",
"\n",
"\n",
"The [Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method) is a numerical tool to solve systems of linear algebraic equations. One of the main applications of the method is to solve boundary value problems (BVPs). I.e., given the values at the boundary (of a grid), the Jacobi method will find the interior values that fulfill a certain equation.\n",
"The [Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method) is a numerical tool to solve systems of linear algebraic equations. One of the main applications of the Jacobi method is to solve the equations resulting from boundary value problems (BVPs). I.e., given the values at the boundary (of a grid), we are interested in finding the interior values that fulfill a certain equation.\n",
"\n"
]
},
@@ -94,7 +83,7 @@
"id": "93e84ff8",
"metadata": {},
"source": [
"When solving a Laplace equation in 1D, the Jacobi method leads to this iterative scheme. The entry $i$ of vector $u$ at iteration $t+1$ is computed as:\n",
"When solving a Laplace equation in 1D, the Jacobi method leads to the following iterative scheme: The entry $i$ of vector $u$ at iteration $t+1$ is computed as:\n",
"\n",
"$u^{t+1}_i = \\dfrac{u^t_{i-1}+u^t_{i+1}}{2}$"
]
@@ -106,26 +95,15 @@
"source": [
"### Serial implementation\n",
"\n",
"The following code implements the iterative scheme above for boundary conditions -1 and 1."
"The following code implements the iterative scheme above for boundary conditions -1 and 1 on a grid with $n$ interior points."
]
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": null,
"id": "14a58308",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"jacobi (generic function with 1 method)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"function jacobi(n,niters)\n",
" u = zeros(n+2)\n",
@@ -144,28 +122,10 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": null,
"id": "76e1eba1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7-element Vector{Float64}:\n",
" -1.0\n",
" 0.0\n",
" 0.0\n",
" 0.0\n",
" 0.0\n",
" 0.0\n",
" 1.0"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"jacobi(5,0)"
]
@@ -295,7 +255,8 @@
"metadata": {},
"source": [
"## Parallelization of the Jacobi method\n",
"\n"
"\n",
"Now, let us parallelize the Jacobi method."
]
},
{
@@ -305,8 +266,53 @@
"source": [
"### Parallelization strategy\n",
"\n",
"We saw in the previous notebook that a sufficiently large grain size is needed to achieve performance in a distributed algorithm. For Jacobi, one could update each entry of vector `u_new` in a different worker, but this would not be efficient. Instead, we use a parallelization strategy with a larger grain size that is analogous to the algorithm 3 we studied for the matrix-matrix multiplication:\n",
"\n",
"- Each worker updates a consecutive section of the array `u_new` \n",
"\n"
"\n",
"The following figure displays the data distribution over 3 processes."
]
},
{
"attachments": {
"fig09.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "a9667c42",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "3f90d701",
"metadata": {},
"source": [
"### Data dependencies\n",
"\n",
"Recall the Jacobi update:\n",
"\n",
"`u_new[i] = 0.5*(u[i-1]+u[i+1])`"
]
},
{
"attachments": {
"fg10.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "210e80e7",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
@@ -314,24 +320,21 @@
"id": "c4e2d000",
"metadata": {},
"source": [
"### Data dependencies\n",
"<div class=\"alert alert-block alert-success\">\n",
"<b>Question:</b> In order to update the entries u_new[r:s], which data from other process will be needed by the process that owns the entries u[r:s]? Note: r and s are integers indicating the first and last index owned by this process (see picture above). \n",
"</div>\n",
"\n",
"Recall:\n",
"\n",
"`u_new[i] = 0.5*(u[i-1]+u[i+1])`\n",
"\n",
"\n",
"Thus, each process will need values from the neighboring processes to perform the update of its boundary values."
" b) Data at positions r-1 and s+1 "
]
},
{
"cell_type": "markdown",
"id": "428bce86",
"cell_type": "code",
"execution_count": null,
"id": "3c437326",
"metadata": {},
"outputs": [],
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
"# TODO"
]
},
{
@@ -341,19 +344,58 @@
"source": [
"### Ghost (aka halo) cells\n",
"\n",
"A usual way of handling this type of data dependencies is using so-called ghost cells. Ghost cells represent the missing data dependencies in the data owned by each process. After importing the appropriate values from the neighbor processes one can perform the usual sequential Jacobi update locally in the processes."
"A usual way of implementing the Jacobi method and related algorithms is using so-called ghost cells. Ghost cells represent the missing data dependencies in the data owned by each process. After importing the appropriate values from the neighbor processes one can perform the usual sequential Jacobi update locally in the processes."
]
},
{
"attachments": {
"fig13.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAADyCAYAAABAvOgkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7d15nFxVnffxT1V3E7IRIIAkSIghJGwqEBBNREXUYWtgRB0JjuO4wKA4rjg8w4yAs4DgPKO4PCaiDD4oDoGAdGQRCAgiGiYsAmISQJAQ1kBCyNLpdN/541R3365Ur+muc6r783696pV7qu6t+0tV9e3+1jn33MK8efMyJEmSJEmKrBi7AEmSJEmSwIAqSZIkSUpEfVn7LwqFwpMxCpEkSZIkjSxZlk0Fbm5vdwmohULhydNOO215tYuSJEmSJI088+fPJ8s6p0VyiK8kSZIkKQkGVEmSJElSEgyokiRJkqQkGFAlSZIkSUkwoEqSJEmSkmBAlSRJkiQlwYAqSZIkSUqCAVWSJEmSlAQDqiRJkiQpCQZUSZIkSVISDKiSJEmSpCQYUCVJkiRJSTCgSpIkSZKSYECVJEmSJCXBgCpJkiRJSoIBVZIkSZKUBAOqJEmSJCkJBlRJkiRJUhIMqJIkSZKkJBhQJUmSJElJMKBKkiRJkpJgQJUkSZIkJcGAKkmSJElKggFVkiRJkpSE+tgFSJKkmncM8E5gGXBZ5FokSTXMgCpJkrbVO4F/AG5g4AG1AXgjcCgwC5hWun8xcMG2FihJqg0GVEmSFNtM4EFgVIXHXqhyLTF8Evg74H7gU5FrUWWXEb5A+TZweeRapGHNgCpJkrbVT4ClwLMD3H47QjhtA1aUnutIYNKgVJe+SYRe4/VV2t/2wDtK+2zvsd6r9NhlwMerVEct2ZfwOu1epf3tRhiZ0P7+zAJ2LD32QeDqKtUhVZ0BVZIkbauHSreBehp4F6EH8dXSfUsYOQG12g4Ebo5dhHp0BnBe7CKkGAyokiRpW+1B6FlaCzw2gO3XAL8a1Ipqy8XAd4At/dzuMODdhOHRN/Vz2/XAA4Te6qXAuXSe96utvY/wd/PGfm73YULv9ELC6ID+eJ7O92clMK+f20s1yYAqSZK21WfpnCTpuMi11KJNpVt/vQO4EJhP/wLqA8AEoDV335cGsP+RZN0At/sU4UuEP9K/gHohcH6uvecA9y/VHAOqJElSXLOBIwhDnX9ahf31t6dW8NfAZOAO4HdV2F9zFfYhJakYuwBJkqQR7ihCj9npsQtRtz5NeI/eFbkOadgzoEqSJEmSkmBAlSRJkiQlwXNQJUnSUDkWeH2F+9cC/13lWiRJNcCAKkmShsrnCJfnKLcCA2pfHUC4BEwlM0r/vge4qpt15gO3DnZR6uIjwAndPHZg6d+zgFO7WecMYPVgFyXVKgOqJEkaKjcAT1a4/4Uq11HLdgU+2Ms60+j+Gqa3YUAdam+i9/doTg+PfXEQa5FqngFVkiQNlW/FLmAYWE73s/u+F/gAcBdwRTfr3DUURamLa4DHunnsi8BM4HvAg92s88pQFCXVKgOqJElSulYRhulWMp4QUB/tYR0Nvd/R/bVR/4oQUH8J/LxqFUk1zFl8JUmSJElJsAdVkiSl4KvAHrn21NK/bwHm5e6/r6wtSRpGDKiSJCkFHwDeWOH+6aVbu2swoErSsGVAlSRJ2+omwkQvT2zDc3yTMGNtb5Ztwz7U6Ra6zvzbfr3aDwDvzN3fBHy+WkWpw17A4lw7/zf7d4Cv59pfxPNbNYwYUCVJ0ra6o3TbFj/a9jLUD3tS+dI040u3drtVpxyVaaD7Swe9rqw9bohrkarKgCpJkhTXpYRrxr7Wz+2uIHwx8NIA9nkysH0f1nt5AM89HP0tMBZ4pp/bnUEI/I/3c7ungUP7uO6f+vncUtIMqJIkSXE9W7r11/Ol20A8MsDtRqo/DnC75QPcrhlYOsBtpZrmZWYkSZIkSUkwoEqSJEmSkmBAlSRJkiQlwYAqSZIkSUqCAVWSJEmSlAQDqiRJkiQpCV5mRsnLsqywaNGi/l4brqrOPffcUY888kgdwJYtW1paW1tbYtdUpqF0A2gDNkWspZIiXa/HtyFWId3ZbrvtRhcKhQLAWWed1Xz44Ye3xq6pB99vbGz8UjV21NTUdCcwqxr7Gogrrrii4brrrmsAaGtra21paWmOXVOZOmBUrp3cZx8Yk1tuBlL77I8ivI4ALaVbMurq6hrq6+sbAKZNm9Z20UUXpXb87aKurm7Sscce++pQ72fRokXHZVl21VDvZ6Cam5s59dRTOz77mzdv3pRlWVvMmipI+rNP1789WgnHj2QUi8ViQ0NDx98eCxYs2FD6NZ+qExobG2+LXUQ1GFCVvPPPP78wa9asMb2vGU9LSwvNzR3H3fwBOUVFuv7BmaLk6tu8eXPHcpZlo3pYNQVVqy/LstGFQiG596tda2tr/mezjgQ/W2VSry/1z35yx9/W1lZaW0Omb2lpSf7429DQUJW/0Nva2upTPnZkWZY/dkDXL1FTlNxnv0xyx9+2trYu73GWZWNSDqiFQmHE5DaH+EqSJEmSkjBikriGjyzL/qlQKPw+dh15mzdvvhIYC7DPPvs8umLFin+IXFK5rwEHlZY3AR+KWEsl7wPOzLU/CqyJVEtFDQ0N17e0hNFTK1euvBr4cdyKtnIOcHjkGn4MXB25hi5efvnli4B9ASZNmvTas88+OzdySeX+EvjbXPtEIItUS3eu71zcdxEceEe0Siq69mvQ2t4zsww4K2Y15WbMmHH+8uXLDwbYsqVt8913T/rH2DXl7bbbxj332WfN5yKX0Qx8MHINXaxdu3ZHcsf5yZPfe9WqVROWRCypgoX/Bm3toxoeBP45ZjUVfB3Yr7S8HjglYi1bmTlz5onLli37RHu7ubn5/aNHj94Ss6YKrmMEdigaUFWL7mlsbFwcu4i86dOnd5z3scsuu7yyYsWKppj1VPD3ueVWILX6XlfW/iXwfIxCulMsdv5+eP755x9rbGxM6jVctGjRJ7Iseq75Y2qvy+zZszvCwNixY1tI77M/s6y9iHCeeKL2fBIW3BW7iq4a8n9QvkJi7/Huu+9+5vLlywFoa2tru/DCWUm9fh//+B/232ef6N8HtqZ27DjllFO6/F7aZZc5K1atOjep9w7q88eKl0jssw/kv6xP7vg7Y8aM6cuWLetoL1iw4BcLFizY3MMmVdfUlNRLVjUjLpFLkiRJktJkQJUkSZIkJcGAKkmSJElKggFVkiRJkpQEA6okSZIkKQkGVEmSJElSEgyokiRJkqQkGFAlSZIkSUkwoEqSJEmSkmBAlSRJkiQlwYAqSZIkSUqCAVWSJEmSlAQDqiRJkiQpCQZUSZIkSVISDKiSJEmSpCQYUCVJkiRJSTCgSpIkSZKSUB+7AA2ZHYC/yLUXAq29bFMHvD/X/iWwdpDrkiRJkqSKDKjD157AVbn2GGBjL9s0lG3zRgyokiRJkqrEIb6SJEmSpCQYUCVJkiRJSTCgSpIkSZKSYECVJEmSJCXBgCpJkiRJSoIBVZIkSZKUBAOqJEmSJCkJBlRJkiRJUhIMqJIkSZKkJBhQlVeIXYAkSZKkkcuAOny1lbXr+rDNDkNRiCRJkiT1hQF1+FpX1u5L+NxnKAqRJEmSpL4woA5fq4HWXHu/Pmxz3BDVIkmSJEm9MqAOXxuBP+baJ/Wy/mTg9KErR5IkSZJ6ZkAd3m7ILX8KOKSb9XYFrgN2GvKKJEmSJKkbBtThbR6wqbQ8Crgd+CpwOOF80yOA84FHgcOAGyPUKEmSJEkA1McuQEPqceBs4Jul9g6EQHp+hXXvAz4KvFid0gauUChc1NTU9ErsOvLOPvvsce3LDz/88P7ALRHLqSTfe7496dW3R1n7KmBzjEK609LS0rG8//77f/gzn/nMoRHL2UqWZW+OXQPw8aampnfHLiLv0ksv7Tj//plnnhlHep/9vcraN0epos/uOREmviV2FV21jsk19iOx9/j+++8/uH25vr5uu5/+9OZvx6ynXH19NjZ2DcD2TU1NSb1v69ev3+7KK6/saC9b9t25cMl7I5ZUQdt2ucbBJPbZBw7ILSd3/F28ePGUfHvu3Lk3fPSjH81i1dONEdmZaEAd/r5F6EW9ENixwuOtwGXA59j60jSpmhW7gHLFYufxY926dTsC74lXTa/qSLs+gHfELqBcW1vnj8fo0aOnAlNj1ZKw6aVbMhoaGjqWN27c2ED6n/3E63ttT2DP2FX0YAKJvYbr1nVOql8sForjx7ckFvCTUCSx962uruvV+ZqbX3wD8IY41fTJziT2GpapJ7H61q9f36VdLBaPilSKyhhQR4Z5hB6pY4FDgYnAy4Qe1oXAM6X1CsDeue1WVrFGSZIkSSOcAXXkeAX4SenWnQx4ojrl9N25556bLVq06MLYdfRk+vTpbx4/fvxOAM8///xTjz/++J9i11RmCjCttLwWuD9iLZXsQNdhyHfR9TJJ0R1++OFvr6urqwcYNWrUw8BLkUvqVqFQuKeK+/ov4NZq7a+/dt111zfMnj17L4B169a98tBDDz0Yu6YyOwIH5dp3RKqjJ+/KLT8ArIlUR3feTOckf08BSR1/p06dOmXy5MnTAHbeeedXCafUJKulpWVT72ttu2KxuDzLsmR/txcKhbrZs2cf0d5+5JFH7lu7du2rMWuq4GDCqAEIn/unItZSyVQ6RxutIRw/kjFx4sQdZ86c2XH8LRaLd0Qsp1dZliX3N/pQKcybN69jrHWhUJh52mmnLY9ZkCRJkiRpZJg/f/6MLMuWtbdH5Im3kiRJkqT0GFAlSZLSNxkYHbsISRpqBlRJkqT0fQpYQddLd0jSsGNAlSRJSt9iwoQ4vwLOilyLJA0ZA6okSVL6lgAbCJeK+3fCjM87xyxIkoaCAVWSJCl9zcBrpeV64B3AQ6V/VVv2xL/BpW75wyFJklQbbsotFwgTJy0EvgHURalI/bUbLine truncated
}
},
"cell_type": "markdown",
"id": "98e0eb71",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "cd1e3760",
"id": "0148f9b3",
"metadata": {},
"source": [
"Thus, the algorithm is usually implemented following two main phases at each iteration Jacobi:\n",
"\n",
"1. Fill the ghost entries with communications\n",
"2. Do the Jacobi update sequentially at each process"
]
},
{
"attachments": {
"fig15.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAFACAYAAACxyVHuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15fFT19f/x12cmIQFkE1wANxBFrTu4b1itimQC2mKrtfrtRtXazbbWrmJba+1m7S5fv9Wqrbb5VWBugFatpe4buGvdFVcU2cISSOZ+fn+cO2QyTCAsmXszeT8fj/vIvXPv3Dm5M3PnnvvZ3DXXXOMRERERERERiVkq7gBEREREREREQAmqiIiIiIiIJERV0fLJzrlX4whEREREREREehbv/W7AP/PL7RJU59yrU6ZMeb7cQYmIiIiIiEjPM23aNLxv6xZJVXxFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBJBCaqIiIiIiIgkghJUERERERERSQQlqCIiIiIiIpIISlBFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBKhKu4ARDbGe+8aGxsvizuODbnuuusOWLhw4SCAhQsXvvbiiy++EndMRXYBRkbzy4H5McZSSn/g4ILlu4FcTLGUdPjhhx+dTqerAE455ZSnDjzwwEVxx9QR59yDdXV1s8rxWtls9nPOueHleK3NMXv27BFPPPHErgArV65c8thjjz0ed0xFBgEHFCzPjSmODRlXMP84sCSmODpyAHYcARYAL8cYy3pGjBixy7Bhw0YCbLvttsunTJmStPNvO+l0+vJTTz11TVe/ThAEewFndfXrbK7m5ub0L3/5y2Pyy88+++z8xYsXL48zphIOxn4/wT73C2KMpZQRwK7R/FLgsRhjWc/gwYMH7rXXXgfmly+55JK5MYazUWEY3jBx4sQX446jHJSgSuJddtllbsyYMd+NO44NeeGFF3jyySfzi8dsaNuEmBB3ABuRuGP4wAMPrJsfN25c4uIr5L3/LVCWBBX4DDC2TK+1yd577z3uvffewofq44qlkxL92SL58SXOK6+8wiuv2D3LUaNGQcLPv9XV1T8HujxB9d6Pds4l+re96NyR9M9+0uMDyMQdQKH333+/3XschuExqVRyK5em0+l7gR6RoCb3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 truncated
}
},
"cell_type": "markdown",
"id": "baccd833",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6gAAAFACAYAAACxyVHuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15fFT19f/x12cmIQFkE1wANxBFrTu4b1itimQC2mKrtfrtRtXazbbWrmJba+1m7S5fv9Wqrbb5VWBugFatpe4buGvdFVcU2cISSOZ+fn+cO2QyTCAsmXszeT8fj/vIvXPv3Dm5M3PnnvvZ3DXXXOMRERERERERiVkq7gBEREREREREQAmqiIiIiIiIJERV0fLJzrlX4whEREREREREehbv/W7AP/PL7RJU59yrU6ZMeb7cQYmIiIiIiEjPM23aNLxv6xZJVXxFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBJBCaqIiIiIiIgkghJUERERERERSQQlqCIiIiIiIpIISlBFREREREQkEZSgioiIiIiISCIoQRUREREREZFEUIIqIiIiIiIiiaAEVURERERERBKhKu4ARDbGe+8aGxsvizuODbnuuusOWLhw4SCAhQsXvvbiiy++EndMRXYBRkbzy4H5McZSSn/g4ILlu4FcTLGUdPjhhx+dTqerAE455ZSnDjzwwEVxx9QR59yDdXV1s8rxWtls9nPOueHleK3NMXv27BFPPPHErgArV65c8thjjz0ed0xFBgEHFCzPjSmODRlXMP84sCSmODpyAHYcARYAL8cYy3pGjBixy7Bhw0YCbLvttsunTJmStPNvO+l0+vJTTz11TVe/ThAEewFndfXrbK7m5ub0L3/5y2Pyy88+++z8xYsXL48zphIOxn4/wT73C2KMpZQRwK7R/FLgsRhjWc/gwYMH7rXXXgfmly+55JK5MYazUWEY3jBx4sQX446jHJSgSuJddtllbsyYMd+NO44NeeGFF3jyySfzi8dsaNuEmBB3ABuRuGP4wAMPrJsfN25c4uIr5L3/LVCWBBX4DDC2TK+1yd577z3uvffewofq44qlkxL92SL58SXOK6+8wiuv2D3LUaNGQcLPv9XV1T8HujxB9d6Pds4l+re96NyR9M9+0uMDyMQdQKH333+/3XschuExqVRyK5em0+l7gR6RoCb3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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "8b436c73",
"metadata": {},
"source": [
"## Efficiency"
]
},
{
"cell_type": "markdown",
"id": "5c397005",
@@ -593,24 +635,24 @@
"source": [
"### Latency hiding\n",
"\n",
"Note that we only need communications to update the values at the boundary of the portion owned by each process. The other values (the one in green in the figure below) can be updated without communications. This provides the opportunity of overlapping the computation of the interior values (green cells in the figure) with the communication of the ghost values. This technique is called latency hiding, since we are hiding communication latency by overlapping it with communications that we need to do anyway.\n",
"Can our implementation above be improved? Note that we only need communications to update the values at the boundary of the portion owned by each process. The other values (the one in green in the figure below) can be updated without communications. This provides the opportunity of overlapping the computation of the interior values (green cells in the figure) with the communication of the ghost values. This technique is called latency hiding, since we are hiding communication latency by overlapping it with communications that we need to do anyway.\n",
"\n",
"The modification of the implementation above to include latency hiding is leaved as an exercise (see below).\n"
]
},
{
"attachments": {
"fig.png": {
"image/png": "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 truncated
"fig16.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "5ae8701f",
"id": "7d66b1a2",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
"<img src=\"data:image/png;base64,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 truncated
"</div>\n"
]
},
{
@@ -626,17 +668,17 @@
},
{
"attachments": {
"fig_jacobi_07.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUUAAAFFCAYAAAB7dP9dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13nBxl/cffz+yVQAISShpFrChiQUGwgYJItWOkQ8rt7CUQkSKiIgvShYAhyd3sccQCCkHFgiggAnYEREUEpUpLgpqjhUtub+f7++PZyT47N7u3M7u3M/qb9+t1r+zMPjPzyczud5/yLQoQUlJSUlIAsOIWkJKSkpIkUqOYkpKSYtDh2z4Z+FMcQupwA7BJ+fXdwGkxagnCAV5bfj0EHBqjliBOAD5Wfi3AB2PUEsSbgcuM7ROB+2LSUoufA6r8+gfA5TFqCeK7wNTy64cBO0YtQVwI7FZ+PQwcEqOWIN4GXGLuEONvnzgUjcOLVPTdHLOWIO6lom91zFqCuJyKvlLMWoLYi+rP4F7xygmkREVf0gwi6M+dp+/emLUEcTMVfS/GrCWIfTA+g+nwOSUlJcUgNYopKSkpBqlRTElJSTFIjWJKSkqKgX/1uR4K2MK372VgQ4hzdAJTfPteBEZDnKMeFvAK374kacwAm/v2rQNGQpyjC5js2/cCrVlEmYL+/3uMEn5ifAsqK7Wg7/3LTeqC4OcS9v+9CTDJt2+oGVE+WvFsUo36O2x22EbQ35NGCbJVw8D6Rk/Q6OqzAr7va3830B1C7NW+4++j4m5TizCrzwq43neNu9AfhEb5tu/4v4yjMczqswXc4jv/7Whj2QgW8DPf8b+n2pD5CbP6/CnfuUeAPRvUBtrVwjWOLwLvHueYRlefNwP+7mvbF0LbFOAB3/GDDR7b6OrzFsAjvmssa1LjQAPHhVl93gJ41HeNMCvqU4AHfcc74xwTdvX5877zrwV2DKHxJN/xzwGvrtN+H1/7UC45QTf0srpHVOj1HfcS8MYGjgvrkjMVeMx3rcUNalzoO+5F4A3jHBPWJWc68IzvOvkG9X2B8B+WsC45fb5rPMzY3ncQ2wP/9h17SgPHhXHJeQf6195sf0QD1wD4pu+4+4FNGzw2jEvObujesXmtwxu8zrd8x/21QY1hXXJ2D9D4iQY1XuU77r4GNIY1igr4ke86d1L/x98j6P823v1vyigGXdQFPj7OMW9GD6HMax3dwLUgmp/iOwM0fqzuEcEaj2rgWlH8FD+AHpqaxmo8p+o90T038//00QauFdYodgN/pPo+rBznmA7gN75jbqR6GF2LsH6Kn/G1fxHYaZxj5vmOGQbe2oA2j7B+iif6rjdeTwVgfoDGtzSoL4qfor83NQS8apxjsr5jGu3YRPFT3AZ4yne9C8Y5JqjTtrSBazVtFEH3ABq9oZOJPmyB6M7bn/Nds16vKuqwBaI7b5/ru95qYEaNtlOBx33tL6nR1k8U5+3XAs/7rper0/6rvrZPAVs3eK2wRjHsNM6b0PNRZvt5DWrzCGsUw07jBGmcE0JfFKMYpPEPdTTuEqDx2AavFdV5ey+qOw8u8OE67b/j0zfe1JdHS4yiQoc7mcfeSfAN9Q9b/o6eH2qUqEZRAT9sUGPUYQtEN4oZ4FbfdX/B2PnFoHtd78PrJ2pEy6d91xwGdg1odyDV84glwkVGRYloaXQaZxLwZ1+7a0Jo84gS0dLoNM5k9FC+GY1RI1qCNF5cQ+PffO2+E+I6zUS0nOG77rPAtgHtjve1a2Tqy6MlRhGCey8X+do0O2yB5sL8tgzQeKGvTTPDFmguzG9b4F++63/B1+Zk3/uNDHNMmgnzu8J37X9QvXq+XYD+L4W8RtQwv0amca70nfshxq7+N0LUML9GpnG+3gKNzYT5BWn0T8t8g7GfgzAdm2aMouU7XoA7qO48vIVoU18eLTOKAHswdp7rI+X3goYE80OeH5qPfX4fehW0UY1zQ56/2dhnf09rlMpziDJp7KcZozgJnSAkqBfTAfzK995tNL6S7tFM7HO9aRx/T3c9wT3dRmgm9vlUnw5zGuewFmlsNvb5tACNryy/N8f33jA6gUIYmo19nsbYxcmzyu8FrYY3OvXl0VKjCHC67xz/QU98+4ct10Y4N7QmIcQXAzS+keaHLdCahBAX+XQ8iZ7XizJp7KfZhBCvR/uxmTrmAOf59q0BZkY4fzNGsdY0zpsYOye6III2j2aMYj2N/vtab962Hs0axaCppt/X0JiNcP5WJIR4P2MXJ/ejuakvj5YbxSDfOX/vK2x326QVRtECbhpH44OMdQ5uhFYYxU7gt+Pou5exDrON0IosOcf5tAxTbSgaWT2vRbNZcrYCnqD+vbsuojaPZrPkbI3+oauncbwV/nq0IkvO1oxd7fVrjNJpgNZlyTlrHH3rgJ0jnLflRhGCl8+9v/XA2yOeF1qXOmwa8HQdjVGHVq1KHRbk52d+kBqdNPbTqtRhX6+hTYCzmzhvK1KH+adxzL9/oueWm6EVqcP8LlXm3yM05gtai1alDvNPNZl/jfqrBtEqo2ihc1vW+hyGWbE3mRCjCGOXz72/hU2cE1qbT3FvgjX2NnHOVuZTPJjq+UXvL8yksZ9WGcWgFUgBfkm4cFE/rcqn6J/GEbQRelcT2jxalU/R73zvaQwTNRREK/MpfomxGtejHeej0sp8itOBVQEao/ZiYQLzKa5jbHzwerQvVFJYx1jDMIye80kC69BG0eQ5tCN03BQJjj9dSeti15shKPb2QbR/YFII0vgA2s8yKdTS+Od2C6lBkeBcAd9s5UVa0VMMWgHy/m4n/IqkSat6ilMYGzvbCo2t6inWm4K4gcaiQ4JoVU/x0hraGo1qqEUreoq7MNYlw/s7twltHq3oKQZFTHl/5zSpr1U9xXoam5kiaVVPMcjh3Pzu1Qp+GI8JGT774yH9f2dGPC+0zij6k1H4/86IeN5WGMWgWE//36KI526FUaw1rPf+GknsUYtmjWKtYb35f/5QRG0ezRrFoKguv8b9mtDXCqMYFNXVKo2tMor+8En/30+J1nlouVH0x0O+iC6WZH6QRtFL6lFohVHM+TS+UNbo9w/cO8K5W2EU/X5i/2ZsbGrUeZ1mjeIOaBcmU8tZ6Il3c1+YjDUmzRpFv2PxfYx1cWqmFwHNG0W/28h9jA2NbEZjK4yiv2PzZ3R0i7lvFXpOLyytMIpBiTZORPtUmvtOjXDulhrFIOdnL9HDBbTmoTdrFIOGVt7Chf/LEyZm16NZo1gvosDx6XuY8NEOzRjFDuDXPg1eoodmssGYNGMUj/Md60UjWYwNobyN6FMkzRjFuT4dL6HdRlqpsVmj6I8886ZEghz0g0JRx6NZoxg09eU9hyjp6vy0zCgGxWyaiR6CvlA/JXy272aMYtDQyvR2bya7i0czRnG82NNJvvML4Z3gmzGK/h82/4/GZ33vN5INxk9UoxjkVG5GIwWFUEadIolqFGs5vtfT+MUI+poxikEdm2ON94NCOU8PeY1mjaJ/6suf6GGJ7/0n0P6rjdIyo/h137FBiR6CfO8+F+Ia0JxR9A+tgnLobc/Y4WEjeQA9ohrFRjOpvI6xX6yeENeJahQPYKyDtv/zERStETapbxSjGBR+GPRj0WyyCo8oRrFeiGQ9jWaYZ6NENYpBCTOCEj0cxNje2HtDXKcZo+jPwxrks9sN3ONr92Ma79y0xCj6YzbrJXpotnsb1SgGxWyG0diof1tUoxgm516Y/4ufKEYxyBesVi+rmbRmEM0oFnzH1Eui0ExaM48oRnEghEb/3N2TITVGNYqDvuvWizxbHKCx0d5YVKMYNPVVKw9rULq74xu8TtNGMUrP5Wu+9mG6t1GMYtCwZbwceqbxEBqPhIhiFIMySI83H+fv9Taagi2sUQyKGriN+vNIQYlBGkmAC+GN4mxf+/EiploxRRLWKAZprBcxFRTm+ZMQGqMYxUZTw9XT2KirWBSjGDT1NV4e1rCfDY+mjGLQHFcjMZvNdG/DGsVGh1aNaPxuA8eFNYpBk8bLGzguarLesEYx77vGGmBWA8cFlUp4ZQPHhTGKryFabyBoiuTkBo7zCGMUg3osjSSjCFrlP6lBfWGNYtgkwqZG/2rviQ0cF8UoRu0E+NPdNZKKrSmj2O9rHyYeMuoHOqxRDDO08hPlAx3WKEYp3uURpaxDGKO4N2MzkTTq4xeUdKOREMBGjWKz80af9B0bJgSwUaMY9Ye1WY1hjGJQuYkwCTMODdA4XphiWKPYzHRRlE5RZKMYVOltjwaFekTp3oYxilG7z+Odo96wIoxR9PtLRokGWeA7x3jJIho1itswNmFG2GiQoLx3XxnnmEaNYrMrjKBTr5nnaHSKpFGjGPX8JssjnCOMUVzWAo1hi5uFMYpBU19hFhYhfAmKKqMYJpD/PrRvmscL6F5YGFaiwwHNqlz/CXmOevyFidG4tkldHr+iWt8QOmdiGJYDv6PatemlJnWB7nF9xLcvbLzrs2i/S9PB1x/LHQWF9nb4hrHvGcJ/dk4GVgScuxVY5XOb53+G8J+dzzJ2WqSVGq8s/3lE1XiFb18zSUFMhtGF3TxcwrsZ3Y/2VzVrPzdc8znMf+TBEG3r8ZcWnSeIpGu8v0XnaTYTShDPlv+a5anyXysR9JCvWTagh7cTgduic/83aFzfovME8WT5r1keiXpgK7PkpKSkpPzXkxrFlJSUFIPUKKakpKQYpEYxJSUlxSA1iikpKSkGirKzYhmvSluSMCvsuWjn5SQxmWqXiVa4x7SSSVR7GSRNXwfVVQrXk4zyBibmZ3CUEO4dbcLUJwSXjYiTTWm9C1kryWAEUPiNYkpKSsr/a9Lhc0pKSoqB33n7boKrecXJvlSM9/PAH2LUEsR7qORoHEVnlEkSuwAzje1b4hJSg62oDsX8I62NcmoFZm2SVcBf4xJSgw9Q+S6/jM4KlCTeSSUM0EVnHE8SU6mONGs49jkuWln3eSJoZd3nLine truncated
"fig17.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "df867b3d",
"id": "f14142ea",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>\n"
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
@@ -647,7 +689,9 @@
"For the Laplace equation in 2D, the interior values in the computational grid (represented by a matrix $u$) are computed with this iterative scheme. The entry $(i,j)$ of matrix $u$ at iteration $t+1$ is computed as:\n",
"\n",
"\n",
"$u^{t+1}_{(i,j)} = \\dfrac{u^t_{(i-1,j)}+u^t_{(i+1,j)}+u^t_{(i,j-1)}+u^t_{(i,j+1)}}{4}$"
"$u^{t+1}_{(i,j)} = \\dfrac{u^t_{(i-1,j)}+u^t_{(i+1,j)}+u^t_{(i,j-1)}+u^t_{(i,j+1)}}{4}$\n",
"\n",
"Note that each entry is updated as the average of the four neighbors (top,bottom,left,right) of that entry in the previous iteration. "
]
},
{
@@ -662,21 +706,10 @@
},
{
"cell_type": "code",
"execution_count": 26,
"execution_count": null,
"id": "4ab59b2f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"jacobi_2d (generic function with 1 method)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"function jacobi_2d(n,niters)\n",
" u = zeros(n+2,n+2)\n",
@@ -700,33 +733,10 @@
},
{
"cell_type": "code",
"execution_count": 25,
"execution_count": null,
"id": "6da0aa54",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12×12 Matrix{Float64}:\n",
" 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0\n",
" 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"u = jacobi_2d(10,0)"
]
@@ -736,7 +746,7 @@
"id": "45d786dd",
"metadata": {},
"source": [
"### Where do we can exploit parallelism?\n",
"### Where can we exploit parallelism?\n",
"\n",
"```julia\n",
"for t in 1:niters\n",
@@ -762,68 +772,140 @@
"id": "267ecd2a",
"metadata": {},
"source": [
"### Parallelization strategies"
"### Parallelization strategies\n",
"\n",
"In 2d one has more flexibility in order to distribute the data over the processes. We consider these three alternatives:\n",
"\n",
"- 1D block partition (each worker handles a subset of consecutive rows and all columns)\n",
"- 2D block partition (each worker handles a subset of consecutive rows and columns)\n",
"- 2D cyclic partition (each workers handles a subset of alternating rows ans columns)\n",
"\n",
"The three partition types are depicted in the following figure for 4 processes.\n"
]
},
{
"attachments": {
"fig_jacobi_07.png": {
"image/png": "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 truncated
"fig18.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "7445dc4a",
"id": "e52959a5",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "e0cee28b",
"metadata": {},
"source": [
"Which of the thee alternatives is more efficient? To answer this question we need to quantify how much data is processed and communicated in each case. The following analysis assumes that the grid is of $N$ by $N$ cells and that the number of processes is $P$."
]
},
{
"cell_type": "markdown",
"id": "f6ea16f5",
"metadata": {},
"source": [
"### 1D block partition\n"
]
},
{
"attachments": {
"g26521.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "0cfeca62",
"metadata": {},
"source": [
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "4600c94a",
"metadata": {},
"source": [
"- We update $N^2/P$ items per iteration\n",
"- We need data from 2 neighbors (2 messages per iteration)\n",
"- We communicate $N$ items per message\n",
"- Communication/computation ratio is $O(P/N)$"
]
},
{
"cell_type": "markdown",
"id": "969c42ee",
"metadata": {},
"source": [
"### Data dependencies"
"### 2D block partition"
]
},
{
"attachments": {
"fig_jacobi_07.png": {
"image/png": "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 truncated
"g26305.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAGaCAYAAACbuHVXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7d15uBxVnfj/dyc3ZA8JSyBhC6uGHREICjpuaFxxA3EBNwRnRh3BBRRHHVQQBRG38JuvOjoqgugII4srOMriwiKIaNgCsm8BQkhISPr3x+m2q+tW1e2T2/eeSvJ+PU89t7vu6erPrb5dpz51lgJJI20noNlafps4ljp7lLCPlqcORJJUW49gXVEbA6kDWEtdCMwv+d0yYAnwGHA7cA1wFXAR4UQple1aP1cDixLGodExFdi09fhR4KGEsUhad/0e2Kfkd08Q6sIlwG3A1cAfgYuBpaMS3WBjgW1aj1cCf08Uh6T12IV0rjD3uiwFvgXMTRAvmTgeTvT+67MULRJvzbznqaP0nsNli4S09vk98fXho8CZwJzRD5eNM3HclOD9NXy2SNSILRLD9wdCq0PbJGAaMB3YA9gws/5w4BDgo8AXCF8ESZLWBb8F/pJ5PplQB84g1IdTWuunAe8CDgPeD3x9FGOUpOSyLRInVJQbA+wGnE5o2s1ekfnkCMeYZ4tEOrZI9MYWCWntk22ReHdFubHA3sACQpenbH343hGOMcsWibWfLRI1MiZ1AOu41cD1wL8BewHXZn73MeC1KYKSJGmUrSKMFzwa2A/4W+Z3pwHPTxGUpOGxa9PouRk4iDDQbGugAXwG+DHhAFtmDLAnsDuwGaGpeDFhwPRlwP1DvHbD3LoGoZk5r0nI8otMIxz4n07ostVu2fgToWvXiooYYo2j0/z9JOHKVZUNCPsEwtWJZQVlJgITWo+faG0XYCPgxcCWrfddRBgEGNtqM4Hw2e7QiuUOQsvDLZHbaRvO/m7/rZNy8RV95kPt3wFgf0Kr2iaE/XsXcAlwdw9/R9YY4EA63f3uozPwUtL65XrCsfePhGPLWOAkwnGvSrtVYzfCZBITCfXhLYT6sOrYPUCYhGJ6bntFx8bVlE+OshGwL+H4vCHwFPAg4ULhVa3n/TKezrG8rH4rK7+M6iv2Ywn7e0/CPhhL+DseILTUXEfYD72wrpAi9dq1qcir6G7SfV1JuX8C/ovwJSobsLYKOIfyAWs7VLw2v+STiDGEvqu/IJy4lr3uAeA4wkGoHw7ObPv/66H8mzPly7rwfC5T5h2EE+szCAe7/N+zorWdiT28dwM4ilB55bezGrgAmEVvXZv6tb9PrHhtfvlCyTYmEcbxFP1d7b/tx4T/r14cRKjoi7Z1DaEiA7s2SWujXrs2FXk73ceDslaJ+cD3CLPPlR3PVhAmNNm8ZBv7Vbw2v+QvAk0APgz8HyFRKHvdXcB7CHVDP7wjs+2Teij/vkz5j5aUaRBahe6meh/cD3x+iPdr1xVln8tq4Dx6ryteRLjoWrStawk9O8CuTVoHDCeRGEPI9tuv/38l5c5i8BfpKcJV5KIv/O4F2xhOIjGhpNyykvUX0J8WrpFOJI4Cfp15voowPWH+7/kVQycT7QHz2WUp3YnA3YSkcKhEol/7e7iJxCzC1Z982aL/u4cIV6GqvIWwj/PbyvaRXgYcgImEtDYaTiIxnu6LZZ8tKfczBh9/VraW/Pq/05nuPGs4icSWJeXKjs/foT/JxEgkEkX11mrChaP8cf7qiveaRWiB6aWueBh41hCxv5ne6ooDMZHQOmA4iQTAVzOvX1hS5ixCwnEi8By6m2M3Icx2cUNmOzcSuvlkjSc0A++dKfdoZl122TP32gmEL/XFwJHAroTuPxCSobnAf9D9JV+TfZE30olE+2rHTYTWofbftDHhilP27zmz4n3fmim3mvCZtiuvBuEE+5Lcew6VSJTt7wahGb2X/T2b8Hl+IlPuOxR/5lvlXjuR0Jyd3VdvI3Spg9AKsj8hiWmXuY/yK4B70V3RXwQ8M/P7pwHfbP3uTjqVspWDtPYYTiIBcHbm9VeUlPkZob77GOGEdGrmd5sTjsfZVs/fMfhEfjLhuPf8TLk7KD427pp77ZaEC3nntd7r6XQu5IwlXMj7HN0XkdZkX+T1O5HYj1BfNQkXvT4GbE93C/cWwKsJPSIuL3mffF1xC6F1KVtXzAN+QnddMatke3tSXVfsBHwD6wqtQ4abSLwt8/rVFF9Z3oWhB8NPIvQLbW/rjRVls1cGejEW2LmHcvPofKkfpjNeYU2NdCLRPkHetKTsQXSarlfTfTBrm0p3U+5xJdsaoPtAWpVI9Lq/96O3/f1Wht4veafl4pxWUq5BaElrl/3PknKXZ8qcTfn/86fp3kdWDtLaY7iJxAcYun7alaGv8E+n++T2xSXl1mTWpsmEE+6hZOuPOxh+K32/E4l86/xQJpWsz9YVl1FdV/xnpmxZD4zsecw5lNcVn8K6QuuI4SYS8+n+MpSd1PbiGZntnFtRLjaRiPGlzPZfNsxtjUYiUVbBtJ2ZKfuNgt8fmfn9H6lO+GYBj2fK92P6117291sZer9kbUy4QtW+UrXFEOUnAve2yi+ju8UMQmtE+/0XEwYolhkgzD1v5SCtfYabSGSP4asY3ni7gzLbKmtRHunpX7+X2f68YW6r34nE9zO/z7e69GpN6op7KK8r9qS7rti4YlsDdPfEsK6oAad/TSM/HqFo1oheXU1ndomiq+ej4ZLM430SxdCrWwjN5FW+knn8SgZfCXtl5vECqme2uAf4Uc/R9WYk9vfBdK4+/YAwaLDKMsKVIwjdsp6d+312H51NdQL7FNXdyCStu7L14RiGVx9eSjjBhHrUh6liKLM08/g5a7iNbF1xLr3VFT9oPZ5AGA+Xla8rHqrYlnVFDTn9axr5sQxDTZ+6PaHf5hxCNl+WAJb1VR+uAcJ0d+0p96bkfr/NKMTQL5fQqWjKXEeYBm8TwtWR7QndodqyJ+/ZSqPqPd8SEWOK/X1g5vGve3zNdZnHuxHGTrTF7qNf9fiektYt+frwycJSHU8ntHhuTXHS8RRhfNlI1UXjCcfnXQl1RL576dMyj+tWH/6GMJYBQkv1NoTuRjEtM/2oK36Seb5v5rF1xVrIRCKN/MGvLAN/OWGA7V4lv88bT8j4+9XcNxk4ntCXcpMeX5O/b0Xd9HrAXEjnb96STiIxjs6AsqeAW3vcVi9S7u9s/9+PAP/Sw2uy/8f55ugtM497+ft73UeS1i3Z48gKYElJuTcQBgf3MpYM+l8XTQf+nTDGMd89Z7RiGK6zCN2f9iScK3yotdxGSAp+Rei6XdUqkK0rjgf+uYf3ta5Yh5lIpJH9Ii6n+MD5ccLMO1kPErqILM695gA6N1zrV3e1jYCfE8ZgtK0kzLywuLW0W1JmEFpM+vn+I6XsJkN52eb2bKWRHVS2hKFbN/LbKpN6f2fHMPQ653dWflBetgLtZZ8/SWgC7+X+HZLWHdn68IGSMmcQ7s+QlT02ZrvsPI8wzqKfddFswkl2trVhRS6Gla31M+lMx163+vBJ4AXAlwmJWbvb7rat5a2EcSq/AU4GflqwjdR1xQrC7IVlA8E1ykwk0sjOvf+Hgt8/h5BIQPjif4owTWZZX8Q7GDyV53B9ns5J7V8JU6P+nOI7a76w9bu1wbihiwDdze3ZrmcrM4/XZFtlUu/v7DiPLxOm2ItxTe55dp/18vc36H1/Slp3DFUfvppOEtGesvS7hPsnFXmC/l+Q+BqdJOJqQqvtpRR3wzqUMKi5rh4mzPD4QeAVhJ4PB9A5oR9LuPfRPxHOPT6We33quiKmnEaBicTom0H3rEFFfQzfTedKwTGEexSUaVA9I86amAa8qfX4McIVnnsryvfz/bNX+HuZvSO2wpjZY7nNMo8XZx4vIXRpGiB0RZpEqLiG854p93fbg5nHPwfOH+b2sq0wmxKSoyob4fFIWt9sRfdEDUX1YbbrzDsIA3LLTKT/ScSWhBNuCMfl51N95XxtqQ/vIkwWsqC17X0I5yZH0bnfwwnALwlJU5t1hbrUrdltffB+OoNnV1N8UMwOPvrOENvbgeHfuyFvLzoZ/8+pPqkF2KOP751tou5loNqcyO33EusEOlefVhOmJm1rEm7+ByGJ62V7Q5XJ7u9f0J/9na2AernD6vWZx0PdgbQX2X3WS7z5GyJKWvcdR6clcgXFM9y168NlwA+H2F7scaSXY+O+mXLnM3T3m7WpPmxbBVwJfJLQ1ew3md/l70+VrSvys/WtiRsyj60r1kImEqPrhYTBSW0/Av5cUK49MGkVxV1bsg7p8b3b25lKbzf2aVtaWioYA7y+xxh6ke0ju3UP5edHbv+FdN8VtcjL6ZzY38DgiiN7t8+De3jP1wzx+5HY39kB92U3C8r6RebxYYSB+8NxWebxq3soP9Q+krRueR3d9534JqGbbtZYOsev5YTW4Cq9HBuzdepQdQHEHZ/H01ud0KuY+nAsQ98jqRfLCPcqapuT+711hdQHsTekG0doiXgy87r7CIObitycKbd3SRkIN4LJ3mG5SfkApDsyZWYPEe9zMmX/NETZd+fev6rZuRcbECqMJqE1oOpuoq/LvXevN6T7ZMU2B4BrM2U/UFDm2ZnfP0J3N6i8l+Teu+iGdNn9fR3ViV6v+/sFmTIXV2yvbYAwo1X7NZ/q4TVVZhC6fLU/x/zc4VlbZ8p6kyFp7RJ7Q7oJhNmP2neAbgKLKD+OPpIpV1ZnAuxE50ZpTcq7nDYy5Z5i6EG7r85sc6jpSU+g+/j8leriQ9qIcPxsHxeruskelXvvohvS9eq1me3kW4HydcWnh/E+EBK1bF1xYEXZren+jK0rtNYaKpGYQviHfwVh5oO76f6CL6F7gFnetzJlL6O469IcQmtGM7eUHRR/nCnzJaoHK00mXJVol39fSbk30Z0c9SORgHDgyh64i/6mVxDGE6zOlO01kVhJmLEibwPCVbF2Line truncated
}
},
"cell_type": "markdown",
"id": "b343f4c1",
"id": "e5142fa1",
"metadata": {},
"source": [
"\n",
"<div>\n",
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUUAAAFFCAYAAAB7dP9dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13nBxl/cffz+yVQAISShpFrChiQUGwgYJItWOkQ8rt7CUQkSKiIgvShYAhyd3sccQCCkHFgiggAnYEREUEpUpLgpqjhUtub+f7++PZyT47N7u3M7u3M/qb9+t1r+zMPjPzyczud5/yLQoQUlJSUlIAsOIWkJKSkpIkUqOYkpKSYtDh2z4Z+FMcQupwA7BJ+fXdwGkxagnCAV5bfj0EHBqjliBOAD5Wfi3AB2PUEsSbgcuM7ROB+2LSUoufA6r8+gfA5TFqCeK7wNTy64cBO0YtQVwI7FZ+PQwcEqOWIN4GXGLuEONvnzgUjcOLVPTdHLOWIO6lom91zFqCuJyKvlLMWoLYi+rP4F7xygmkREVf0gwi6M+dp+/emLUEcTMVfS/GrCWIfTA+g+nwOSUlJcUgNYopKSkpBqlRTElJSTFIjWJKSkqKgX/1uR4K2MK372VgQ4hzdAJTfPteBEZDnKMeFvAK374kacwAm/v2rQNGQpyjC5js2/cCrVlEmYL+/3uMEn5ifAsqK7Wg7/3LTeqC4OcS9v+9CTDJt2+oGVE+WvFsUo36O2x22EbQ35NGCbJVw8D6Rk/Q6OqzAr7va3830B1C7NW+4++j4m5TizCrzwq43neNu9AfhEb5tu/4v4yjMczqswXc4jv/7Whj2QgW8DPf8b+n2pD5CbP6/CnfuUeAPRvUBtrVwjWOLwLvHueYRlefNwP+7mvbF0LbFOAB3/GDDR7b6OrzFsAjvmssa1LjQAPHhVl93gJ41HeNMCvqU4AHfcc74xwTdvX5877zrwV2DKHxJN/xzwGvrtN+H1/7UC45QTf0srpHVOj1HfcS8MYGjgvrkjMVeMx3rcUNalzoO+5F4A3jHBPWJWc68IzvOvkG9X2B8B+WsC45fb5rPMzY3ncQ2wP/9h17SgPHhXHJeQf6195sf0QD1wD4pu+4+4FNGzw2jEvObujesXmtwxu8zrd8x/21QY1hXXJ2D9D4iQY1XuU77r4GNIY1igr4ke86d1L/x98j6P823v1vyigGXdQFPj7OMW9GD6HMax3dwLUgmp/iOwM0fqzuEcEaj2rgWlH8FD+AHpqaxmo8p+o90T038//00QauFdYodgN/pPo+rBznmA7gN75jbqR6GF2LsH6Kn/G1fxHYaZxj5vmOGQbe2oA2j7B+iif6rjdeTwVgfoDGtzSoL4qfor83NQS8apxjsr5jGu3YRPFT3AZ4yne9C8Y5JqjTtrSBazVtFEH3ABq9oZOJPmyB6M7bn/Nds16vKuqwBaI7b5/ru95qYEaNtlOBx33tL6nR1k8U5+3XAs/7rper0/6rvrZPAVs3eK2wRjHsNM6b0PNRZvt5DWrzCGsUw07jBGmcE0JfFKMYpPEPdTTuEqDx2AavFdV5ey+qOw8u8OE67b/j0zfe1JdHS4yiQoc7mcfeSfAN9Q9b/o6eH2qUqEZRAT9sUGPUYQtEN4oZ4FbfdX/B2PnFoHtd78PrJ2pEy6d91xwGdg1odyDV84glwkVGRYloaXQaZxLwZ1+7a0Jo84gS0dLoNM5k9FC+GY1RI1qCNF5cQ+PffO2+E+I6zUS0nOG77rPAtgHtjve1a2Tqy6MlRhGCey8X+do0O2yB5sL8tgzQeKGvTTPDFmguzG9b4F++63/B1+Zk3/uNDHNMmgnzu8J37X9QvXq+XYD+L4W8RtQwv0amca70nfshxq7+N0LUML9GpnG+3gKNzYT5BWn0T8t8g7GfgzAdm2aMouU7XoA7qO48vIVoU18eLTOKAHswdp7rI+X3goYE80OeH5qPfX4fehW0UY1zQ56/2dhnf09rlMpziDJp7KcZozgJnSAkqBfTAfzK995tNL6S7tFM7HO9aRx/T3c9wT3dRmgm9vlUnw5zGuewFmlsNvb5tACNryy/N8f33jA6gUIYmo19nsbYxcmzyu8FrYY3OvXl0VKjCHC67xz/QU98+4ct10Y4N7QmIcQXAzS+keaHLdCahBAX+XQ8iZ7XizJp7KfZhBCvR/uxmTrmAOf59q0BZkY4fzNGsdY0zpsYOye6III2j2aMYj2N/vtab962Hs0axaCppt/X0JiNcP5WJIR4P2MXJ/ejuakvj5YbxSDfOX/vK2x326QVRtECbhpH44OMdQ5uhFYYxU7gt+Pou5exDrON0IosOcf5tAxTbSgaWT2vRbNZcrYCnqD+vbsuojaPZrPkbI3+oauncbwV/nq0IkvO1oxd7fVrjNJpgNZlyTlrHH3rgJ0jnLflRhGCl8+9v/XA2yOeF1qXOmwa8HQdjVGHVq1KHRbk52d+kBqdNPbTqtRhX6+hTYCzmzhvK1KH+adxzL9/oueWm6EVqcP8LlXm3yM05gtai1alDvNPNZl/jfqrBtEqo2ihc1vW+hyGWbE3mRCjCGOXz72/hU2cE1qbT3FvgjX2NnHOVuZTPJjq+UXvL8yksZ9WGcWgFUgBfkm4cFE/rcqn6J/GEbQRelcT2jxalU/R73zvaQwTNRREK/MpfomxGtejHeej0sp8itOBVQEao/ZiYQLzKa5jbHzwerQvVFJYx1jDMIye80kC69BG0eQ5tCN03BQJjj9dSeti15shKPb2QbR/YFII0vgA2s8yKdTS+Od2C6lBkeBcAd9s5UVa0VMMWgHy/m4n/IqkSat6ilMYGzvbCo2t6inWm4K4gcaiQ4JoVU/x0hraGo1qqEUreoq7MNYlw/s7twltHq3oKQZFTHl/5zSpr1U9xXoam5kiaVVPMcjh3Pzu1Qp+GI8JGT774yH9f2dGPC+0zij6k1H4/86IeN5WGMWgWE//36KI526FUaw1rPf+GknsUYtmjWKtYb35f/5QRG0ezRrFoKguv8b9mtDXCqMYFNXVKo2tMor+8En/30+J1nlouVH0x0O+iC6WZH6QRtFL6lFohVHM+TS+UNbo9w/cO8K5W2EU/X5i/2ZsbGrUeZ1mjeIOaBcmU8tZ6Il3c1+YjDUmzRpFv2PxfYx1cWqmFwHNG0W/28h9jA2NbEZjK4yiv2PzZ3R0i7lvFXpOLyytMIpBiTZORPtUmvtOjXDulhrFIOdnL9HDBbTmoTdrFIOGVt7Chf/LEyZm16NZo1gvosDx6XuY8NEOzRjFDuDXPg1eoodmssGYNGMUj/Md60UjWYwNobyN6FMkzRjFuT4dL6HdRlqpsVmj6I8886ZEghz0g0JRx6NZoxg09eU9hyjp6vy0zCgGxWyaiR6CvlA/JXy272aMYtDQyvR2bya7i0czRnG82NNJvvML4Z3gmzGK/h82/4/GZ33vN5INxk9UoxjkVG5GIwWFUEadIolqFGs5vtfT+MUI+poxikEdm2ON94NCOU8PeY1mjaJ/6suf6GGJ7/0n0P6rjdIyo/h137FBiR6CfO8+F+Ia0JxR9A+tgnLobc/Y4WEjeQA9ohrFRjOpvI6xX6yeENeJahQPYKyDtv/zERStETapbxSjGBR+GPRj0WyyCo8oRrFeiGQ9jWaYZ6NENYpBCTOCEj0cxNje2HtDXKcZo+jPwxrks9sN3ONr92Ma79y0xCj6YzbrJXpotnsb1SgGxWyG0diof1tUoxgm516Y/4ufKEYxyBesVi+rmbRmEM0oFnzH1Eui0ExaM48oRnEghEb/3N2TITVGNYqDvuvWizxbHKCx0d5YVKMYNPVVKw9rULq74xu8TtNGMUrP5Wu+9mG6t1GMYtCwZbwceqbxEBqPhIhiFIMySI83H+fv9Taagi2sUQyKGriN+vNIQYlBGkmAC+GN4mxf+/EiploxRRLWKAZprBcxFRTm+ZMQGqMYxUZTw9XT2KirWBSjGDT1NV4e1rCfDY+mjGLQHFcjMZvNdG/DGsVGh1aNaPxuA8eFNYpBk8bLGzguarLesEYx77vGGmBWA8cFlUp4ZQPHhTGKryFabyBoiuTkBo7zCGMUg3osjSSjCFrlP6lBfWGNYtgkwqZG/2rviQ0cF8UoRu0E+NPdNZKKrSmj2O9rHyYeMuoHOqxRDDO08hPlAx3WKEYp3uURpaxDGKO4N2MzkTTq4xeUdKOREMBGjWKz80af9B0bJgSwUaMY9Ye1WY1hjGJQuYkwCTMODdA4XphiWKPYzHRRlE5RZKMYVOltjwaFekTp3oYxilG7z+Odo96wIoxR9PtLRokGWeA7x3jJIho1itswNmFG2GiQoLx3XxnnmEaNYrMrjKBTr5nnaHSKpFGjGPX8JssjnCOMUVzWAo1hi5uFMYpBU19hFhYhfAmKKqMYJpD/PrRvmscL6F5YGFaiwwHNqlz/CXmOevyFidG4tkldHr+iWt8QOmdiGJYDv6PatemlJnWB7nF9xLcvbLzrs2i/S9PB1x/LHQWF9nb4hrHvGcJ/dk4GVgScuxVY5XOb53+G8J+dzzJ2WqSVGq8s/3lE1XiFb18zSUFMhtGF3TxcwrsZ3Y/2VzVrPzdc8znMf+TBEG3r8ZcWnSeIpGu8v0XnaTYTShDPlv+a5anyXysR9JCvWTagh7cTgduic/83aFzfovME8WT5r1keiXpgK7PkpKSkpPzXkxrFlJSUFIPUKKakpKQYpEYxJSUlxSA1iikpKSkGirKzYhmvSluSMCvsuWjn5SQxmWqXiVa4x7SSSVR7GSRNXwfVVQrXk4zyBibmZ3CUEO4dbcLUJwSXjYiTTWm9C1kryWAEUPiNYkpKSsr/a9Lhc0pKSoqB33n7boKrecXJvlSM9/PAH2LUEsR7qORoHEVnlEkSuwAzje1b4hJSg62oDsX8I62NcmoFZm2SVcBf4xJSgw9Q+S6/jM4KlCTeSSUM0EVnHE8SU6mONLine truncated
"<img src=\"data:image/png;base64,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 truncated
"</div>\n"
]
},
{
"cell_type": "markdown",
"id": "df861921",
"id": "091b0310",
"metadata": {},
"source": []
"source": [
"- We update $N^2/P$ items per iteration\n",
"- We need data from 4 neighbors (4 messages per iteration)\n",
"- We communicate $N/\\sqrt{P}$ items per message\n",
"- Communication/computation ratio is $O(\\sqrt{P}/N)$"
]
},
{
"cell_type": "markdown",
"id": "a8fb49a3",
"metadata": {},
"source": [
"### 2D cyclic partition"
]
},
{
"attachments": {
"fig_jacobi_07.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJoAAAFICAYAAAAYp5QFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7d13lGRVoTbutycPDMMAQ44CEiUrIAh+fMDVK6LiVYyIAS4mMHsVAxjhKgYMfB+KiYyoiBe8SBBBEUEkShIkSRAYYGBy6v7+6J7qU6F75sr5sQ8/n2etM2vvWjVrvevU7qrqt2qf7ksyEACWenmS80uHoM1jSVYtHQKgIQ5OcnLpEAAwkjGlAwAAAADw/w/jSgcAAAB4FlspyXNKhxhFX5LnVub3JZlfKMtINkgyaWg8I8njBbP0Mj3D366ek+SBgll6WSHJekPjgSR3FMzSS+ca/FuSeYWyjGT9JJOHxk1cg6sNHUkyN8n9BbMsU2fR9NEk15UIMopzkkwZGt+c5P0Fs/RyXJLthsZzk7yyYJZeXpXkPZX5/mneC8tFlfEPkpxeKsgIfpbBNxBJcmuSIwpm6eU/k+w4NJ6fwce4SfZL+8/tvyV5qlCWkfwyyfjSIVgun09yWekQHc7I4BvQJLk3ySEFs/TyySQvHhovTvKvBbP0smuSz1Xm70pyZ6EsI7kwg2+S84YPfTw77Pm/C8dp98VD3pSZjz6SJNl533/Na977wcKJ2p3x1WNz3WWXJElWXWvtfOzEZu36+sv1f8pJR32sNT/ye6dl2vQ1Cibq9vm3vT5PPf5Y6RiMbM8k55UOAdAUnUXTdUkuLhFkFIsr4yfTvHxPVMZL0rx8W3bMf5NkdoEcy+vONO8cLqqMm7gGq217E9fgJh3zyzP4KUGTuFbds8ef07w1vqAynpPm5Tu0Mu5P8/JN7phfleZ96DWQoaJpoy23zo577VM4TrsJEye1xqutvU7j8v3qtB+2xhMnTW5cvv7+/rb58174oqyx3gaF0vQ2bsKE0hEAYLm5RhMAAAAAtXCNJgAAgHoszOC1Xppk1Qxe/iFJ8oWzz8vmO76gYJxub95m48yfO2fp9LIkBxaM08svk+yUJNvuvmc+ffLZheO0+9kJx+f0r3yxetOapbKMYIUkdy+dfPbMc7PVC3YtGKfbQdtuknlzWht/rkjy6oJxevlFkl2SZOtddstnTj+ncJx2N15xeT77lte25oomAACA+jxSOkCHtv2hU6atkmmrN+s6ZIObk1sWpXnnsHUpjbHjxzfu/E1accXOm5p2/qa0TVae1rhz2DembRE2cQ22LinUxDU4ZeVpbXNb5wAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFoomgAAAACohaIJAAAAgFqM65ifm2RxiSCjmFoZ75rkyVJBRjClMl4pzcs3sWP+YJKBEkGW01FJ/qN0iA7VNbhzmvcYr9gxblq+zjV4V5q3BidUxlskOb9UEHpaqTL+QZLvlAoygmq+LdO8n8Hqc8SENC/f+I7579K89yKtD+aOe/c7cvwH3l0yS5e5s2a1xr867Ye57Jyzy4XpYcHcOa3x3++7J69Yd+WCabotWbSobf6OnbdOX1+zPoudN3tWdbpNqRwAsDw6i6YViqRYfmPS/kt/EzU930rLvktRE9L+S3/TWINPX9PXYNPz/TOqvlZNHjqaqi/N/xlser5GvxdZtHBBFi1cUDrGiPqXLMncWU+VjjGigf7+RudLknmzZ5eOsCxN/xkG4J9csz6uAQAAAOBZqy/tW1huTDKzUJaR7J5kbJLsseOO2ev5zy8cp93J552Xex58MEmy/lpr5W2veEXhRO3+ePPN+e8rrmjNP3nooRnT11cwUbfPfmd4F8ybXvaybLLeegXTdPvyj36UeQsGP73effvts/fOOxdO1O6755yThx59NEmy7hpr5B2velXhRO2uuOGGXHLVVdWbrkyyaIS7l7JHBp8Pk+Tfk3y3YBa6zcnwt1xuTfJowSy9vDDD278WJLlqlPuWsE2SVYbGA0l+WzBLL2tkcMtqkuSDBx2UKZOb9aW1z333uxkYGHy79KL9D8hztm7WzqWfnXB85jw1uCNy0213yAtftn/hRO0u+fHpefCuO5MkK01bJa965+GFE7W777Zb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 truncated
"g26911.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "6f97781b",
"id": "1bc30b74",
"metadata": {},
"source": [
"\n",
"<div>\n",
"<img src=\"data:image/png;base64,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 truncated
"</div>\n"
"<img src=\"data:image/png;base64,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 truncated
"</div>"
]
},
{
"cell_type": "markdown",
"id": "c45f4e44",
"metadata": {},
"source": [
"- We update $N^2/P$ items\n",
"- We need data from 4 neighbors (4 messages per iteration)\n",
"- We communicate $N^2/P$ items per message (the full data owned by the neighbor)\n",
"- Communication/computation ratio is $O(1)$"
]
},
{
@@ -831,9 +913,14 @@
"id": "850b1848",
"metadata": {},
"source": [
"### Complexity analysis\n",
"### Which partition is the best one?\n",
"\n",
"The complexity analysis is let as an exercise (see below).\n"
"- Both 1d and 2d block partitions are potentially scalable if $P<<N$\n",
"- The 2d block partition is with the lowest communication complexity\n",
"- The 1d block partition requires to send less messages (It can be useful if the fixed cost of sending a message is high)\n",
"- The best strategy for a given problem size will thus depend on the machine, but the 2d block partition is the one used in practice since it has the lowest communication complexity.\n",
"- Cyclic partitions are impractical for this application (but they are useful in others) \n",
"\n"
]
},
{
@@ -962,7 +1049,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.9.1",
"display_name": "Julia 1.9.0",
"language": "julia",
"name": "julia-1.9"
},
@@ -970,7 +1057,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.9.1"
"version": "1.9.0"
}
},
"nbformat": 4,
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../matrix_matrix/">« Matrix Multiplication</a><a class="docs-footer-nextpage" href="../solutions/">Solutions »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../matrix_matrix/">« Matrix Multiplication</a><a class="docs-footer-nextpage" href="../solutions/">Solutions »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_basics/">« Julia Basics</a><a class="docs-footer-nextpage" href="../julia_distributed/">Remote calls and remote channels »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_basics/">« Julia Basics</a><a class="docs-footer-nextpage" href="../julia_distributed/">Remote calls and remote channels »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../getting_started_with_julia/">« Getting started</a><a class="docs-footer-nextpage" href="../julia_async/">Tasks and channels »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../getting_started_with_julia/">« Getting started</a><a class="docs-footer-nextpage" href="../julia_async/">Tasks and channels »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_async/">« Tasks and channels</a><a class="docs-footer-nextpage" href="../matrix_matrix/">Matrix Multiplication »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_async/">« Tasks and channels</a><a class="docs-footer-nextpage" href="../matrix_matrix/">Matrix Multiplication »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_distributed/">« Remote calls and remote channels</a><a class="docs-footer-nextpage" href="../jacobi_method/">Jacobi »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../julia_distributed/">« Remote calls and remote channels</a><a class="docs-footer-nextpage" href="../jacobi_method/">Jacobi »</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../jacobi_method/">« Jacobi</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../jacobi_method/">« Jacobi</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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -18,4 +18,4 @@
var myIframe = document.getElementById("notebook");
iFrameResize({log:true}, myIframe);
});
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</script></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
+1 -1
View File
@@ -1,2 +1,2 @@
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · XM_40017</title><script data-outdated-warner src="../assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/search/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/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/favicon.ico" rel="icon" type="image/x-icon"/><script src="../assets/iframeResizer.min.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">XM_40017</a></span></div><form class="docs-search" action><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><a class="tocitem" href="../getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="../notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="../notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="../notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="../notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="../notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="../notebooks/solutions/">Solutions</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 class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><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><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 14:12">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · XM_40017</title><script data-outdated-warner src="../assets/warner.js"></script><link rel="canonical" href="https://fverdugo.github.io/XM_40017/search/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.045/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/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/favicon.ico" rel="icon" type="image/x-icon"/><script src="../assets/iframeResizer.min.js"></script><link href="../assets/custom.css" rel="stylesheet" type="text/css"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="XM_40017 logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../">XM_40017</a></span></div><form class="docs-search" action><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><a class="tocitem" href="../getting_started_with_julia/">Getting started</a></li><li><span class="tocitem">Notebooks</span><ul><li><a class="tocitem" href="../notebooks/julia_basics/">Julia Basics</a></li><li><a class="tocitem" href="../notebooks/julia_async/">Tasks and channels</a></li><li><a class="tocitem" href="../notebooks/julia_distributed/">Remote calls and remote channels</a></li><li><a class="tocitem" href="../notebooks/matrix_matrix/">Matrix Multiplication</a></li><li><a class="tocitem" href="../notebooks/jacobi_method/">Jacobi</a></li><li><a class="tocitem" href="../notebooks/solutions/">Solutions</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 class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><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><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><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> version 0.27.25 on <span class="colophon-date" title="Monday 14 August 2023 16:53">Monday 14 August 2023</span>. Using Julia version 1.9.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html>