Some cleanup and restructuring

This commit is contained in:
Francesc Verdugo committed 2023-08-10 15:17:45 +02:00
1 parent ecebbdbab1
commit a6b8b7e051
11 files changed
+518 -241

No files matched your search

+103 -32
View File
@@ -14599,10 +14599,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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 src="data:image/png;base64,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 truncated
</div>
<h1 id="Is-Julia-fast?">Is Julia fast?<a class="anchor-link" href="#Is-Julia-fast?">&#182;</a></h1>
</div>
</div>
</div>
@@ -14613,22 +14610,9 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Seminars-Computational-Science">Seminars Computational Science<a class="anchor-link" href="#Seminars-Computational-Science">&#182;</a></h3><h3 id="Julia-tutorial">Julia tutorial<a class="anchor-link" href="#Julia-tutorial">&#182;</a></h3><h1 id="Why-is-Julia-fast?">Why is Julia fast?<a class="anchor-link" href="#Why-is-Julia-fast?">&#182;</a></h1><p>by Francesc Verdugo (VU Amsterdam)</p>
<p>2022-11-24</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
<div class="jp-Cell-inputWrapper">
<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="Contents">Contents<a class="anchor-link" href="#Contents">&#182;</a></h2><p>We will learn</p>
<h2 id="Contents">Contents<a class="anchor-link" href="#Contents">&#182;</a></h2><p>With this notebook, you will learn</p>
<ul>
<li>Basic julia concepts:<ul>
<li>Two basic julia concepts related performance:<ul>
<li>type-inference</li>
<li>JIT compilation</li>
</ul>
@@ -14647,7 +14631,21 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Using-Jupyter-notebooks-in-Julia">Using Jupyter notebooks in Julia<a class="anchor-link" href="#Using-Jupyter-notebooks-in-Julia">&#182;</a></h2>
<h2 id="Using-Jupyter-notebooks-in-Julia">Using Jupyter notebooks in Julia<a class="anchor-link" href="#Using-Jupyter-notebooks-in-Julia">&#182;</a></h2><p>We are going to use Jupyter notebooks in this and other lectures. You provably have worked with notebooks (in Python). If not, here are the basic concepts you need to know to follow the lessons.</p>
<div class="alert alert-block alert-info">
<b>Tip:</b> Did you know that Jupyter stands for Julia, Python and R?
</div>
<h3 id="How-to-start-a-Jupyter-nootebook-in-Julia">How to start a Jupyter nootebook in Julia<a class="anchor-link" href="#How-to-start-a-Jupyter-nootebook-in-Julia">&#182;</a></h3><p>To run a Julia Jupyther notebook, open a Julia REPL and type</p>
<div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="w"> </span><span class="p">]</span>
<span class="n">pkg</span><span class="o">&gt;</span><span class="w"> </span><span class="n">add</span><span class="w"> </span><span class="n">IJulia</span>
<span class="n">julia</span><span class="o">&gt;</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">IJulia</span>
<span class="n">julia</span><span class="o">&gt;</span><span class="w"> </span><span class="n">notebook</span><span class="p">()</span>
</pre></div>
<p>A new browser window will open. Navigate to the corresponding notebook and open it.</p>
<div class="alert alert-block alert-warning">
<b>Warning:</b> Make sure that the notebook is using the same Julia version as the one you used to launch `IJulia`. If it is not the same, go to Kernel > Change Kernel and choose the right version.
</div>
</div>
</div>
</div>
@@ -14658,7 +14656,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Running-a-cell">Running a cell<a class="anchor-link" href="#Running-a-cell">&#182;</a></h3><p>Click on a cell and press <code>Shift</code> + <code>Enter</code></p>
<h3 id="Running-a-cell">Running a cell<a class="anchor-link" href="#Running-a-cell">&#182;</a></h3><p>To run a cell, click on a cell and press <code>Shift</code> + <code>Enter</code>. You can also use the &quot;Run&quot; button in the toolbar above.</p>
</div>
</div>
@@ -14687,7 +14685,37 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Cell-order-is-important">Cell order is important<a class="anchor-link" href="#Cell-order-is-important">&#182;</a></h3>
<p>As you can see from the output of previous cell, the value of the last line is displayed. We can suppress the output with a semicolon. Try it. Execute next cell.</p>
</div>
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
<div class="jp-Cell-inputWrapper">
<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&nbsp;[&nbsp;]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-julia"><pre><span></span><span class="mi">1</span><span class="o">+</span><span class="mi">3</span>
<span class="mi">4</span><span class="o">*</span><span class="mi">5</span><span class="p">;</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
<div class="jp-Cell-inputWrapper">
<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="Cell-order-is-important">Cell order is important<a class="anchor-link" href="#Cell-order-is-important">&#182;</a></h3><p>Running the two cells below in reverse order won't work (try it).</p>
</div>
</div>
</div>
@@ -14730,7 +14758,8 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Package-and-help-modes">Package and help modes<a class="anchor-link" href="#Package-and-help-modes">&#182;</a></h3>
<h3 id="REPL-modes">REPL modes<a class="anchor-link" href="#REPL-modes">&#182;</a></h3><p>This is particular to Julia notebooks. You can use package, help, and shell mode just like in the Julia REPL.</p>
</div>
</div>
</div>
@@ -14742,7 +14771,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
<div class="jp-InputPrompt jp-InputArea-prompt">In&nbsp;[&nbsp;]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-julia"><pre><span></span><span class="p">]</span><span class="w"> </span><span class="n">add</span><span class="w"> </span><span class="n">BenchmarkTools</span><span class="w"> </span><span class="n">DataFrames</span><span class="w"> </span><span class="n">PyCall</span><span class="w"> </span><span class="n">Conda</span><span class="w"> </span><span class="n">Test</span>
<div class=" highlight hl-julia"><pre><span></span><span class="p">]</span><span class="w"> </span><span class="n">add</span><span class="w"> </span><span class="n">MPI</span>
</pre></div>
</div>
@@ -14766,6 +14795,22 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</div>
</div>
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
<div class="jp-Cell-inputWrapper">
<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&nbsp;[&nbsp;]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-julia"><pre><span></span><span class="p">;</span><span class="w"> </span><span class="n">ls</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
<div class="jp-Cell-inputWrapper">
@@ -14774,6 +14819,19 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
<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="How-fast-is-Julia-code?">How fast is Julia code?<a class="anchor-link" href="#How-fast-is-Julia-code?">&#182;</a></h2>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
<div class="jp-Cell-inputWrapper">
<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>NB. Most of the examples below are taken from the lecture by S.G. Johnson at MIT. See here:
<a href="https://github.com/mitmath/18S096/blob/master/lectures/lecture1/Boxes-and-registers.ipynb">https://github.com/mitmath/18S096/blob/master/lectures/lecture1/Boxes-and-registers.ipynb</a></p>
</div>
</div>
</div>
@@ -14797,8 +14855,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Hand-written-sum-function">Hand-written sum function<a class="anchor-link" href="#Hand-written-sum-function">&#182;</a></h3><h3 id="Exercise">Exercise<a class="anchor-link" href="#Exercise">&#182;</a></h3><p>Write a function that computes the sum of all elements in array <code>a</code>. You can view the solution at the bottom of the notebook.</p>
<h3 id="Hand-written-sum-function">Hand-written sum function<a class="anchor-link" href="#Hand-written-sum-function">&#182;</a></h3>
</div>
</div>
</div>
@@ -14810,9 +14867,12 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
<div class="jp-InputPrompt jp-InputArea-prompt">In&nbsp;[&nbsp;]:</div>
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-julia"><pre><span></span><span class="c"># ✍️ Exercise 1</span>
<span class="k">function</span><span class="w"> </span><span class="n">sum_hand</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="w"> </span><span class="c"># TODO</span>
<div class=" highlight hl-julia"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="n">sum_hand</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zero</span><span class="p">(</span><span class="n">eltype</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">ai</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">a</span>
<span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">ai</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">s</span>
<span class="k">end</span>
</pre></div>
@@ -14828,7 +14888,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Test-driven-development">Test-driven development<a class="anchor-link" href="#Test-driven-development">&#182;</a></h3><p>Next, you can test your solution. You can use the Julia macro <code>@test</code> which is provided in the <code>Test</code> package.</p>
<h3 id="Test-it">Test it<a class="anchor-link" href="#Test-it">&#182;</a></h3><p>The Julia macro <code>@test</code> which is provided in the <code>Test</code> package is useful to write (unit) tests in Julia.</p>
</div>
</div>
@@ -14888,7 +14948,7 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
</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="Benchmarking">Benchmarking<a class="anchor-link" href="#Benchmarking">&#182;</a></h2><p>In order to track the performance of your code, it is useful to time the execution of single functions. In Julia, the most conventional way of measuring the computation time is the macro <code>@time</code>.</p>
<h2 id="Benchmarking">Benchmarking<a class="anchor-link" href="#Benchmarking">&#182;</a></h2><p>In Julia, the most straight-forward way of measuring the computation time of a piece of code is with the macro <code>@time</code>.</p>
</div>
</div>
@@ -14933,7 +14993,18 @@ body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
<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>Note that <code>@time</code> also measures the compile time of a function if it's the first call to that function. So make sure to run <code>@time</code> twice on a freshly compiled function in order to get a more meaningful result.</p>
<p>Now in order to benchmark our code, we need to run it several times. To do this we can call our code in a for-loop and gather the runtimes using the Julia macro <code>@elapsed</code>. This measures the runtime of an expression in seconds, just as the <code>@time</code> macro, only <code>@elapsed</code> discards the result of the computation and returns the elapsed time instead.</p>
</div>
</div>
</div>
</div>
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
<div class="jp-Cell-inputWrapper">
<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>A part of getting rid of compilation time, one typically wants to measure the runtime several times and compute sole. To do this we can call our code in a for-loop and gather the runtimes using the Julia macro <code>@elapsed</code>. This measures the runtime of an expression in seconds, just as the <code>@time</code> macro, only <code>@elapsed</code> discards the result of the computation and returns the elapsed time instead.</p>
</div>
</div>