diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 83b92a0..8e1628b 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-10-16T12:03:36","documenter_version":"1.1.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-19T14:06:53","documenter_version":"1.5.0"}} \ No newline at end of file diff --git a/dev/LEQ.ipynb b/dev/LEQ.ipynb index 2067376..0aa2208 100644 --- a/dev/LEQ.ipynb +++ b/dev/LEQ.ipynb @@ -25,6 +25,35 @@ "- How to fix static load imbalance" ] }, + { + "cell_type": "markdown", + "id": "480af594", + "metadata": {}, + "source": [ + "
\n", + "Note: Do not forget to execute the cell below before starting this notebook! \n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e93809a", + "metadata": {}, + "outputs": [], + "source": [ + "using Printf\n", + "function answer_checker(answer,solution)\n", + " if answer == solution\n", + " \"🥳 Well done! \"\n", + " else\n", + " \"It's not correct. Keep trying! 💪\"\n", + " end |> println\n", + "end\n", + "ge_par_check(answer) = answer_checker(answer, \"a\")\n", + "ge_dep_check(answer) = answer_checker(answer, \"b\")" + ] + }, { "cell_type": "markdown", "id": "8dcee319", @@ -33,7 +62,7 @@ "## Gaussian elimination\n", "\n", "\n", - "System of linear algebraic equations\n", + "[Gaussian elimination](https://en.wikipedia.org/wiki/Gaussian_elimination) is a method to solve systems of linear equations, e.g.\n", "\n", "$$\n", "\\left[\n", @@ -60,7 +89,7 @@ "\\right]\n", "$$\n", "\n", - "Elimination steps\n", + "The steps of the Gaussian elimination will transform the system into an upper triangular matrix. The system of linear equations can now easily be solved by backward substitution. \n", "\n", "\n", "$$\n", @@ -112,7 +141,10 @@ "id": "94c10106", "metadata": {}, "source": [ - "### Serial implementation\n" + "### Serial implementation\n", + "The following algorithm computes the Gaussian elimination on a matrix which represents a system of linear equations.\n", + "- The first inner loop in line 4 divides the current row by the value of the diagonal entry, thus transforming the diagonal to contain only ones. \n", + "- The second inner loop beginning in line 8 substracts the rows from one another such that all entries below the diagonal become zero. " ] }, { @@ -140,6 +172,24 @@ "end" ] }, + { + "cell_type": "markdown", + "id": "3763b000", + "metadata": {}, + "source": [ + "
\n", + "Note: This algorithm is not correct for all matrices: if any diagonal element B[k,k] is zero, the computation in the first inner loop fails. To get around this problem, another step can be added to the algorithm that swaps the rows until the diagonal entry of the current row is not zero. This process of finding a nonzero value is called pivoting. \n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "fbb3d1eb", + "metadata": {}, + "source": [ + "You can verify that the algorithm computes the upper triangular matrix correctly for the example in the introduction by running the following code cell. " + ] + }, { "cell_type": "code", "execution_count": null, @@ -185,6 +235,32 @@ "```" ] }, + { + "cell_type": "markdown", + "id": "e52c4b38", + "metadata": {}, + "source": [ + "
\n", + "Question: Which of the loops can be parallelized?\n", + "
\n", + "\n", + " a) the inner loops, but not the outer loop\n", + " b) the outer loop, but not the inner loops\n", + " c) all loops\n", + " d) only the first inner loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "078e974e", + "metadata": {}, + "outputs": [], + "source": [ + "answer = \"x\" # replace x with a, b, c, or d \n", + "ge_par_check(answer)" + ] + }, { "cell_type": "markdown", "id": "14d57c52", @@ -193,70 +269,79 @@ "### Two possible data partitions" ] }, + { + "cell_type": "markdown", + "id": "6b17aee4", + "metadata": {}, + "source": [ + "The outer loop of the algorithm is not parallelizable, since the iterations depend on the results of the previous iterations. However, we can extract parallelism from the inner loops. Let's have a look at two different parallelization schemes. \n", + "\n", + "1. **Block-wise partitioning**: Each processor gets a block of subsequent rows. \n", + "2. **Cyclic partitioning**: The rows are alternately assigned to different processors. " + ] + }, { "attachments": { - "g23933.png": { - "image/png": "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" + "fig-asp-1d-partition.png": { + "image/png": "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" } }, "cell_type": "markdown", - "id": "f06f0869", + "id": "c518f863", "metadata": {}, "source": [ "
\n", - "\n", + "\n", "
" ] }, { + "cell_type": "markdown", + "id": "102d6fa2", + "metadata": {}, + "source": [ + "## What is the work per process at iteration k?\n", + "To evaluate the efficiency of both partitioning schemes, consider how much work the processors do in the following example. \n", + "In any iteration k, which part of the matrix is updated in the inner loops? \n", + "\n", + "### Block-wise partition" + ] + }, + { + "attachments": { + "fig-asp-data-updated.png": { + "image/png": "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m+ybdSiJnvrPpbSPmVicucm+uUxsxo6fSnvH+OLMTfbN5Y8eAIbP2Ggv68hpYtM+bpW+aTO2ye0x+OzDV9HXvbwvr8fgogWP0NY+zmdusm/uEpvXmPlaG+5hYydU6lqarfaxk/qmzti6kNdj8MXHb6RQaO/L63mmp2sJmOXyGJz7QNYRNCaa2fCJ6DXiuTMXmJt1HFnL5Y+MiIiIiMhwpORaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERS0p51AHHPP3YD/7r8yqzDGKCvewV3XvEFsHxejyxf9ELbgzefxXOPXJN1KIlefOImDGv7V6Et61ASdS58juWLny/86/ITsw6lot7u5XbXlSdRaB+bdSiJVix+of3RO37Ji0/enHUoiZ5/5Fow2vL6GXctfYmu5a9YXuMD6OtdYf++6qsUOsZlHUqipa883fbff/6UBc/ckXUoiV549Dq6li9sz+tnXOztptjblctjcN6TbwN2yzoMkZrkLrme/uLTxS0XXduXdRxxTxaLHVvc/Y8eyzqQCuZ1dbVv+OSDxTWfeTZ3+w6gc/m8tjYr2JZ3XduTdSxJXulbbgu6u9vzGh/A073Fjs3vubGnPacXeM8vW9K+3mP3Ftd++qlcHoNLlj/T1m4F23JpPj/jV3s7eb5rRUeej8G53T0dm9x7Q+9Ya/esY0myYMXy9lnPPFpc98WXcnkM9q14rm1FsSe358FeLzK3pyeXx+CKzu3bXtLddhkmcpdc7zFxduGE6W/N3Rfor0se8K+sfkBHW04Tm7s75/a8d8pOHbtNmJ3LAL8876+ML7T3nrj6mzuyjiXJ/Ste4LGu+X2nrvHWXMYHcNWSB4snrb5/x4TCmKxDSfSfFc91HzVlhzF7T9wkl8fgN1+6mhV9PT2nrHFgLj/jp7pf5sHnni/m+Ri8esnDxS9Mf3P7lLbxWYeSaM7cF3sOX/X1HW+ZtHkuj8EzXv4H83oWd5+6xltz+SVeVuzm2qUP5/IYPHX+LB7pyjoKkdrk8gQkIiIiIjIcKbkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUtGcdQFyX97GouCLrMAZwYHFxBQXL5/VIEWdZsSuX+w6gy3uwIrmNb6l3UaSY2/ggHINLil30UMw6lERFitZZ7MntPuwq9tCd0/MLwBLvoojnNj4Ax1lSXIGZZR1Kol6KLM/zebDYRxe9ltf4OovdQD7P0130Zh2CSM3M3bMNwJgPrN7/fkLh+z6pcHK2QSVYXFxRWKUwLp9ZDbC82F3osDbvsLbc7TuApcUuM7CJhbG53Ie9XrQlxRU2tW1CLuMDWFLsKkwqjHHDcvkZLy92F9qtzcfk9Bhc1Ndp7VbI7THYRx+L+7oKeT4GlxW7CxMKHbk9BpcVuwod1uZjrD2v8ZmDTcrpMei4LSt25zK+JcVvW2fxQ6VXdXPdWT+zgEQGkbuW63dP2cFOmH587ppFXv/46X7TBp8stOW05fqtT/+45wur79+x24TZudt3AF+e91fGF9p7T1z9zbk75gDuX/ECn37x0r6rZh3XlnUslez4+LeL1876eGFCYUwuP+OD5/6k+/9W22vM3hM3yWV833zpalb09fScsuaBHVnHkuSp7pf5wHMXFq/b4BP5PMkAOz/+3eKV63+0MKVt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" + } + }, "cell_type": "markdown", "id": "a67e0aad", "metadata": {}, - "source": [ - "### Which is the work per process at iteration k ?\n", - "\n" - ] - }, - { - "attachments": { - "g26595.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "53a94ed3", - "metadata": {}, "source": [ "
\n", - "\n", + "\n", "
" ] }, { + "cell_type": "markdown", + "id": "d9d29899", + "metadata": {}, + "source": [ + "It is clear from the code that at any given iteration `k`, the matrix is updated from row `k` to `n` and from column `k` to `m`. If we look at how that reflects the distribution of work over the processes, we can see that CPU 1 does not have any work, whereas CPU 2 does a little work and CPU 3 and 4 do a lot of work. " + ] + }, + { + "attachments": { + "fig-asp-data-updated-2.png": { + "image/png": "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R8m1iIiIiEhK1C1ERERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlHVkH0M+MK4ADso5DREREcus37hyRdRAileQiuTaz0TBvCqxuWcciIiIiefXyamZrjXL37qwjESkn8xkazfgzLJuOdb8Vn6TkWkRERJLZ646PuwfGzHHnoKzDEUmSh+R6HrB6pkGIiIjIUDLHnRlZByGSJBfdQopNfwusu2nWUQz0r799w7fZ+ySztvasQ0n00I3n9K27+X7tq66+YdahJHr2wStoaxtVWG/z9+TyIdqlC17k6X9fVtjyXZ/PZXwA/7rmNN9qjy9be8eorENJ9NDNP+xbZ+M92ietkcMvMDDnkb9S6O3tmzn7gFx+iVcsfZX//PNnvtUeX8rtHbx///1033K3z1nHqHFZh5Lo4VvO65v+lne2T5m+ZdahJHrhP3+ne9mivlnbHJTLY7Cvt4v7rz/D3/ruk3N3DD73EMx9JusoRGqTu+R62gyYvXvWUQx0//XnsOW7TqStPZfnRJ6892eFWdts3r72RvlMrhe/fi0do8YXZu+ez+T61edf4cXHf+Kzd/981qGU9cA/vu9b7Po56xydz+T6qft+3jdz9sz29TbPZ3K9fMmN9HUvK8zePZ/J9aL5b/DM/T/22bvnN7l+8MYf+uY7H2ujx+czuX7mgV8WZmwxrX39rfKZXPd03crSBS/0zd49n8l1T1c3D9/yA5+9e/6S66ULlVzL0JHLREdEREREZChSci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISc/dsAzDmAav3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Ax2jxhfW3mjPXCY2o8dOpqNzbGHtjfbM5Y8eAIZPf8tu1jl6QtaRJOoYs0rflOmzc3sMvvDYNfR1L+vL6zG4aP4TtHeM8bU32jN3ic2brM2nz9rFRo+ve1jbQdExakLf5OlbtuX1GHzlqZtpa+voy+t5pqdrMZjl8hic83DWETQmmtnwmeg17LkzB5iTdRxZy+WPjIiIiIjIUKTkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUtKRdQBxLz15E3f95eqswxigr2c591z1FbD2rENJtGzhS+2P3HouLz5+XdahJHrl6VswrP2utnzuv+ULXmTZopfa7vrLCVmHUlZv9zK79+qTaesYnXUoiVYsernjibt/wSvP3Jp1KIleevx6MNrz+hl3LXmNrmWvW17jA+jrXWH/uuYbtI8am3UoiZa8/mz7f/75E+Y/f3fWoSR6+Ykb6Fq2oCOvn3Ght5tCb1cuj8G5z7wX2CnrMERqkrvkerVXnitsvvD6vqzjiHumr9C52b3/6DGzrENJNLerq2ODZx4prPH8C7nbdwDLl81tb7c22/ze63uyjiXJ633LbH53d0de4wN4rrfQuel9N/d0WD5vOL20dHHHek/eX1jruWdzeQwuXvZ8e4e12eZL8vkZL+hbzktdKzrzfAzO6e7u3PiBm3tHW4dnHUuS+SuWdcx8/onCuq+8mstjsG/Fi+0rCj25PQ/2eoE5PT25PAZXLN+m/VXdbZchInfJ9S7jZ7Udv9p7cvcFumrxw37qtP0685rY/Gv5nJ7/N2n7zp3GzcplgF+bexVj2zp6T1h9786sY0ny0IqXebJrXt9p096Ty/gArln8SOHk1d/dOa5tVNahJHpgxYvdR07adtTu4zfK5TH4nVevZUVfT8+p0/bL5Wf8XPfrPLzipUKej8FrFz9W+Mpqe3dMas9ny/VBc17pOWzVt3XuM2HTXB6DZ7/2D+b2LOo+bdp7cvklXlro5volj+XyGDxt3kwe78o6CpHa5PIEJCIiIiIyFCm5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlHRkHUBcl/exsLAi6zAGcGBRYQXtls/rkQLO0kJXLvcdQJf3YAVyG98S76JAIbfxQTgGFxe66KGQdSiJChRseaEnt/uwq9BDd07PLwCLvYsCntv4ABxnUWEFZpZ1KIl6KeT7PFjoo4tey2t8ywvdQD7P0130Zh2CSM3M3bMNwJgHrN7/flzb//mEtlOyDSrBosKKtlXaxuQzqwGWFbrbOq3dO609d/sOYEmhywxsfNvoXO7DXi/Y4sIKm9w+LpfxASwudLVNaBvlhuXyM15W6G7rsHYfldNjcGHfcuuwttweg330saivqy3Px+DSQnfbuLbO3B6DSwtdbZ3W7qOsI6/xmYNNyOkx6LgtLXTnMr7FhTNteeHjxVd1c9yZkVlAIhXkruX6g5O2teNX+3zumkXe9tQZfvP6n23ryGnL9XueO6/nK6u/u3OncbNyt+8Avjb3Ksa2dfSesPreuTvmAB5a8TJfeOUPfdfMPK4961jK2e6pMwvXz/x027i2Ubn8jA+Yc0H3/0zdbdTu4zfKZXzfefVaVvT19Jy6xn6dWceS5Lnu1znqxYsLN6z/mXyeZIB3PPW/hatnfLJtUvvYXH7G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" + } + }, "cell_type": "markdown", "id": "d083cd53", "metadata": {}, "source": [ "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ] - }, - { - "attachments": { - "g26786.png": { - "image/png": "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" - } - }, - "cell_type": "markdown", - "id": "0d80cd72", - "metadata": {}, - "source": [ - "
\n", - "\n", + "\n", "
" ] }, @@ -267,51 +352,74 @@ "source": [ "### Load imbalance\n", "\n", - "- CPUs with rows \n", + "Question: What are the data dependencies in the block-wise partitioning?\n", + "\n", + "\n", + " a) CPUs with rows >k need all rows <=k\n", + " b) CPUs with rows >k need part of row k\n", + " c) All CPUs need row k \n", + " d) CPUs with row k needs all rows >k \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0565e92", + "metadata": {}, + "outputs": [], + "source": [ + "answer = \"x\" # replace x with a, b, c, or d \n", + "ge_dep_check(answer)" ] }, { "cell_type": "markdown", - "id": "b90252f1", + "id": "51498a44", "metadata": {}, "source": [ "### Cyclic partition\n", "\n", - "- Less load imbalance\n", - "- Same data dependencies as 1d block partition\n", - "- Useful for some problems with predictable load imbalance\n", - "- A form of static load balancing\n", - "- Not suitable for all communication patterns (e.g. Jacobi)" + "In contrast, if we look at how the work is balanced for the same example and cyclic partitioning, we find that the processes have similar work load. " ] }, { "attachments": { - "g27009.png": { - "image/png": "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EHcRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERGpji2AtzzTGfGGIyIikl9D3AGISEV1A3byzD8RVyAiIiJh1MUdgIiIiIhImpJTEREREUkMJaciIiIikhhKTkVEREQkMZScioiIiEhiKDkVERERkcTQUFIikks3oLNv2RKgLYZYntGJiwAAIABJREFURESkRqjkVESC7A5MBxZ6pl8BbowxiYiIiEgHtwOWUKany0NscyTQ5NmmBT1ZSkRERETKIGpyei7Q6ll/OXBIJQMUERERkdoRNjmtB270rTsH2LkKMYqIiHxFHaJEpAtwF3C0Z9kUYCTwSSwRiYhIzVJyKlLb+gKPAnt4lo0DDgO+iCUiERGpaeqtL1K7NgNeJTMxfQTYByWmIiISEyWnIrXpW8BrwBaeZdcDR2E99UVEREREyi6oQ9QoYIVnWRs2hqmIiIiISEX5k9NJZA4V1URmRygRERERkYrxJ6f+6ab4QhMRERGRWuNPTt8Cmn3LLootOhERERGpKUFtTg8FVvmWXxlXgCIiIiJSO3I9IWoksNL3t6sBJ4YYRURERKRG5Ht86V7AUt/f/4qGmBMRERGRCsmXnALsCSzxrXM3enqciIjERCUkIrXtZeyJUAs8y0ZjCWqnWCISEZGapuRURMYDw4E5nmXHAg8DXWKJSEREapaSUxEB+ADYG/jcs+wQLEHtGktEIiJSk5ScikjaR1gb1M88y0YCTwE9YolIRERqjpJTEfGahpWgfuJZtheWoPaMIyAREaktSk5FxG8GMAx4z7NsD+A5oG8sEYmISM3QgNsia7cewLc881OBKSG37Qvs6FsWZXsRERERERERERERERERERERERERERERERERERERkbVXgnrru32BI+OOQkRERBLtHXDejDsIqZyGuAPw2Ai4Oe4gREREJNF+Byg5XYslYBB+tw+423aqv+6suCMRERGRZGtoGHsUuNuCu2ncsUhlJKBa3z0LuCnuKERERKRDeQGcEXEHIeWXgJJTERERERGTpDanX5n33CS6dW6LO4wMF11/Pa1tbc1Xn3dep7hjCTJr/nwOOPPMtvcfeiixNxxbjhrV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" + "fig-asp-data-updated-cyclic.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAAJJCAYAAABmoMV7AAAACXBIWXMAAB7CAAAewgFu0HU+AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzs3Xe4HGXZx/HvfU46LSSBECB0pGpoggpIUwSVooCogIiK2EVAFFBBBF8QCyiK2BBBOtJbkN47SG8hBAKkh/TklPv945nNmZ2zvc2E/X2ua6/szJlyZ3d29t6nmrsjIukxs5nAyrlld7cUw2kbZrYKMDW26iV33yiFOMYCjwCjY6ufAHZy97mtjkdkWWFm3wV+H1t1srufmFY8WWNmA4HVgSFABzAPmOLuSyrY9wjgHCD+fXSCu/+yGbEWMqBVJ6qVmZ0BrFhikyXAfMILvwSYBLwAvOjuC5sfoYhIbcxsKPAf8pPTx4GPF0tOzWwEMD6x+gR3v6U5UUqzmNlfgS1jq+5w9x+mFY8s28xsAPAp4NPAjsD69M/zlpjZ9e6+X6ljufu5ZjaI/B8AvzCzJ939xkbGXUzmE1TgYGC1GvbrNbOngGuBK9396caG1Vhmtg2wf2zVPe5+Q1rxSHszsx0IN7mc/7r7f9OK5z3sd8A2seVJwCfdfWaJfQYCWyfWjSi2cVSK8ovYqjmtLAV5rzKzLYDPx1Y94O7XVHmY95H/Xr5ed2DSdqJE8gjgx4QS01IGAZtXclx3/4OZrR4dF0Ip7IVm9gF3f7PWeCu1LCSoteog/DLdEjjRzG4CTnL3h9MNq6j3Az+KLQ8ElKBKWrYh/3pcBChBbSAz+wTw9diq+cDe7j6lwacaQP57+RagBLV+m5L/uv4RqDZBFamLmW0G/BsY16RTnEC41veOllcG/mZme3qT24guiwnqXKA7trwc4RdBOXsCnzCz3wA/qaQNhohIM5jZ8sDfyG/f9UN3fyqlkERkGWNmuwJX0b8ZpAP/A+4DpgBzCCWrawMfreYc7t5rZocBT9NXOvsJ4CvA32sOvgLLYoL6KXe/J7nSzIYTmgJsAGwF7A58COiMbdYB/BAYZ2afdff5LYhXRCTpWGDN2PJ44M8V7jsL+Hhi3TONCEpa7mhgeGx5arENReLMbCtCif3ysdVdhKTx/9x9UpH9OgklohVz95lm9lXgRvp+VJ9qZpc1syPnspigFuTus4HZhA5S1wMnm9l6wDHAV8kvZd0duMbM9nD37n4HExFpEjNbk5CY5HQB36m0uiyq/VFzi/cAd3807Rhk2WNmKwCXkZ+cTgP2cfcHSu3r7j2E0tCquPvNZnYlfX1lRgPHAcdXe6xKdTTrwFng7hPc/VuE9nTPJv68G3BG66MSkTZ3DDAstnyuu7+cVjAissw5hdBDP2cWsEO55LQBjiOMlpTzXTNbudjG9XrPlKCW4u5PR72Sbwa2i/3pe2Z2ubvfX+mxoh6xY4G1gFUI44stJnQieQd4wd3nNCz4OkS/stYD1iC01R0KLCS0450ATGj3EuSolP39hOpWByYDD7n7Ow06/kbR8VcHegml/P8Dno1+ydZ7/EGEa3EsMIq+93gR8DbhepxX73kaycxyHRjXJfwK7wRmEHqwP9So9uFRL+tNCE1/FkfneMLdX2rE8WuMaWVCjU7OQuDklMJpiKiX71aE628k4ctyOuG9bHSHr6pFQ+/k7tmrEu7ZSwiv/RTCZ+Td9CKsXzSW7haE76ThhNK0twkjCzSlKVtUE7AV4d7ZSWie8JC7T2zG+SQws/WBb8ZWOXBwK+5r7v6Kmf09dv7lo+dN6XTZFgkqhCYAZrYvYQDs3LBVHcBvCW1VizKz/YFdCSWx4yjTKcvMniE0XP6Du08rsd0Q4N5ocWTizweZ2U4lTnObu8d7kMa//LYFPgisUypOYLGZ3UboAXiJu/eW2b5uZnYnfdUSve6+bRX7fgw4LbbqKnc/tcT2vyQ058j5rrs/EP3IOIzQgzo5XA9Aj5ndARxTS6eVqI3P14DvUHw4j6lmdjlwVg3H/yKwE+E93pww4kOp7Z8kjLX5h6gpTLHtRgK5sTRXTfz562b2aYq71t1LJlpmti6hR+jehC/SQuab2TXAL9z9hVLHK3KOoYTq869S5Po3s4mEa/7Sao/fAIeRXy13cal7RDHRtbNubNUe7j49sc1vCR0ikjVlq5hZuarl7Ur9gIoNa/MVwj2x0OQSbmZPAL8GLq3k/mJmZwI7xFZ9xd3/F/v7KsBngJ0JSedQwo++J939mNh2+wIfI3xGxgGDy5z3ecI9+/elkurox1VuJJjk0F6fM7NS3yX3uPsPEsc7Ajg8turX7n5JqVhj+w4g3GeOICSnhSwys9uBU6ssiDmP8MM6Z393nxj9/78IfJtQ2NPvfY+urR+7+22Vni8NZvY94EuJ1ae5+xVpxFOF75N/z7+uVeOSRv4AfIO+9/7bZnZ6Iwpc+nH3TD8IvwI99tixzuMdnDhe2WMSSryS+1TymAV8ocRxh9V4XAcuL3C8res43sPAWi14P2fHztlT5b4HJGI+t8z2Fye2/wShacdLFb4mS4DDq4xxA+CpKl73nuixdF0F55hY43uca6NU7Lir1XH9/L3EcTsI43AuruJ43cCRVb72HyGMI1npOboSyy+24Pp/NHHOLWs8znOJ44wpsM01dbyfA0qcewfglSqPdycwooL/1/WJ/T4SrR9JKExYVOT4ExPHebjG//e7wKFlruVaX9PrChzvpMQ236vw/d+E0DGu0nP3AucDQyo8/v2J/TcmFORU+l3YQygQaPbn6buJ8/68wv2+Fb0mVe+b5oOQmM5MxL11CnHcmohhl2ac5z3dBrWIiwlf8HEHNelcwwmD2jbr+I30QeBuM6tlUoRlxTGE3tIbVrj9QODPZlZyxo0cMxtHKBH/QBUxddC6tuCjgCvMbO+yWzZIVEtwKfAT+tc8vEmo0XiacNON6wR+Z2Y/rfA8exBummtVEV5La5DMLDko+1Pu/kQrY6iXmR1AeJ3XT/xpDqGd/2P0/UiI2wm4J2p2VO05P03o/PoDypSENsCKwHnRsDqZZGYfBO4BNivw517Ce9FvN0Jp4U1mVmpmxmKOAu4mv1S1lA7gTDPbpYZzNVXUG/1s8kt/T/JlY4rUnYhNiw287O6PpRDHPxPLny+0Ub3apoo/x917zOwS+mZGAPhkhbvPJ9wY7iV8qU4gtOccRLho1iIM/3IIoeoJwgf1D2Z2q7snhxDpisXRbyYpSg/U/2KZWF8nlFo8RChteZtQgrU8oWpqc+ALhOnQctYmVMcdXObYy6qPxZ4vBm6LHrnhODYglNJuFduuAzjXzO509xnFDmxmKwFXkz9lJYRr5d+EkoeZhCRxdWAjwnVXsnlJGXMIXxr3Ea7HiYQpfwcTrsd1CKXGX6Tvi31A9P+5y/u3u5tL3/XYbyYpSvcc/1+R9WeTf13PAX4DnOfub+RWmpkR2qX+mPAe5JxoZve4+53FThy1ybqU/I5HTiiNu4LwWXmX8N6sSfhi35vCX/DNtHti+domn+9fhJKwfjNJUb7NWL/qeDPbHriI/O+N64FfAfd7rIrPzEYREqKf0jeM0qbAnwj3x0qdSLinFmpCUIn5hM9H7p79KuH/P5BwHxxLuC8cQminT3SuM83sFnd/K3E8p+8z0m8mKUoP1P9qjf+HpaImDteQ3yRsAaF0+RLgeQ/jVg4hfIa/RWgSkbMzcC7h3l+NeDOEHsJ3y82Ee04v4QfLZ8m/n3UQZkor1vyg5czsEOAv5F9PJ3qZ5knRvutS+3VYia74PbGIZJO4vHtI1HxtU0ITreGEdtYzgee8RPOuGtxIqOXK3QuS97bGSLvIuoKi5IZW8UfH/Bj9qyRGl9j+Z8BewOAKj78pocNU/PhHldnnsMT2v6nh/7Ue4Yvo/VXsc3TivN3AKk18P9Os4nfCzfwMYNUi+xhwJP2rf35b5lz/Smy/CPhihdfK/Pi+FexzKmHiiYEVvm5bEZqbxOP7Wpl9jkxsf1IN7/UXE8eYAGxUwX4nJvZ7oMS2RkgM4ttPB3au4DwfT+zX1Cr+AtfjNnUcq2wVf2zboYltJ9dwvpUJP+TiVcbfqfD6TlZJjiuxfbKKP/6YRGiDvjN9nT83it7HLyeOczywL5VXab+PUKIfP9/xVV7fZ9fwup6UOEbJKn7gygKvyYZl9jmUcF+P71e06Vm0T7KK3wkFKn8D1i6yjxX4/ziwbRM/UxVX8QOfK/A6/KSKcy0pcW024vFcBTFcntjnS4QCsgMJPxjmlzj+E4RaiIo+ExXEcnvi+Gs2/P1t1oXTwAuwGQnqmAJv3s4NjvvQxPFvLbN93QlqHbHekTj3wU08V5oJ6gPA+yo8168T+04HBhXZdmMS7UiB/ar4f+V9gTfpdU/eyK8ss31dCSrhl/WE2P7zgE0q3NcIJV5lv+QIpbzx7RZTYZssQket+L7NTlDj7WPnAB11HKvVCepPE8f4RRX7fjmx799KbFsoQZ1J6BhS8PPXwPfnwMR57ymzfUsTVEKtV/yH8xIqLIwgNLGJn+d5wEpsn0xQn63kcxV9dpNtY49p4ntWUYJK+LGSTDBPqPJcWUhQk22/f00oma/mPBNoTB71s8RxD2j0+9uObVBx97cJvwbjklWz9UpW363T4OM3UrJaap00gmiBk7zyoThOIVR554wkv4lA3NHktyO9zN2vrCG+Zmr19bgf+b3Mz3D35yvZ0cPdLzm6QXLmpJwfJpbP8HTaZJUUjS4wNrbqf96CUTMaIaou/k5s1WuEz0el/k3+DEnVVAfeBXzA3c/y5k9PfS3hizZnnSafr1rfJr+K+S/uXumA67+irykThB/VxT5ThRxQyecq+uxelVhdTZv8hjOzTxKaAMV7vh/vJUaAybBkG/ujCbUJ1VgXGB+NTlSP5Ag3G9V5vH7arg1qzDzyGxtX3Xi/FHefZWYL6WuLWmxYnSx4O7E8KpUoMsTDsGQ3k98ecltC25uloraT+yR2/12Tw6tFsi1ds6/Hz8ae9xDafVXjjsTyh5MbRMNixYck6iIMgZJFyfZrVQ9flqLtyR927B/uvrjSnd29y8zuo68t5FgzW8PdJ1ew+/Hu/mYVsdbM3Rea2Wz6vheyds9O9pX4Z6U7uvsSM/s3YaD1+PHGV3iIan5MJSfFSQ6h2DJm9nFCs4h4B83j3P20IruU8iGa2wZ1Uak/mtkwCg8p6ITawesIo4S8QWjKtiLhu3wcoUY33rdiCPBvM3uxih85Scl+B9UmymW1c4Ja14VmZoMJ7as2JZS+rhI9coNVjyK/x2nJsSqbKeqw8H5CJ6BVyY9xFP1/laUWa8bcS36COq7ANpuT/0U22d0fbGpUBUQldJsShp8pdj3GNfs9jne+eymqtaiYu083s/n0dVxZs8BmO5Nfcn2fZ2Bg+CLWTiynNllADT6aWL6zhmNMTCyPJUyK0TLR2K2bED4nYwifi9H0fT5GEr7UczJzH4wGxY/fp+cQRkyoxu3kJ6gfqTeuImYllhta+FMpM9uZ0HF1SGz1j9z9V7Ucz90fb0RcdSg0+sLFwMleeszou8zsbMJ7/wv6cp9BhDbF2xXbsYyJhEKB3OckeY+rW1smqFGp1/KJ1WVnEjGzNQjtlD5HGC4ms69fNHPWgYS2N4W+3KW85EgJhV7H5ED/LateNrO1Cb2IP0dInjtbde5SopmFxsRWjTazW2s4VDxBSA6KDv1f+yzPa578clmWZi5Kvs6nRbVD1UgOS1Xo/Wy46Fr8XPT4IBm+Z5eRnPDjmag6vRrJkrJik4jUK9lbvJmljgWZ2UcIJYrxkT2OdfdleXrzQon+UV7BrIdRc6JTzWw58n+kbGtmW9fSLMrd3czepa/wo5bhy0paVj+s9RpD//970WqkqGj9OMI4mkOKbZcFZrYJoZpzt7RjeQ9IDitV6AOYLJl8vUmxLBWNJfkz+s8okhXJ12QExdvvVmq5Auta/trXYVhiORPTIVcoWUW7fQOOmXw9GipqN3ssYUiooWU2XxYk5ztPDllYiWmEqvpcrcNQMxvq7tX+2Cgn1amVzSzXFCteCPVDd/91SiE1SqFpyStuahM5mTDLXrzJzn7UXrAST1Ab/plu1wR108SyE3oe9hMlA/+l//hjOW8ResVNJNwAZhISm+mEmTtadnOMqjRuLHLObuBlQpxvE+agnkGId1NC8i35knNYJ0vdoX9JUFMTDzMbQahiLTZg9huETiyvk389zgAua2ZsMS0pHStwniwnfckftnMLbpVNzXg/m1aqFhUo3EJ+++S4twk9nycREr0ZscdfgJWaFVsdkglq1dePh/FR55H/Q3sELW5q0WTjCD37k+9htaXNWZRsOgFVFpi5+yIzu54wRXFOPZ3Y4j9GGp7rtGuCumti+Ul37/eBj5oCXEH/5PRJwoDT15dqW2dm/6g30EpFJafXkn+RdBN6L55HGEi74C/lBvTme69KfuAKJUAt+wyZWSeh2iqZnD5MuB5vLtYGM5pDu1WSXwZPEEqz6pEcdQOWrftXsqRjWS7VO5T+ne6qVWvHjEpcQv/k9GnCZ+S6Up2zzOyPTYyrHsnSs1qv/eR+hUrllmXJDqs5Z5jZTHc/r9YDm9nXaO6sf7PdvVQhwhzyS8Ah/Nioqn0/YYixuHpmj4zfx6otzS1rWbrBN0T0RZ2cRePqIpt/kv5DopxKmHmip8D2afoF+W1UpgCfc/e7U4qnEmZmVkNbqlYZnlguNJNUMmktVBXdKAeS37HBCQOSn56x1zA5bSnuXmoWqlol23E287Wv14LEchZL6YpJXvfPuXsm2/ua2ccIk6rEnUEYDWBZTsbq7ngUzTKUrIYtVCr3XvAYoXRvp2jZgL+a2Wx3Tw6DVak/0dwmVc9TopYrKgGfTX6NRvI7qhLJ+3Mtx8iJ38eS97i6teM4qAeRP75dN6EqvpBkyeK/3f0nLUpOK+7wErW3+nRi9SEZT04h3DSynFRsnFieVGCbZIeAZnZIS16Pf3b301qUnFZzr5ieWF6rSSW4yQQ1y50Bk81FUunZHKm2M13y/Vy34FbZkPyMXOnux7YoOW1mJ8VpieVa3oN1EsuzWzC2bBruJfTB2JtQe5PTCVxsZska1GVJsvSzWFOvUpI/UvoVKFQhnqA2vO1xWyWoZrYaYcDiuEvdvVjniuSwQrX+8qrF4PKbLLVxYvu5lJ43PU3J5L7hPf8a6EOJ5XsLbJPs6Z9s39xIrbwek0lvxddj1Owl3ulwJP17gjdCcmiVZr729UrOsZ0c2q2Vqrm3ADySWK5mgPdWS/Oe3cwOtE+SPxbpRlFb22pskVjO3IQWDXAPsIe7v+vucwhTQr8S+/tg4Goz+2Aq0dUv+VnsNz50BcYmlsuOAlCIma1K/jWfvMfVrW0SVDMbTqjKj7e3mEf+kAtJyYbpExodV0yyfWg1N7t+cWasyjcuWSWe2iDOpUTDceybWH1ngU2fSCxvEo1Z2AytvB6Tg0ZX++WbHGj/a3XEUsyTieVdomrMLEq+V4XG1G2WxeT/4Kg2QU2+l/ubWfJazIo079nVvq4Vc/fZhOltcwbQv9asnOT97P66gsqmO9x9aW1F1CZ/d/Lbaa4A3Bj126iYuw9yd2vio5If2LcklveOvquqkRyFo1DBSyWS97CGf9baIkE1s00Jb0JyQNpj3b1U1p+slqt4hqXoi7Ka1zeZuK1exb41xxlp2o21gGQnnm2q2HdM+U0a5ofkV8M+4O7PJTdy9+nkz6hhhGE8KmJmA6i8arCe97na97ie6xFC57y4r5jZllUeYykzKzSCwuPkN7FYifyJFcpp2XUflebEhwZq2fSP0RiI8U6gQ6PRICr1EPkD7a9MGK6mJkXey0ap5549gOr6ZSQ/I2tUsW8tLk8sfyfqyFuWmY2lbyavYsd7T3L314A9yL9XjCJM99nwweWb7L/kJ9ujgG9WunOUCyUnaLihxliSCerLNR6nqPd0gmpmY83sHEIp12aJP//d3c8pc4jkL4KKvvzMbHPgQaobFyw5s8wOVXyJvEZ+9c8aZla26N+Cw4Fyr0MjJTtXfKNc+0QzW8HMzgLObF5Yeefbnf4l66UGeL4gsXyUmSXbrxY6zyaEUoxKmzkkr8eKRl8ws63pXzVUTvJ63K3KX+o3EhLInAHAtWZW1XR4ZraqmV1IGDomj7svov+X7KnRzGnljrsDtc2IVI/4DGOrm9k6LTx38ssj2ZGoKHfvApJTQ37HzPq9J6WYWYeZfYVQDdsstX5GNgbuo7oOI8nPyHZRtWeznEt+T+kdgcPL7RSN/nEO+T2ub69jistljrv/j3DNx0u91yQkqc18zxoqakudnM75FDNLNkfrJ3YdxH/U3ODuyalpK5UsiX2oxuMU5+6ZfhB+LXjssWPi7x2EX/SrE+aa3Z8wiPmDhPaOXuDxD6CzgnN/I7FfD/AtwIpsvz7wZ8KQOMlzzi9zLiOULsb3uQgYUGTbMYl1Dyb2fRXYrMi5Ogltcx4p8vr8sYnv56cKnQ8YXGDbVQglmdOKxHlumXNdnNj+PuAwYKUi2w8l9IpflNjvxmLveSzOmYl9JgG7Fdl+Y8J4i0sK/b9KnOfYxLZdwJdKbL8RYb7uQp+Dt8u8doMIpW55rzfQUWDbDmC1Aut3oK96OfeYDXy90Pud2HcLws10QbTfcUW2ez/9P29PAuOKfG62JczN3VvgNXmxWdd9kffv+3Uc67nEscaU2f73ie3fBNYqsu1qyes9uh6S9xgn/Dhbp8y5c6U8L0f7TCix7fWJ43+kytfly4n9e4Ejk/+f2PbrAGcX+Sz2VHC+NxL7XAEMLLJtv/cIOCmx//fKnO/UxPbdhO+pYv+/lQi1GfF9lgDbljnP/Yl9Nq7iPdgsse89TfxMfTdxrp+X2f7T9L9fPE6R74QsPggFXxMS/4eZwKdK7DOCMAxlfJ+FwOY1xjCUUFuRO9aUYtdgPQ+LTpZZZvY29Y3TFbeYUDJ2plfwH48aob9E/6qbV4EHCDenxYTkeGtKdwRZ4O4lS6DM7HT6jxf5PDCekKgvT0iCtwcedvcDYvvuDVyT2LeHUFrxImEw5uUJvxo/Rv5MEkl/cvdvl4q1VlFp6QvAhok/TQHuiv4dFv19e0pXf//F3Y8oca6LCVOBJi0iJKsTCB/sYYResbvQf1SBycBW7l5y5hYz+yZhGJKkFwg/BGYREtkt6T86QB53L1htF7WjfoX+7XZfJIyFOonwhbUGIRErVY38jruXbDJhZn8Gkq/v08CthOrqFYH1CHO13+zu/Zo2mNkRhB9tSVMJ1VWPE36AdBCuzXWAT9C/R/7x7v5/ReL8HSEJSXqUMAHHHMJndFtKd056yd03KvH3upjZNuSXZN/p7rvUeKznCPPK56zupcdk3or+nWLeJbTLf5WQyK1FuGa2JfyA6E4cY/Uo/mRzj27CfeZ+wjU4lzDH/eqEHynbkv85fs3dC5akR4OIfyq2ant3r7itpJkNJnzm1kn86bUovjcIn/8xhAKNUp1let29ZPMbMzsZ+Gli9UuEtoKTCfeT9Qj3smfcfa/E/icBJ8ZWfd/df1/ifAMJ965k3I8RfpA/TfgROJpQwvql6HncT9z91DL/r/vJ74CziZee7z2+72bkT3xzr7vvWMm+1YpK8eOv18nufmKx7aN9vkT44R6/z95N6FzV6Fm1miKqIb2d/n0D/kvoGPg8IRFfnTDU1sHk19Q5cLC7X1Tj+ZP5xiXunhy+s35p/xqoIFNPlqDW8ugG/gW8r4bz70T/UqByj0WEmZnmxdaVLEGN/cqZVOE5Li+w/7k1vDYvEqrv4uuaVoIaxblD9J5UE+f9wI8S66otQa328TKwXoX/JyOUzFdz/F7g/whfKEvXlznPJ2t47eYD306sK1mCGp1rDP1L9Ys9/l7iOAeT/1mo5VGwBDU6/hDgtiqPt4hQ05L3WWjB/ezl2Pm6KVP6WOI4VZWgRvv8rYrXp1/NTXSMdQg/hup5L5tWghod4yOE0qFqYlpCKLyYEVtXSQnqSoQEv5JzXFdg/5MS25QsQY32GUWoTq3ltT+NCkq6eI+WoMb2O7rAa3Ntses+iw/CD7k5NVwDi4HD6zz3ZYlj7tuM/+N7uQ1qL6GU88fARu7+JXdPthkqy93vIrRdKTRIeyG3Alt6mPfXqzzXTEKPw+TQRZX6NpW301xIGNx/S/q3C20qd7+X0BSjkoF9ZxNKlT9K/b0E/0P/MR0L6SV8mX/I3Ss6p4dP7eGE17+3zOYQSnn2cPfjKtw+d54bCXMnVzqt53WEUrGq2xl7KJH7BPkdZKrm7hcSSnyuoIr/a+QpQuJQbKxiPLRF3YfKp3J9gFA61Mq21zkXx553UkUHhwb4DuGHes3cfSKhZO4nVD8f/EzC5+qwemIox0OJ6yfpP3ZoMXcAW3sooa/q+nT3dwkdcGptx1c1Dx0zdyNcv5WO7zoFOMzdfxzdq9qau/8GOD2xei/gvBbPulczd7+B0PH74Sp2ewrYyd3/Wut5o5qU+IgQ7wI313q8kufK+rVqZidQflDrBYRfBe8SSlxfBl5194ZNvRU1pD6WMJtPsvpxEqGq7CJ3fyi2z8mEtlsAXe6erAoqdq7BhKqZfQnNBkYSbkTTCVVUjxF+jY8vsv8OhNLGXcnvqNUV7XsJYfzXd6Lt30+YwCDnQXcvNrtWw0Q9S39M+H8mqw2fILQV/LO7zygS58Pu/p8Sx09W8e9BGM1hH8LNaCtCKeEKhC+zScBNhOqKmr9wzGw7QjKwD/nX7mJCtcylhEkfuqPtTyTWgcHdf1zBOVYnvMcH0H90gwmEap6L3P3xaHsjlNbmzPUy1Xyxcw0lzN28F+EHzQjCtTQdeJ1QTX+Vu99ZwbE2JPQm3pGQtI4kv+f0O4T3/gHgCndPDkxd7vifJLRx3YP8XvrzCO/thYTPjkedvuKfyenRD8umMbO1CM00csNhzQTGuntVs7CY2VHkN9M51QtM11xk3x0II03sQPjcDSG8l1MJI1I8BvyuXCITXRefBXaOjjWW/CYyiwhVvY8SegqP9zIDw5vZl8lvAnO3nzSlAAAgAElEQVSOFx+nuqSos9wxhJkDk0073iRUUV7ksSYEZvbT2P/Box+QlZxrEOHe9FnCyCQjCU2sZhDu2Y8TOqTcmNjv44RkM+dar65Jw6aEz+anCW3O47oJ97vrgb96GEmi0uN+i/zX7DfuXlHCb2ajgR/EVk1090LNfOpmZh8hDMifc5u731rhvgZ8n/5NCC9x9+QQdpkW3fcOJlxLyeZ7swlV/5cA/6n3B0qBZi2/c/ej6jlm0XNlPUHNIjMbQ7gIFgHTopLPzIlummsSeqbOAiaX+4JISzSJwihCye5b3oC2QIUSVHdPjiPXNNEv8dGEtqczgCne4Bltopts7npcAEz1MGbiMsPMViSUJs5uVOlONGTQaEKiMJXw2mfiZmdmFxC+THJOcPdfphVPI0U/rocBC6OS7UyI7i+rEqryp+V+9L6XRD8YViXc76cS/p/L8vSuUgMzG0n4zukkFLxMa+B9dRThB3ZuBqkuYAN3LzTLYv3ny8g9W6Th0k5QRQqJhqF7kr6OQ3MIN/lKq6RFRFrOzM4klDrn/MMLdI5tlGWirYWIyHuFuz9D6FCXsyL9xxkVEckMM/sA+W3m59N/BIuGUoIqItJ6PyW/o9tXoqFbREQyJWq6cwF9fWoATnf3t5p5XiWoIiIt5mGO8GTHgr+aWbOnyxQRqdbp5I+r/RT9R0FoOCWoIiIpcPe/kz8P9qrAdVVOKSsi0jTRyBrxdqdLCDMYNr3DtRJUEZH0HEYY3ixnS+DCaMYgEZHUmNkehAmA4n7g7v9rxfmVoIqIpCTquf8ZwvBqOfsClypJFZG0RMnpVeS3O/2Huxea0rs5MWiYKXmvMrN1CYPK57xczWDVIq1iZusTxq+Me64R4wGLiFTLzDagb7zTnGcaOQFS2RiUoIqIiIhIlqiKX0REREQyRQmqiIiIiGSKElQRERERyRQlqCIiIiKSKUpQRURERCRTlKCKiIiISKYoQRURERGRTFGCKiIiIiKZogRVRERERDJFCaqIiIiIZIoSVBERERHJFCWoIiIiIpIpSlBFREREJFOUoIqIiIhIpihBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkihJUkfcwM9vFzB6NPT6fdkwiIiLlDEg7ABFpqpWBrWPLo9MKREREpFIqQRURERGRTFGCKiIiIiKZogRVRERERDJFCaqIiIiIZIoSVBERERHJFCWoIiIiIpIpGmZKRAoysxVI3CPcfVZK4YiISBtRCaqI9GNmuwNTgZmxxzdTDUpERNqGSlBFJI+Z7QZcDQyJrT7e3f8vpZBERKTNKEEVkaXM7COE5HRobPVx7n5aSiGJiEgbUoIqIgCY2YeAm4Hlo1UOHOXuZ6YXlYiItCMlqCKCmW0B3AisEK1y4AfuflZ6UYmISLtSgirS5szsA8B/gZWjVQ4c6e6/Ty8qERFpZ0pQRdqYmW0EjAdGRqsc+L67/yG9qEREpN1pmCmRNmVmGwJ3AKOjVUpORUQkE1SCKtKGzGxt4FZgTLTKge+5+9npRSUiIhIoQRVpM2Y2llByuna0yoHvuvsf04tKRESkj6r4RdrLGsCdwLqxda8DF6YSjYiISAFKUEXayzHAeol16wDXm9mw1ocjIiLSnxJUkfZi0b+PA7Nj63cALjOzga0PSUREJJ8SVJH2cw+wC7AnMD+2/lPA+Wam+4KIiKRKX0Qi7eU2YA93n+PuDwJfALpjf/8CoAH6RUQkVUpQRdrLde6+ILfg7tcBhwG9sW2+bWYntzwyERGRiBJUkTbn7hcC30+s/qmZHZ1GPCIiIkpQRYRogP5fJVafYWZfTSMeERFpb0pQRSTnx8DfYssGnGtm+6UUj4iItCklqCICgLs78A3gytjqTuAiM9s9nahERKQdKUEVkaXcvQf4InBrbPUg4Aoz2yadqEREpN0oQRWRPO6+BNifMJh/zgrATWa2STpRiYhIO7FQqyci70VmtirwgdiqF939jQr3HQVskVg9xd2fblR8IiIihShBFREREZFMURW/iIiIiGSKElQRERERyRQlqCIiIiKSKQPSDiDHjC2AQ9KOQ0RERDLtRHfmpR2ENFdmOkmZ8Xng4rTjEBERkUxbzZ0paQchzZV6Fb8Z48zYv2PANT9LOxYRERHJto6O835rxv5mrJ52LNI8qZegmnEW8L1UgxAREZFlzWfcuTrtIKQ5MtMGNcc6YOgKaUfR36J50xk4aDk6Bw1NO5SCuhfPo6enywcPW9nSjqWYhXPeYeiKq6UdRlEL505hyLCRWGfmPhYALJ4/k86BgxkwaLm0QymoZ8lCursW+uDlRugarNGiudN80LCVrKNzUNqhFLRkwSyscwADB2fwJg30dC+ma9Echiy/StqhFLVwzjsMXWE1yOinZPGC2d7ZOcAGDF4+7VDyeC8snJt2FNJKmfsmXm4l+HwGK/uvP3u/7o0/dPiADbY5OO1QCnrmzr8wZeL93bt9+YqBacdSzAUnbOZfPGlGRm/LcMkvtuve4+s3DRg+Opuzed7y10N7x266Z8em238r7VAKeuXRK3n5kX927/nN/2b4GtzUv3jSzMxeg5f/cofunQ++YOAqa22bdigF3XnBdxg+ZrPeLT52fOrNwwp588W7ePSGE7r3PeqRzH235Vxw/Kb+hROnmXV0ph1KQbeff0T3qLFbD/zArsemHUqeuTPg0lPSjkJaKZM3GRERERFpX0pQRURERCRTlKCKiIiISKYoQRURERGRTFGCKiIiIiKZktmejiIiIiJpMGMgMAoYGT3mATOAN9zpSTO2dqEEVURERNqeGSsBhwC7A7sAhQaDXWTG08B/gauAR90pOOORGV+i9EREs4CFwJvA08B4d16tIM7LgXWjxbvdOarcPgWO8TB9tegXuHNWtceohRn7Ab+KFk9z56/FtlWCKiIiIm3LjKHAD4EjgZXLbD4E+GD0OA541owzgQvdWZTYdjVg6ypjuQ84zp17Smy2afQAmFzN8WO2AnKD8d5e4zFqsQ+wXvR8eKkN1QZVRERE2pIZawL3AD+nf3I6nVCy+SDwElBoLqvNgL8CJzcopO2BO83I1kwJDWDGocBBlW6vElQRERFpO2asRUg+x8RWzwPOAi515+nE9gaMA/YAvgasH/9zBaf8THT8nJHAqoTq+s8Ca0frO4DTzZjrzjkV/4cyxIzVCK/PSGBj4FPAR6s5hhJUERERaStmDAYuJz85vR/Yz513Cu0TtTV9EnjSjF8T2queAqxe4WnvcmdWkXh+BBwL/IK+ZPc3ZlzjzlsVHj9Lvk4ola6ZqvhFRESk3fwE2Da2fCfwsWLJaZI73e6cRyhRva7eYNzpcudU4Dex1UOBg+s99rJKJagiIiLSNqLe+t+NrZoOHOTOwmqP5c50M/YBxjYovF8BP6CvA9Nu9PV6X5ZcQCiRTroeGFzJAZSgioiISDv5OrBSbPn0eqrRo6r/SXVHFY41zYxXgfdFqyptPpAp7rwGvJZcb0ZvpcdQFb+IiIi0k71iz+cDf0srkCLejT0vNBZrW1CCKiIiIm3BjGHAdrFVd7szO614ioiXmk5JLYqUKUEVERGRdrE1MCi2XKidZGrMeD+wRmzVI2nFkjYlqCIiItIuVk0sv5hKFAWY0QGcllh9VRqxZIESVBEREWkXIxPLBcclbbVoutW/Ap+Mrb7XvaXTkGaKevGLiIhIu1gxsVxo+tJmWcds6XSqg4HlgHUI47EeAqwW23YWcFgLY8scJagiIiLSLuYklpMJazM9XuF2bwKfceeVZgaTdariFxERkXYxM7E8IpUoCusC/g5s486jaQeTNpWgioiISLuYlljesIXnngh5A9XPIVTlTwLuAca780YFx+mKPe8sulURZhhgsVVLqj1GKyhBFRERkXbxJNBDX2K3M3BKi869lXtDOmXFmykMqWH/oeTXoGdtHFhAVfwiIiLSJtx5l/y2oNub9evZn3XxmaZqiX2VEsfLDCWoIiIi0k7Gx54PAb6XViA1ejn2fAOzqqv5N0ksP19nPE2hBFVERETayZ+AxbHlI81Yr9aDmWFmrF1/WBWLzy61PLBjlfvvGXveAzxRd0RNoARVRERE2oY7bwHnxVatCFxmVv2QU9G4plcB32lQeJW4g/yOTcdVuqMZqwBfjq262535DYqroZSgioiISLs5AXgttrw1cJ9ZZb36zRhgxqGE0sd9mhBfUe68A1waW7W7Wfkk1Ywh0X7xRPyPDQ6vYZSgioiISFtxZybwWWBBbPXmwLNm/NmMHc0YGN/HjE4ztjPjROA54J/Q0qr9uBPJn6b1l2ZcZsa45IZmDDJjT0LTgF1if7oTuLqpUdZBw0yJiIhI23HnSTN2BK4kTDkKMBA4InosMmMKoZf7KsCqFB93dHGR9U3hzmtmHEJoXpBLpA8ADohifg2YB4wCNiC0VY2bBHzBnZ5mxGfGDync9CA+LNbPC5T8vuEekmwlqCIiItKW3HncjG2AXwKHAoNjfx5C6RLSXkJ70D8A1zUtyCLcucGMXYFLgDVifxodPYq5nZCcTm1ieEOBlSvYZmhi3dIxXpWgioiISNtyZwZwhBknA18FdgI+BAwrsPkc4F7gbuBSdyaWOPRE4L+x5a4i29XMnXujdrNfAQ4GtqFwbjeHMFvV2e7c3Og4CphA/v+9UlNyT5SgioiISNtzZzJwMkDU/nQUMAJYgVDNPyVqu1rp8S4DLmtCqMnzLCR0dvqjGcsRqvRHAMsRZomaDrzcrOr8IjFdCFxYzzGUoIqIiIjEuNMFvB09lhnRkFFPpR1HI6gXv4iIiIhkSuZKUJcsnM2jN5zesmLoSs2f/Wbna09d7rOnPNubdiyFTH39kY4Fc94a8OgNx2Xutcvp6V7cmeX4eruXdD5z95k9Q4aNSDuUguZMe7Fj0jPdvmD2G5m8Bme+/bzNmT4h09dgb093pq/BrsVzBzx37zm9y610lacdSyFTX3+wY/6ct6x78dxMvoZzZ77OgjlvZfo9dno7H73xhB4zSzuUgma+/fSAebMn9S5ZOCtT1+DihSOBY6qd0lOWYZlLUAcsWcRGj4zP3EX4xrwpvSPmL+l43xtvZi42gK5Fb9PdM683i69dzjNdizzL8b08b6aP/d/dnSM6C7WLT9/k+W/7SnPn2UZvT83ka/jq4unM7Zqe6ff42SULMh3f6/Pf9XWef7Ajq9fg1PkzGDV/kW80bU4mX8PJXbOZunhmpt/j5xbN8/c9emtnVqsvZyx4p3eFjlkdG80aX37jFprXuwbPc0zaYUgLZS5BHd4xlFNH75V2GP28tmRG74ErbdWxz4ofSDuUgv4x6wEeW/hmz6mj98rqfY9b5j2fyfc2594FE3qOGbXbgPUHjUo7lIIOn3yR77zchnbQ8A+mHUpB18x5mivmPNl96ui9BpbfOh03z3su09fgwwsndn9jxA4Dxw1Zo/zGKTjqnf+w4aBV/Zsjdshk8d8981/ltzNu7zl19F6Z+27LuXne85wy+tN0ksmXkO+9fUXP5kPGdHx95e3TDiXPG10rc8PctKOQVspsMiMiIiIi7UkJqoiIiIhkihJUEREREckUJagiIiIikilKUEVEREQkU5SgioiIiEimZHYoDhEREZE0mdEBrAQscGdx2vEsq8wYBKwMLAcsBGa5s6jUPkpQRUREpO2ZYcBHgU8AuwHrAqMgDFprxkLgecJc9+OBm9x5t8TxPgF8tsQpFwELgNeBZ4CH3VlSQZwnAWOixafc+VO5fQoc4xz6atHHu3Nltccoc/xVgD2A3YGtgPeRn3N2m/EscBPwF3deSx5DCaqIiIi0rSgx3Rc4ERhXYtOhhGRrK+AwYIkZVwO/deehAtuPA75eRSizzbgEOMWdySW2OwDYNHp+LVSfoAKHA7kZ196FxiWoZvwT+CJQatKWAYTXZxxwtBknA790Z+lU3mqDKiIiIm3JjGHARcB/KJyc9gLF5rAaBHwOeNCM4xsQznDgG8ALZny6AcdLyycpnpzOAjyxbiDwC+CP8ZUqQRUREZG2Y8aKwG3ANok/XQdcDNwFvONOrxlDgNWAHYA9CSWuw2L7rFzBKX9AqNIHGAysEh1zfWD7aB3A8sDVZuzlzk3V/r8yZAmhhPc64H5gojvdZgwAtiQk44fB0nl/v2HGeHeuAiWoIiIi0maiav3zyE9OJwFfcOf+5PZRh56J0eNCM0YDPwK+CQyp8LTnuzOrSDyrAb8DPh+t6gTOM2OjUu1cM2oJcAbwK3emJ//oTjfwCPCIGfcBf4/9+XgICaqq+EVERKTdfJP8DkwvAh8ulJwW4s4Ud44CtgOeqzcYd94htNu8PLZ6NHBgvcdOwbbuHFsoOU1y5x/AHbFVW5uxKihBFRERkTYSDXl0XGzVIuBz7rxV7bHc+R/wQRrQycgdB36cWL3MtUWt4XW8MfbcgLVBCaqIiIi0l0OANWPLZ0WJZk3cWeDOg/WHBe5MIDQjyBnbiONmXLLZw1BQgioiIiLtZf/Y8y7g7LQCKWJa7Hklna+WdasmlqeDElQRERFpE2YMJPTEz3nAnTfTiqeIkbHnZdtxvgd8OPZ8IfAyKEEVERGR9rEFYRinnPvSCqQQM8YSZrDKeSatWFrBjNUJM3fljHenC5SgioiISPtYI7H8dCpRFPcT+sYFhTCG6HvZLwkTHuQsHaxfCaqIiIi0ixGJ5ZmpRFGAGUeRPzXqi8DVKYXTdGYcBhwaW3WDO7fmFjRQv4iIiLSLZKej1AbBN2MosBawLXA4sGPsz13A4e70pBFbs5mxDfCn2Ko3CbNKLaUEVURERNrFgsTysIJbNccEs6Xz0A8nvyo/biHwZXfuaU1YrWXGJsAN9M3AtZgwg1d89AIlqCIiItI2klX6ySr/ZhpewTYPAd9054lmB5MGMzYEbqNvaKku4EB37k1uqwRVRERE2sWMxPJaqUQR9BAGqZ9IGE0grw1mmf1yau1LFC+97a7xGNWd0FiXkJyOiVb1AIe6c02h7ZWgioiISLt4BnD6ErSdgN+26NzrAbOj5z3uzKnxOPH9hhTdqggzhpCf2NYaRzXnfD9wM7B6tGoJITm9pNg+6sUvIiIibcGdd4DnY6s+GnVWaoXZ7syKHvUkhfF9V6ph/2RHsdkFt2oQM3YE7qYvOZ0P7FMqOQUlqCIiItJebo89Hw58Na1AavR67Pn6Nez/vsTyq3XEUpIZ+wC30Nf+dibwcXduLrevElQRERFpJ38GemPLPzKrb857M5arL6SqPBp7PsKMLavcf7fYcwceqz+k/sz4NnAlLC2hngzs5M4DleyvBFVERETahjvPAlfFVq0J/NOMzmqPZUanGacAJzYqvgrcBUuHqwL4fqU7mjEM+Eps1VPujZ2sIHpNzgTOhqWv6RPAdu6VT92qBFVERETazY/Jb3u5N3CVGStUegAztiY0FziB4mOaNpw7rwA3xVYdYsZ+5fYzw4A/kD/d6zmNjM2M5QnJfzxpvg74qDuTqzmWevGLiIhIW3HnFTMOBq6lr7BuL+BFM04FLnHvNyQVZqwEfAw4hJDUtiwxTTgpimMQIf5/m7Ep8Ft35ic3NmMt4HfAZ2OrXwQubHBcPye8jjlXA8cCq5otHfu0EtOUoIqIiEjbcecGM74A/B1YPlo9hlA1/XszngYmEXqdj4j+tgkZKNxz5xEzjiaUiAIMBk4GjjfjHuANwjSuowgxb0V+rfl8YH/3fjNr1WtQYnnf6FGtr6f+IouIiIikwZ3LzHgO+Avw4difOoBx0aOUtwlzyje0qrwS7pxtxkLgj4QEFcK4qB8vs+sEYL9q2oOmQQmqiIiItK0oUfuIGbsA3wI+CiWro98E7gQuBW52LzoT0yLCTFFLT1V/tPnc+bsZdxCq0b8ArFhi80mEEtdz3Znb6FgiC8n/P9dqsRJUERERaXvu3AHcAWDG+4B1gJHACoQOVe8Ak9yZWOHxfg/8vhmxJs4zAfhGNKzTFoQq/RGE4Z3mAFOBx915rQWxHEtIluumBFVEREQkxp2XgJfSjqMa7vQQxjRtyrimraZhpkREREQkUzJXgjq/dzH/nPVg2mH0M7nr3Y5b573ArJ5Gd3hrjAcWvMbrXTM7s/ja5Szs7crke5szv2dRx+XvPsFqAyoeBq+lJnbNtLvmv0KX96QdSkFPLJrM213vZvoa7PLebF+DvUs6r5/7DE8sfCPtUAp6afEU5vQssqy+hi8tnsY73XMyfQ0u7u3m/FkP0pHa6ESlvb5kRsf83sUMqn7M+qaa1TMm7RCkxTKXoC7pWOzPDhvflXYcSb3zfOC0IbN7nx32QrHG0Kma1s2Axe727LDxS9KOpRjr8EFZjm/gXB84cegD3TMG5k2BlxmL5vvAGYNn+LPDXs7c5wPgjW46F3R6R5bfY5uV7WvQ5zLwtcEP9cweTCZ/hcyY6wM7B07l2WGvZPI1nGp09iz2ziy/xwMH+KDnht3aZU3oMNMI7y7wgYs7rffZYa9m6rtuXvf6BgxMOw5pncwlqKsMdrtyV0+Oo5W6nW+i+2vvY8DB62cvNoDfPgMPTKPr8l2yGR/AqIvwLL63OeteTvdZ2/mATYanHUlhe99K7x5j6fjWxtl8DS98Ff75Cl1Zfo9H/jvb1+DGV9J12jYM3HaVjBVfRQ66CzYfTu9x47L5Go5/C37yKN1Zfo9H/hu/fBcf2JnNAlQ+fyddW430gce+v994lqmaMLeXDa5IOwppJbVBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkihJUEREREckUJagiIiIikilKUEVEREQkUzI3DqqIiIhIGsxYBfgYsCuwATASWBFYDMwEXgSeAm5155kyxxoHbFfmlLOBt4Bn3JldYYwHACtHi6+7c0sl+yWOcTgsnc7sKXceqvYYFZxjLPAJYFtgK2AMIe7FwHzgBeBB4FJ3nk7urwRVRERE2poZGwE/BT4PJSfK+FBsn1eAfwLnujO9wLafAE6vMAQ342HgX8Df3Ck1G9pJwKbR82uh+gQVOIe+/+cZ0LgE1Yx9geMIiWkhQ4HhwBrAbsDxZvwH+Eb8dVQVv4iIiLQlM8yME4BngYMonZwmbQCcAkwy47B6QyGUtv4ReNaMzes8Xpq+SvHktBAD9gMeMmNMbqVKUEVERKTtmDEAuIBQahr3MnAFcBcwGVgAjAJGAzsAewAfiG0/lL4SzVLOJ1Rv5ywPrBIda3Rs/QbAvWbs5M5Tlf5/MmoqoZT3LkLziBnAcsCawMeBwwmvA8B6wD+APUEJqoiIiLSnX5KfnM4HjgL+4U53YtsJ0b/XAT8yY3vgREKSVakfuDMrudIMAz4K/AbYOlq9EnCRGVu55yW1y4pngZ8D1xRprvA0cJMZ5wL3EBJ1gD3M2MidF1XFLyIiIm3FjL2BY2KrpgM7u/OXAslpP+7c587uwP7QP+mshjvuzl3AjsD9sT9tCuxdz7FTcgqwhTuXl2lLizsvEtrUxm0LaoMqIiIibSQqsTyVvl7sDhzizqPVHsudK4EtCKWAdXFnIfC9xOr96z1uq7nzUCVJfswDieWRoCp+ERERaS97QV4npPPdubnWg7kzCZhUd1ThWI+Z8TYs7Sy0biOOm3HDEstvgUpQRUREpL0cEnvuhLafWTI59nzV1KJond1jzxcCt4ESVBEREWkTUfX+zrFVj5cbcD8Fy8eeVzR4/7LKjC2Bo2OrTndnBihBFRERkfaxOWHIqJx70wqkEDNWBjaMrXolrViayYw1zfgZcDdh2CmAfxM6WAFqgyoiIiLtY53E8uNpBFHCd8ifLODGtAJpJDN2IszUNRxYjTCLVM5UwpBU57jjuZVKUEVERKRdjEgsF5qiNBVm7EFI4nKmAJemFE6jjSZMa5p0PkXGh1UVv4iIiLSLZIJa1xim9TKj04xxZvwJuB4YGPvzUe7MTym0VjkUmGzG+Wb5pdsqQRUREZF2kRyfc2DBrZrjdjN6oudGqO4eQ5gqNc6BE925qIWxNdutwDaEvHMVQjX/RwgzeQ0FvgTsY8Ze7mFMWSWoIiIi0i5mJJZHtvDcW1SwzTTg2+5c3uxgWimqwn8ssfpvZvwcuAnYhDC961VmbOLONFXxi4iISLtIJqhjCm7VWguA24GjgHUrSE57Y8+t6FaV6y2/SXO48zpwECztHDWS8DqoBFVERETaRnLYpu2BP7Xo3LsCc2LLCwltYKe701XFcebFng+uNggzBpE/UsDcao/RSO48YcaTwJbRqr2A45SgioiISFtw51UzJgFrRat2MaPTfWnb0GZ6slBv9RrEk9zli25V3IqJ5SxMBvAyfQnqOqBe/CIiItJe7og9HwPsl1YgNXor9nzdGvbfILH8Rh2xNIrHng82w5SgioiISDs5L7H8k6jae1kR72w0xoz1q9x/hxLHS0s80Z7qjitBFRERkbbhzl0QhjKKvB84vdbjmXGgGSfUHVjl7k8sH17pjmZ0Al+OrXrNncmNCKpW0finW8dWPQaq4hcREZH282PI65h0pBmnmVWeF5kx0oxzgEsIY5q2hDuPAw/HVn3PjG0q3P0YYLPY8l8bFhhgxgFRwl7R6AJRwvxn8jttXQ5KUEVERKTNuHM/cHRi9Y+Au8z4aKl9zdjQjFOA14BvNCnEck6JPR8K3GjGvsU2NmOwGScB/xdbPZ0GJ6iE9q2XAI+b8U2z4ol7VHJ6HfCJ2OpngYtBw0yJiIhIG3LnD2aMAn5K33iiOxCS1DeBu4CJwHzC7EejgQ8B67U+2nzuXGfGmcCR0apVCIPcPwvcArxOiHs4sDmwB2H2ppxe4CB3pjcpxC0Iw3f9wYwngIeAKYQRCEYDHwZ2pP9wVwe5h9m+lKCKiIhIW3LnRDMeI5Qkrhr705qEAeTL6Qb+A5zfhPDK+SEhsf5+bN1m5FfhFzIX+Io745sVWEwnYYrTciBlWR0AACAASURBVE0QJgMHuvNUboWq+EVERKRtuXMtoRf594EXKtilF/gfcBywtjsHuvNME0MsyJ1ud44E9gQeqGCXLuBfwNbuXNGksM4CvgRcTyjBLWcucCawhTv3xf+gElQRERFpa+4sAH4P/N6M1QgzTK1NmHpzOKG95jRCu9MH3JlZwWH/AnmJ4LsNDTrizs3AzdFwUx8lzGs/AlgOmEmI/THgPvd+U702OpYFwAXABWYMJgy+Pw7YkPA6Lh/F9Daho9d97nkzYy2lBFVEREQk4s47wJUNOM5sWjhLkzuvAq+26nzluLMYeDB6VE1V/CIiIiKSKUpQRURERCRTzN3Lb9XMAIyzgO/lljs6JjF8ubXTDaqAxUuwjg4YOIDMxQaweAn0ODZscDbjA3h3PrbSctmNr6sb6+zAOzL6s23BImzggOxeg4uWQE8vttyQbMYHMH9RtuPr6cYsw9fg3IUweAA2aGA2X8PubljUhS0/NJvxASxcjA3N8H16wWIM8GGD044kX2/vesye/2py8PfPuHN1KgFJ02WuDeqaI+H1v1Y2A0Er7XQC3YfvzoCDd8pebAC/vQbuf4GuK37EwLRjKWbkIfiMC7L5+gGs83W6b/oZAzZZM+1ICtvrFHr33JqOb+2Zzdfwwrvgn7fR9d+Ts3sNjjg429fgRt+m64IjGbjthmlHUthBv4XN1qL3+P2zWfs2/kk44UK6H/l19r7bckYcjE89H+vM5CsIB55B19YbMPDYz6QdSb4JU2D9I9KOQlopox8REREREWlXSlBFREREJFOUoIqIiIhIpihBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkSmbHihMRERFpNTM2Bz4GrAuMAkYCc4GZwEvAU8B97iwsc5y1gVKjGr8LLAImufNuFfF9GFguWpzmzlOV7hs7xm6wdEzo1915udpj1MuMVYEPxFbd6U53bkEJqoiIiLQ1M5YHvg18F1ijgl0WmHELcD5wnTu9BbY5EDi9wvO/AdwC/Mude8ps/jdg0+j5tcA+lZwj4RagM3p+BnBsDceomRkrAOOBcbHVw6EvUVcVv4iIiLQtM/YFXgNOo7LkFGAY8BngauAFM/aoM4yxwNeAu8243oxRdR4vs8zoBC4hPzntRyWoIiIi0pbMOAE4mfwCu4XAbcAdwDvAPEI1/xhgB2BnYGhs+w2B3YCby5zuSaAnfnpgdWC1xHafAh4wY2d3Jlfx31lW/B74ZLmNlKCKiIhI2zHjCOCU2Kpe4E/AL9yZWmK/ocChwHHAWlWccld3ZhU43mjgAOAE+pLVDYB/mfHxIs0Hlklm/AD4ViXbqopfRERE2ooZHwTOiq1aDHzRne+WSk4B3Fnozp8JJac/J79UtGruTHHnbGAb4JXYn3YllMy+J5ixD/DraHERcG6p7ZWgioiISLv5FTA4tvx9dy6t5gDuLHHnJGAX4NV6A4qq87+TWP2Feo+bBWZsDfybkHc6cBhwX6l9lKCKiIhI24iGado5tupm99KleaW4c09UotoI/yUMZ5WzcYOOmxozxgLX0Tc01k/duaTcfkpQRUREpJ18PbF8WipRFOBOD/B6bFWyA9UyxYwVgesJHcwA/unOqZXsqwRVRERE2smusecvuXNXapEUFu/AXnIygCwzYwBwKX2D8d8BHFHp/kpQRUREpC2YsR75Pe/vTiuWQqIRAuKzT71ebNtlwB9g6fiwzwP7ubOk0p2VoIqIiEi72Cix/FAqURR3EDAktjw+rUDqYcbRwDeixanApwsNsVWKElQRERFpFyMTy1NSiaIAMzYmjC6QMw+4OKVwambGZ+j7fywE9nVnQrXHUYIqIiIi7WJEYrmqUr1mMGM5M74JPAisHPvTL92zk0BXIhpf9kL6hpP6sjsP1HIszSQlIiIi7SJZMOctPPfvzFgcPR9KGHZpbWBz8sdkhdC5KDOjC1TCjLWBa4Fh0arj3bms1uMpQRUREZF2MSOxnCxRbab/Z+++w+Qqy/+Pv++Z3fReSEIPKNKkBKQZSgSpfmmCFAELRbB9fzZERRSVriIKfEUEBRRBioAgXQISOoQSWoCQ3vtm+87cvz/OmeTsZGZ3ZsucE+fzuq65rvM8c84z987Mbu485ylfKOGcDHARcKF7RZPnbjGjD8FyUrllsW5w716CrQRVREREqsXyvPJGsUSxvsXAA8Cl7kzv5NyeTlx7or3BBD3BEGw2cE53G1SCKiIiItUif9mmPYEbKvTa3wIaIuWVBGNgZ7vzbhnt1EeO84cGdCpcnzQdqVpTbhudOAhoMSv7upXRa5SgioiISLV4E1gKjArLkyr42jeVu9RSEasjxwOKnlXcoLzyqm7E0muUoIqIiEhVcMfNmAwcF1Z9xIxJ7jwRY1jlWhI53qwL14/PKy/sRiw5bcDLZV4zEtgyUn6VYAwuoARVREREqsvtrEtQAc43Y/IGNClpKnBSeLy5GRu5s7iM6z+RV36luwG5swrYvZxrzDgVuDlSdUDYDqB1UEVERKS63E2w9WbOp4BvdLUxMyaYcWa3oyrdC5HjFHBKmdd/PnK8FPig2xH1AiWoIiIiUjXcyQI/zqu+wqy8RM+MlBlfA6YA2/RUfCX4D/B+pPxDMzYt5UIzjgf2i1TdlNSeYyWoIiIiUlXcuQv4baSqD3CzGb83Y+OOrjWjjxknAG8AVwP9ei/S9YUJ9i8jVSOBh83YrqPrzPgscFOkqgm4tucj7BkagyoiIiLV6LvApsCxYdmArwCnhROpngDmEcxyH02wCP1ewIGsPxO+0v4AHA4cGZa3B141427gUWAGwfJRo4HtgKNo33MK8P/cmVGZcMunBFVERESqjjutZhwH/AD4GevWBu0PHBY+SvEW8EjPR1hcuBrBacAdwKfD6j7AieGjI1mCnaqu68UQu023+EVERKQquePuXAxsC/wRaCnx0kbgVuBgYEd3Hu2lEIsKZ7wfBpwLJc/inwoc5s7Pei2wHqIeVBEREalq7rwPnGnGtwhu4+8LbAGMILidv5pgvdBZwNPAi+40ddLs7bRfwqmnd2zCnQzBBK9rCHpS9ydItkcQ9ASvJlg39RXgCXem9HQM3fAY63p/of0OWUpQRURERADcWUOQOD3WA23NYv2tVXuFOw3AveFjg+DOAmBBsed1i19EREREEkUJqoiIiIgkirnHuz6rGVcB38yV+9TMZqfx49tiDKmgGQuz6WEDjRGDLdP52ZW3aIWnGpo9NX5sKnHvXc7rH2Zrdhqf3Pg+WJCt2XSkZfr2sUQuWjxjgacHD4DRQ5P5HVy+2lPL1njqoxsn9zN+c1a2ZoctkhvfjAXZmjHDLTuwn2XjjqWQDxd6un9fZ+zwVCK/g6vq3RYs9/S2myX3M357TrZmuwTH9+HCbM2AvpYdMzxZ38Hmlq3sjVnvpfOqj3HnnlgCkl6XuDGoqX4bMWrSA4mL64N7v5sZ8LGD0qM+dmjiYgNY/dodNC14s23UpJ8mMj6A7OzjfdSkOxIb35u3fiEzeI8L00OGbxl3KAXN/NePvP9mu9uojx+TyPewefqjrHj34cyoSb9MZHwArTcl+zv49u1nZIZM+HZ6+JjtE3l3a+5jF9N32GbZUbufmsz3cM6LLHzhT5lRk65NZnxAy03H+8hJt9dYQm9gznrop239xmxbM2rXExMVYMPqARUazSlJkbhf4prafmy63aFxh7GeVx+/xEdtunsiYwNYuegtWptWeVLjA0in+yT2/QNI9+nvG2+9P8PGdLgZR2zefPoaH7HJzpbU97CpfinL57+W3XS7Q/N7ORIjna5N9Hewps/A7NitJqZHb75H3KEU9P5LtzBs3A7JfQ9TKWZOuy/RfwdTqVo2/dghWCqZvybTX/iTDx+7feI+47plcUcglZao/yGJiIiIiChBFREREZFEUYIqIiIiIomiBFVEREREEkUJqoiIiIgkihJUEREREUmUxC0zJSIiIhIXM/oB+wDjgY2AoUAjsBJ4G3jdnYUlttO/g1Na3KnvQnxDgNw6Za3urOlCG8MjxSZ3GsttoyvMGAiMCYvL3VlZ7FwlqCIiIlL1zDgc+AawPx0nlpjxOnAPcIs77xc57ZvAZZ20A8EWBG8CjwB/d2dBJ6E+C2wfHt8HHNXJ+YUsYV2SewVwbhfa6IovAleHx+eGr12QbvGLiIhI1TJjJzOeBx4ADqWT5DS0E3AB8K4Z/zBjl26EsAVwOPAb4AMzLjGjthvtJZIZaeCUUs9XD6qIiIhUJTOOAW4GBuU9NQt4EpgL1AOjCW5NTwQ2i5yXAo4G3gde7eTlVgIeHqeBIQXO6Q+cB+xhxlFduX2fRGaMIug53avUa5SgioiISNUx4xDgTtrfTZ4M/NCdZzu4bkfgbOAMoG8ZL7mVOyvy2hoF7AIcB3wJ6BM+9Sngd2HdBseMTwJHAKOAbYE9KO+90i1+ERERqS5mbAH8lfZ50C+AT3WUnAK4M82drwMfAe7qThzuLHXnMXfOBvYFlkWe/qIZu3en/RgdCPwAOJPg5yorOQUlqCIiIlJ9rgBGRsqXu/Nj97W34Dvlzlx3jiPoTe32LHh3XgC+nVd9anfb3VApQRUREZGqYcY2wGcjVVOB87vanjvXuXNBtwML3A7txp12Z/JVbNz5mTuW/6CMRF4JqoiIiFSTr9E+/7nInda4golypxn4MFK1cVyxxE0JqoiIiFSTgyLH8wjWM02StshxNrYoYqYEVURERKqCGWOB7SJVT7qTiSuefGbUAFtHqubFFUvclKCKiIhItdgJsEi5wxn7MTic9uujTo4pjtgpQRUREZFqMTKvPDeWKAowYwRwZaSqDfhbTOHETgmqiIiIVIsReeUVBc+qMDMmAs8AW0Wq/+jOezGFFDvtJCUiIiLVIn/B+JYKvvb/mrVbZmkgsDnwCWD7vHNfYv01UauKElQRERGpFvk9psMr+No/KfG8+4FT3Lu/+P+GTLf4RUREpFosyyvnj0mN00vA0cCR7qyKO5i4qQdVREREqsWCvPKuwC0Veu2bgObwuJWgN3cFMAuY4s7CEttpiBzXlhuEGSnad1A2FDs3TkpQRUREpFq8SrCV6KCwPKmCr/0t9x6ZlLU6cjygC9cPpP1SWyu7F07v0C1+ERERqQrhlqZPR6p2NmPHuOLpomiSO64L12+WV17ajVh6jRJUERERqSb3Ro4N+GFcgXTR65Hj8WYMLvP6XfLKr3Uznl6hBFVERESqyZ9pPxb1RDP+p6uNmTHGjCO6HVXpXooc1wLHlHn9ZyPH9cBb3Y6oFyhBFRERkarhThNwaaTKgD+bsWe5bZmxPzAVOKBnoivJv4HFkfIFZmvH1HYo/BmPjlTd4U6mJ4PrKUpQRUREpNpcTbDeaM4I4AkzvmbW+cx4M3Yw4w7gCbo2DrTLwgT72kjV1sBdZgzt6LpwrO09rMv9HPhdrwTZAzSLX0RERKqKO1kzTgUmAzuH1f0JEtfvhMnnZGAOwW3wkcAYYC/gUGAC8XbyXQb8D7BbWD4YeNuMq4GHgdkEs/1HAdsR9JqeCfSJtHGFO6/0RnBmjCdInPNF37OPmHFQ3vNN7sEkNiWoIiIiUnXcWWnGJ4HrgZMiT40Hzg0fpaij/cSlXudOkxnHAY8AHw2rxwEXhY/O3AH8qJfCAzgVuLCTc84KH1GzgC1Bt/hFRESkSrlT787JwFHA82VePg34NrC5e8UW+1/LnZnAHsDNUPI40hUEMZ/gTlsvhdYj1IMqIiIiVc2d+4D7zJgA7A98kqAnbyQwlGCL1MWEuz4Bk915s5NmnwTOi5Qbezhs3FkJfMGMnwEnA/sB24Zx9ye4zb8YeDmM5y/u1PV0HAU8zrpds8qxdhMCJagiIiIiQDgm8xXgyh5o63nK75Xt6mt9APy8Eq9VCnemECTyXaZb/CIiIiKSKEpQRURERCRREneLv6VpFVMfuzobdxz5GlbNT8968z6vWznL446lkMUfTrE1y2fXTH3sosS9dznZTEsq2fG1pt959jrvO2h0Ij/jumUf2Lx3HvbmxhWJjG/53NepWz4z2d/BbCbR38HW5jU101/4s8+d/mgiP+Mlc16yxvol5ngi38PVS96nsW5hOsmfseOpVx+/JItZ3KEUtGLRWzUNdQs9k21N1HewuWE48FV1qlWRxCWo6eYGNvnP7Yn7Es6on58dsKY+tcmMdxL5V2VN8yIaM/WexPcu57WWhkTH93bdUh/x0gM2LN0/cZ/x0rY1ZJsWeGb5Aqud8Xri4gOgtY5MW53XPvHHxH7G3pzs+FJNS73m5XutNtUnkZ9xqnkR6ZVLvHbOe4l8D1NtDWRbVyT6M842rfbayTckNr5UyxJPM8dqF8xO1Hcw66MJltUcRDB/Sf7bJS5BHZ4awK/HHht3GOs5ec6fsycMnZA6ashOcYdS0I0rnuXlxrltvx57bKc7YMTlqfr3E/nZ5uzfeFXmR6MPqdm6z6i4Q1nPU/Xvc+WyJ9ip78bsP+ijnV8Qg+cbZjGl4YPMl4fvnbi/KzlvNM3ny8P3jjuMos5fdH/mM4N3rBnfZ2TcoRR0w4pnGVczhMMH7xB3KAW91bSQf9S9lv3y8L3TccdSzBtN8/ni8L1Ikaj8b60/LH86s0WfkTWHDNou7lDaWdo2iKmNrUBr3KFIhST2f3EiIiIiUp2UoIqIiIhIoihBFREREZFEqTGzSyPlD939utiiEREREZGqVwN8P1J+ElCCKiIiIiKx0S1+EREREUmUxC4HIyIiIhIHMzYCtgJGAUOBRmA58K47C+KMbUNjxnhgR2A0MBioBxYBr7gzr9h1SlBFRESk6oWJ1DnAIcDHofBitWYsBh4F7gEecKexyHln0X4YZSF1wFxgGvAI8KQ7mU7ifBj4SFh83J2zOnmNQm1MB3LrBV/vzqUdnV9m2/2AzwJHAgcBIzo4dxpwNfDH/J9bCaqIiIhULTNGA5cCpwKlbHazEfD58LHEjN8D17izKO+8YQS9sJ3ZGTiCIJmdacaP3Lm1g/M3jbQ7rYT2C9mKdQlq0QSyi96ktJ8bgp7V3wOnmXGMO4tzTyhBFRERkapkxk7AvcCWeU9lgNeA+QS390cAY4HtaD9/ZzTwY6A/8L0eCGlL4K9mTAS+0VlvakINzis78A7wIcHt/f7AbsC4yDn7AA+bsU+uR1oJqoiIiFQdM3YEnqZ9QjUX+DlwhzsrClwzCjgYOBvYt8yXnACsipT7E/TG7gwcT5Ck5ZxDME7zwjJfI0n+A9wI3O/O0ugTZqSAo4D/A8aE1bsA3yV4/zWLX0RERKqLGUOBu2mfnN4NfMydPxRKTgHcWerOre7sRzC+8o0yXnamOzMijzfdecKd37jzSeA0oDly/vlma8eabkheAia5s587f85PTgHcybrzD4L3MPozn2kWjP3tUoJqZjVmdoOZvRR5/MPMhnSlPREREZEKugj4aKR8J3C8Ow2lNuDO48AewDU9EZA7twA/iVTVEIyL3aC4c7g7k0s8dxpwW6RqM8Lxq2UnqGaWBm4CvkwwhmA3gi7q77r76nLbExEREakUM8YQ5DA5s4Az3cmW25Y7Te58HfhZD4X3e6AlUp7YQ+0m2Qt55XFQZoJqZkYwXuDkSPUcYJK7f9Ct8ERERER631cJxn/mXOLOyu406E5d90Ja284qIJpPjSt27n+RtrxyBspIUMPk9FrgzEj1bJScioiIyIbjsMjxCuCWuAIpoj5y3De2KCpnfF55PpQ4iz9MTn9HMGstJ5eczuiR8ERERER6UTg5akKk6slyxp32tnCC0OaRqmrYteqgyPEid2ZB6T2olwBfi5SVnIqIiMiGZgLrFqgHeCauQIrYm2BeT07S4utRZuwF7B6pujN30GmCama/oP1WXbOAA5ScioiIyAZmVF45MbmMGX2AX+VV3xFHLJUQbol6daSqBfhNrtBhgmpmPwF+FKmaRdBz+mFPBikiIiJSASPzygXXO620cGWBe4G9ItX/dOfFmEKqhKsJVoLKucSd93OFomNQzezbwE8jVTMJktOZPRufiIiISEUMyitXcvzp/masCY/TwBCC8aafINhVqV/k3Dm0n5T+X8WMrwOnR6r+TbiDVE7BBNXMvkn7buaZKDkVERGRDVv+clJDK/ja/yjxvNeBY9xZ1JvBxMWMLwBXRao+AE52D5aXylnvFr+ZfZXIGADAgc8pORUREZEN3LK88ohYoihsOXABsLd7csbG9iQzTgRuYF3+OQc4qFAynt+DuguwHwT7oObaA24ws/3dPRFjNURERES6YHFeefsKvvaTQGukXE8wBnY28DQwpcQlr6J715e0XGhUuJRVtIOyqdw2usKM4wnWnM2torCAIDmdWej8/B8s19XtwCpgWFj+OPCAmX3a3esRERER2fBMJUjwcgvgT6rgax/j3iOTsqLbyvcrelZxA2jfEdmtXbRKYcaXgD+wLu+cCRzsznvFrik0i9+BbwL7EnQ35+wN3Gtm1bCrgYiIiPyXCXsoo3u/72HGpnHF00WrIscbFT2ruLF55V5NUM34CXAj65LT14F9OkpOYf0ENQN8yd2vdvdpwOG033LrQOBvZpZGREREZMPzYOS4FvhuXIF00duR463D9VPLsWNeeVo34ynIjLQZ/0f7FaGmAAe4d75DVn6COsXdb8oV3P154ATaj5k4Brgm3P5UREREZENyHVAXKZ9t1m7707KY0ceMXbofVsmia6P2Bw4u8/r/iRy3AK91O6I8ZgwiWNf17Ej1fQS39Usa5pCfoHr+Ce7+APAlIBup/gpwUVnRioiIiMTMneXANZGqvsDfu3Kr34wtgf8An++Z6Eryb9rf3f6xWWlb14fxRmN92L3dpKtuC9/H/wBHRKqvBI4tcRIYUMJWpwDu/leCcalRPzCz75X6QiIiIiIJ8XPg1Uh5a+B5M/Yr5WIzhphxQdjGHr0QX1FhD+SfI1V7AL/rLEk1YwRBr2Z0YtXVRU7vEjN2BZ6DtT3KbcBX3fl2/jqnnSl5eQJ3v8bMNgXOi1RfZmYr3P2P5byoiIiISFzcaTDjGOB51k002hh40oyHgL8SLAs11x03oy8whmAr0kOBo4HhlY98rQuBI4HNwvJXgQlmXAI8Fu2pNGMsQbwXAOMibdwJPNrDcX0Z2CRSvg/ImHFWme08Ve76WT8k2Mc2t/2WAb83s1XufkeZbYmIiIjEwp2ZZnwCuAvYPfLUoeEDguSqnmBb0o7kr6/aq9xZEq4r+jDrlgjdi6CHtM2MJQTbuA4jyNvyTQVOd19/aGcPOzZ8lOuskm7x57i7A+cQZN05aeAvZnZIFwIQERERiYU7swmW1TwfWFLglDTFk9M1wJ+ACe5c0TsRFufO88CewCt5T9UQ9JRuzfrJqRMMD5jo3m491cQpewcCd8+Y2ecJMvZPh9V9gLvDhfyf6ckARURERHqLO03ARWZcCRxHsHj/J4EtoN0STmuAGcAzBLf/73dnTQdNvwNE7y639GTcAO68a8buwGeAUwh2A81f59QJlqaaDFzrzps9HUfEVNr/zF01owa4LFLxYSlXuXuLmR0HnEv7JHcfM3vO3bNFLhURERFJnHDc5s3hA1i7XNIwYJk7jWW2dx/BGMxeFd6m/2f4wIzhBD2ngwg2XFrmTkV2AXXnRoJF+butxt3P6/y0QkH4aoIucREREZH/OmEPaUe9pIkTzvLviS1VY1XWGFQRERERkd5W9hjU3tbgLfx9Vf543/gtbK1LPdXwAc3eFncoBb3cMJsZbcvTSXzvcpq8LZGfbU5Dtjl1f900xtV0Nlmz8qa3LGZpWz3vsIi0JfP/le+3LGVVpjH9dP0HcYdSVMazJDm+Fm9LvdY0j3mtvbo1dpctbF1NSzaT2PdwXutKVmUaU0mND6DVs0yp/wAjmZsxLs3Up9qanactWe9hXTbOFZ0kDolLUJto8idr709cFthc6zUz0suzTbVvlLXQbKXMqiFdl3V7svb+1s7Pjoeb1yY5vlSN17xa81Rmei2JG0O9tA1rTHl6cXqVe3puIr+Di4x0vTnT0i8m7vc3x1Nek+T4sinSH6Teyi5MJ+87CLAcT7ellzMtPTeR72FdllSreSrJn3E67TVvpl9KbHyr8XQDKzyVnpeovzMtjDWCGfVSJRKXoG7Uz+3BT3tt3HHkO+BB2s7YhppTtvZEdl/9eho8u4TWOyYl773LGXUrnsTPNmf8HbT9fh+v2W5Y8v4IPjQPfvIKvtso7PBNPXG/twCTF8Lj82n76a7JjA/g5Ml4kuM7+xnaztyGmm2GJnP41S+nwRYD8ePHJ/M9nLocbnmPTJI/45Mn4xfs4jWpZHagcvnrtG091Gs+u0Wy8oOFjc5ZU+KOQiopkX8ERURERKR6KUEVERERkURRgioiIiIiiaIEVUREREQSRQmqiIiIiCSKElQRERERSZRELSMhIiIikgRmDABGhY/VwAp3lsUb1YbJjI2ATYDhQCuwCnjfnYZi1yhBFRERkapnRn/gOOAQ4CBgTIFzlgGvAo8C/3BnegftfQ44s4OXrAOagFnANOAxdxaVEOcfgS3C4rPuXNDZNQXaeJh1d9HvcOcP5bbRSfsbA0cChwJ7AOMKnJY143XgduBad1ZHn1SCKiIiIlXLjD7AOcD3KZxIRY0EDgwfl5rxHPBr4G538nff2pIg0S1VNkwcz3eno33B9wa2D4+L9kB24kDW7cw1tYttFGTGRcC5dJ5jpoBdwse3zDjZncejT4qIiIhUHTNGE/SG/ob1k9NGYDZB7+YiKLgF8V7A34Gf90A4KeAw4Hkzzu6B9uKyE+snp1lgIcF7OQdoznt+I+BBM/bLVagHVURERKqOGWOBZwl6OnOageuB24Dnor2iZtQAnyS4bf0F2ie0pWzj/SWgPq9uHEEP4hEESRoEudn/mdHgzs2l/jwJ1ATcGT7+487yVxnMZwAAIABJREFU3BNmpIH9gYuBPcPqWuBPZnzUnawSVBEREakqYbJ5O+2T01eBY935sNA17rQBTwJPmvEz4CvA+QS3/UtxrzsrisTTH7gQ+F6k+mozHi5lXGrCtAC/Ai6OJqVRYeL/77DH9D8E41QBtgImAk/pFr+IiIhUm/Ng3e1k4Hlgv2LJaT53Gt35DbAz8ER3gwnbOxe4JlI9GDi5u23H4BR3vlssOY1ypwW4NK/6Y6AxqCIiIlJFzBgE/L9I1UrgRHfqym3LnXkEE6Gu76HwLqL9WNeDe6jdinGnscxLPsgr9wMlqCIiIlJdzqD9bflfujOzq425k+1ouaky21pA+4Rtk55oN+E2ziu/A0pQRUREpLocFTluBH4fVyBFrIwcD44tiso5LXI8m2Ccr2bxi4iISHUwox/B0lA5Tydwd6ixkePFsUXRy8wwgqEWJ4VVWeCccFyqElQRERGpGhMIxziGpsQVSCFmfAzYLFLV0YL9G4xwM4SBQF+CpbX2JFh2Kzd7vwk4w51/5a5RgioiIiLVYmxe+e1Yoiju4rzyvbFE0fOOJljWK189cA/wc3fejT6hMagiIiJSLfLXLC24LmmlmVFrxm+AYyPVLwIPxxRSpTwE/A3Wn6SmHlQRERGpFkPzyqsr+NrDzNYeDwwfmxPc7v4isHXk3Drgy+54BePrTWuAGcAgYDSQeyc+Gz7mm/F9d/6Su0AJqoiIiFSL/LVOKzlLfkaJ5y0BjndnWm8GU0nh2NJ/wdptTjcC9gG+A+xNsNTULWZs6h4s3K9b/CIiIlIt8nc3GhFLFIVlgb8Du7sHSy39N3In484Cd+4C9qX92NSLzNgN1IMqIiIi1WNpXnmrCr72Smh3y35F+JhJsJrAg+7BIvWdaI0cl93RGC7vZJGq1mLn9jZ3MmZ8jWASVV+Cn+ebwBeUoIqIiEi1eI2gpzKX2B3A+nvB95at3HtkUlZ03Gz/Llzfj/aJ7aruhdM97iwzYwrwqbBqEugWv4iIiFQJd5YTJKk5E83WmziVdNEEdXgXrh+VV15Z8KzKWhA5HmOGKUEVERGRavJo5Hgg8LW4AumiDyLHHzEru7Nx27zyuwXPqqwBkeOMO64EVURERKrJtbQfd/kdMzbtToNmbNy9kMryYuR4CMEs+HIcEjnOkozdqnaKHM8H3eIXERGRKuLOLFi33ibBTP7bzNr14pXEjIFm3Ax8q6fiK8ETQFukfG6pF5oxnGCL0Zxn3ddbequizDiQ9mvA/huUoIqIiEj1+SEwL1L+JDDZjE1KudgMM+MY4GXg1F6Iryh35gF3RaqONOPrnV1nRg1wC+2X1rqmJ2Mz4/tm3GLGFiWevwlwY171zaAEVURERKqMOwuB44DmSPUngOlmXG7GzuFyTO2YsZ0Z3yZITO8GPlaRgNd3Ae03HfitGX80Y3z+iWakzNgH+A9wROSp54E7eziuFHAK8IEZ95txohljC8Q01IxzgKkEu2nl3OHO06B1UEVERKQKufOcGQcRLI4/LqweAHwvfCwzYz7BrPlR4TlDijSX7eVw23FnuhlfBm4D0gTrmp4OnG7GdIK1VesIthX9GDAmr4lFwOfce20N1DRBMnwEgBmzCXqs6wnex23Dc6JeB87IFZSgioiISFVy52kzdgd+BRxP+6RpZPjoyEvAb2m/G1JFuHOnGUcAf6V9nNuEj2JeAI5zZ04vhDWfYAJabV795rTvKc13F3CG+7oltHSLX0RERKqWO/PdOQnYjiBRfYn2k5CiWgh2fboY2MmdT7hzizstBc5dSDAUIPfI9ELsDxNMMPoR8HYHp7YQ3OI/Adinl5JT3LkJ2BQ4G7gHWNbB6Q3AA8BB7hzn3n49VvWgioiISNVz5z3guwBmDAI2IeiZHACsIVhMfqF7u3GrHbV3M+GEn97kziqChPliMzYiuH0+gmCXqdXAEuANdxp7O5YwnsXAdeGDcAmvjxJsKtA3jGkh8HpHQwyUoIqIiIhEuLOGZCxgX5YwOVwcdxxR7swF5pZ7nW7xi4iIiEiiKEEVERERkUQxd483AOMq4Ju5cspmM2zgFvEGVUBzG5Y2qEmTuNgAmtvAHetXm8z4ANY0YYP6JTe+tiyWMjy13sp38WvNQHMrlk5BTSqZ72FrBrKO9a1JZnwQ/B4nOb5sFiOV3D2oG1uhNo0l9TuYyQa/x0n+jFsyWJ+E/jsCQXzueN+EDQDM+ljqm683GAQckKs+xp174otKelPCvoKw6SiYdf36i+PGbf8f0XbmwdScsn/yYgP49b3wzDu03vn99ZZ2SIyRp+LLbknm+wew5Vm0PXgBNdt1a0fm3vHQK3DB3/Ddt8YO3z2Z7+ETb8Djr9P2i88n7+9Kzkm/xG/9bjLfP4CvXEvbd46mZptK7updhl/eA5uPwj83MZnv4dQZcPMTZK48fb31FRPjpF/if/k2lkro/0Iuu5u2j4yj5rPl7u7eyxaugDN7dM8jSbqE/oqIiIiISLVSgioiIiIiiaIEVUREREQSRQmqiIiIiCSKElQRERERSRQlqCIiIiKSKEpQRURERCRRErteoYiIiEglmbErcDDwKWArYAwwGGgCVgFvAa8DjwCPu9PcQVv7A4d18HIZYDUwB5gGTHMnW0KM3wY2Cotvu3NTZ9cUaONi1nVSPuXOv8pto7sKvD8/dacpV1CCKiIiIlXNjAOBnwD7FjmlX/gYA0wC/heoM+M24Ep33i5wzZ7A98sIY74ZfwEud2dZB+edDmwfHt8H5SeowLmwdkOLFFQ2QTXj4wSxD4lUXwLrElTd4hcREZGqZEYfM/4APEbx5LSYwcCZwJthr2Z3bUyQOL5rxqQeaC+RzBgH3E/75HQ96kEVERGRqmPGAOBBYL+8p54E/gY8RXD7vQEYDYwFJhLclj4Y1m4tbsC4El7yQqAxcs0wYASwKzCBdZ2GI4GHzDjEncnl/lxJFr7n9wGbd3auElQRERGpRr+nfXK6CPiiOw8VOHdR+HgNuMaM8cD5wGmUnktd5c6KQk+YsRXwW+CIsKoPcIsZ27mzpsT2E82MFPBXYPewqgEYUOx83eIXERGRqmLGl4BTI1UzgX2KJKfrcedDd04nSHBndjced2YARxHc+s7ZFDiuu20nyBXA0eHxBwQJflFKUEVERKRqmFEDXBCpagVOCJPEsrjzLLALcG9343InA3w3r/roQuduaMw4B9aO010BfAZY2tE1SlBFRESkmpwIbBkpX+POC11tzJ1V7jzd7aiCtt4FZkeqNuuJduNkxmEEwxcAWoBj3Xmns+uUoIqIiEg1OSFynGFd8pQUiyLHI2OLogeYsRNwO8E4XQfOKnXilxJUERERqQrh7f3oxKjn3PkwrniKGB45Xh5bFN1kxsYEY2oHh1W/KGdTASWoIiIiUi12pv36m1PiCqSQcI3QrSNVb8UVS3eYMZBgOancEIVbCTZCKJkSVBEREakWm+aVX4sliuLOJVgjNef+YicmlRlpgoR0t7DqaeDL7ng57ShBFRERkWoxIq+cmFvoZpxOsIVqzgzgrpjC6Y5fAkeGx+8Dx7jTXG4jWqhfREREqkV+groylihC4S39TwBnsW6Rfggmb53jTmssgXWRGV8D/l9YXAYc4d7xclLFKEEVERGRatGYV+5XwdeeYdbuNvdgCudhLQTJ6SOVCatnmHE4cFVYbCZYTmp6V9tTgioiIiLVIv+WfiWXcRpWwjlvAmf31LqqlWLGIOA2IE2wnNQZ7jzVnTaVoIqIiEi1WJZXzp80VWmtBFulTgH+CdzjTraTazKRYyt6Vsei12WKnlW6vqxbTuppoNmM4zu5Zo+88tFmNOQKSlBFRESkWuQv27Qf625L97YJwKrwuBVY4c6aLrRTFzkue4iCGX1pP0l+dRdi6Mi+4aNcf44WlKCKiIhIVXBnnhnTgW3CqgPM6NuVWeZdMNOdFT3QTjShHFL0rOLyhxrEOlGsGCWoIiIiUk3+zboEdQRwGnB9fOGUbU7keKsuXL9NXrkndtJqBC4r85odgM9Eyr+Bdf9RUIIqIiIi1eQPwFdYNw7zB2bc5t7u1nlZzKit4JJQLwFnhsejzdjRnWllXD8pr/xydwNypwE4r5xrzDiV9gnqT93XDoHQQv0iIiJSPdyZCjwQqRoP/MGs/AlHZpgZ3wN+1lPxleApaLdc1ddLvTAcf/qlSNWb7izpqcB6khJUERERqTbnQbsJSicCfzUrfdKRGR8j2Ir0cip4R9qddwiGKeScbsahJV5+ObBlpPz7noqrpylBFRERkarizpvA6bTviTwJmGbGqWYMKHSdGX3NOMiMmwjWLD2896Mt6KesWx6qBrjTjP81o7bQyWaMNONPwDcj1TOBm3ozyO7QGFQRERGpOu783YzBwDUE63gCbA3cDFxvxgvAbKCeYEH/McCuwMAYwm3HnafNOB+4JKwaSDDJ6CdmPE4wkWo1QdzbAxOBPpEmmoHjuzPutrcpQRUREZGq5M4NZrwB3ADsGHmqL6Wt5bmSYAWASq2lupY7l5rRQjB7PpfPDQeO6+TS+cDn3HmpN+PrLt3iFxERkarlzgvATsDRwCPQ6eL5qwh2fToF2Nidc92Z17tRFubOrwk2ALgNaOnk9GXAL4Cd3ZnS27F1l3pQRUREpKq548C9wL1m1AC7AFsAo4GhwFJgMcEt/zdK2I4Udy4nmJTUq9x5AzgpHDe7F7AdwfquAwl6eBcTLCU1zb1HtjXtEe7cAtxS7HklqCIiIiIhd9oI1hpN9C3wfOFapP+m/Qz/DZZu8YuIiIhIoihBFREREZFEMXfv/KzeDMC4isi6XOnUPB85cte2GEMqqK6hpaZPnz7etyY54zeiGpvb0hlP2aB+qcS9dzkr65prhw3uW6mt4Mq2ur6ldmD/Ppl0qvOxRZXW0tJiDU2t6ZqaWmoT+h1sa8umWjNY/76pRMYH0NDYVjOgf01if0cam9rSffvUeCqB30EI/s6k02n61FgiP+O2TDbV2uap/n3Tif2Mk/4dbGrOplMpp09tOlGfcTa7kdXV/ToNg4ADctXHuHNPfFFJb0rcGNS+g0bbxC8+WnCh2Tg9dduZmfE7HZPebPvDE9nr/N6Lt7B8/uuZPY+6InHvXc79Vx/gSfxscx7545GZCUf/Nj14xJbpuGPJt+jDKbw15f98+JjtbexWExP3ewuwZM5LLJ75XHaHfb+eyPgAXrj/B77DgT9PbHxTH704u+Xun08NHr5FIv/OTH/xZgYMGeebfuzTiXwPVy5+h9lv/tN3mPS9RMYH8OL9P/TtP/WzGrOyd9WsiHef/1N20PDNU5tsc2Ci3sOm+hpeeTjuKKSSEvUFBEil+zBi453jDmM9NX36+8BhmyUyNoCBQx9nzYqZ2REb75y45CrHLJXY9w8AMx86ehuGjdku7kjW07B6Aema/vQdOJJBI8bHHU5Bdctnkq7tnx00YnwikysAM0vs+weQSqWyA4ZsnEpqjLV9BtK3/7DEvofNjStJpftmB40Yn9i/gwCDRmyJWTJ/TWr6Dsz2HTA8cd/BdGK7NqS3JPM3RERERESqlhJUEREREUkUJagiIiIikihKUEVEREQkUZSgioiIiEiiKEEVERERkURJ3DJTIiIiInEwYyCwP3AgsDUwChgONADLgOnAa8Cj7szupK2dgT2LPJ0BVgP1wFzgHXdaSozx+DAmgFnulL1CrBlnArnFeF9z5/ly2+gKM7YDjgyLT7jzQrFzlaCKiIhIVTNjM+A84HSgbwenHhK55mXgJuBP7qwpcu5lJYbQasZk4GbgVvcOd5P7KbB9eHwflJ+gAv8H5NYLvgIqk6ACxwMXhsfnQvEEVbf4RUREpGqZ8Q3gPeCrdJyc5tsN+C0wx4yTuhlGLfBp4BbgFTO27mZ7iWPGGOArpZ6vHlQRERGpOmakgN8DZ+Y9NQ+4F3gCWEBwG34kMA6YCBwKbBE5fxgwAfhbJy95L7S7jd8XGEPQGzo4Ur8z8JwZ+7rzThk/UiKZMRQ4DLgE2LjU65SgioiISDW6gPbJaTPwY+B37jQVueYvAGYcDvwE2KOM1/uSOyvyK82oJUjgLgVye22PAm41Y093Wst4jUQw40vAtwgS+7F04Y69bvGLiIhIVTHj0wTJaM4q4BB3ruggOV3LnX+5syfBmNX67sTiTqs79wF7Aa9EntoVOKI7bcdoM+DjBD2mXco11YMqIiIi1eYy2idOX3bnyXIbcedGM6YQ3JbvFndWm/F14JlI9eeAe7rbdgzeAu4oUH8s6yZndUgJqoiIiFQNMw4l6J3Muc2du7vanjvvAu92O7DAc8AigrGpwIY5WcqdO4E78+vNaAD6l9KGbvGLiIhINfliXvmKOIIoxB0nWBc1Z6O4YombElQRERGpCmYYcECk6jX3duM+kyDaw1gXWxQxU4IqIiIi1WJb1t0+B/hPXIEUYsYQ4KORqg/iiiVuSlBFRESkWmyVV345liiK+wrBov05D8UVSNyUoIqIiEi1GJlXXhJLFAWYMRH4WaRqGZ0v/v9fSwmqiIiIVIsReeX1Fs6vNDPGm3EJ8DjQL/LUee6sjims2GmZKREREakW2bxySWty9pB/mK3dFaoWGARsyfq9ugC/cuePlQosiZSgioiISLVYllculBz2lv1LOGc18C13buztYJJOCaqIiIhUi/wEdUzBsyorA0wF7gd+587yTs6P9gJbD7y+90AbPU4JqoiIiFSLGXnlTwLXVei1jwHWRMr1BGNg57mXtd5ptI2+5QZhRi3thzYkcpyrElQRERGpCu5MN2MesElYNckMC3dw6m1PuvfIpKxoQjmwC9cPySuv6kYsvUaz+EVERKSaTI4cbwocGVMcXbUocrxlF67fOq88r+uh9B4lqCIiIlJNbs4r/9hsg7qjHN1cYGMzNi/z+n06aC8xlKCKiIhI1XDnEeCFSNVuwIVdbc+Mw834drcDK92z0ZcHTi/1QjMMOC1SNded2T0VWE9SgioiIiLV5jyC2fM5PzDjh+U0YMYgMy4lmH0/rieD64g7LwCvRqq+Y8aOJV7+dWDXSDmxa60qQRUREZGq4s4TwI8jVQZcZMa/zNilo2vNGGvG9whWBPg+PbPUU7kujhwPBB4y41PFTjYjHfbyXhmpXkXlVjAo24Y05kJERESkp1xKsA7q/0bqDgMOM+Mt4AlgLsGs+dHhuXsBuxBPUrqWO3eY8UfgjLBqE+BxM54FHgZmAg0EW7tuD3wG2CraBPBFdxb2RnxmHAh8usBTtZHjw8zW2yhhpTuXghJUERERqULh0lL/z4wXgWtpv/zS9uGj02YIEsLbej7CTn2dII/7YqRu7/DRkSbgq+7c00txQbC+7Pc7OWdS+IiaRfAfB93iFxERkerlzl+BLQhu+c8v8bJcIrWdO4e5V34mvDvN7nwJOAF4o4RLssC9wF7u/KlXg+sB6kEVERGRqubOSuAXwC/M2AaYSJC0jgCGAcuBJQTjTqe4M6uEZm8GHo+Ue2XHJnf+bsYdwM7A/sC2wEhgEEHcy4CXCDYKqNSM/euBB7pwXUvuQAmqiIiISMid6cD0HmhnIfTOGM8Cr+UEM/tf7ezcSnBnAbCgO23oFr+IiIiIJIoSVBERERFJlMTd4m9trmPaUzfGHcZ6muoWp+e++whNDcviDqWghTOepm75jJppT10VdyhFZTOtluT4PNOWfu+lW+g/eEzcoaxn5aK3aapfzPIFb5DNtsUdTkGrl75Pc/3S9Kw374s7lKLcs5bk+NramtOLZjzNysXvxB1KQXXLZ9DW2khS38OGlfNoaVqdSmp8AI7b7Df/CRbrKkVFNayan25rXoOlazs/uYJamwYCB8YdhlRQ4hJUa1zDkEeTt26sN8wktWo5Q955Ke5QClrSsoRspiGR712Ot9T7kEevS+ZfZSBbv5h+z/yNIan+cYeynpbMGmhejK1ezoD5pYzNr7yGzBq8bQ0Dpj4UdyhFeWujD5j6UGK/gzUtdfSdPoUB1jfuUApKtSyhtm41AxZ3a2hZr2nNNOBtqxL9HaS10fu/+lC442Ty1LQuo9aWMGBZsjpjWnwUSlCrS+IS1BHpAVy78efiDmM9J8/5c+aEoRNqjhqyU9yhFHTjimd5uXFu2zUbH5+s//ZG7P7B5Yn8bHP2//CqzM82OqJm6z6j4g5lPU/Vv8+Vy55gp74bs/+gj8YdTkHPN8xiSsMHmXNGTkzc35Wcby24i3NGTow7jKLOX3R/5tghu9SM75O/dnUy3LDiWcbVDOHwwTvEHUpBbzUt5B91r2XPGTkxHXcsxXxrwV2cPXIiqYQmqH9Y/nRmiz4jaw4ZtF3cobSztG0QP1wUdxRSSRqDKiIiIiKJogRVRERERBJFCaqIiIiIJIoSVBERERFJFCWoIiIiIpIoSlBFREREJFESuxyMiIiISKWZsRlwEDAeGBU+6oCVwDvAa8DL7mQ6aWcssEkHpzQAjcB8d1rKiG8HoF9YXOnOB6VeG2ljAqxd62yRO3PLbaOE16gB9gR2BXYERgNDgDXAUuAl4BF3Pix0vRJUERERqWpm9AFOB74BlLII7DIz/gnc5M7kIuecBlxWQlutZkwHHgb+4s7UTs7/O7B9eHwfcFQJr5HvBSC3XvAVwLldaKMgMyYBZwGHAUM7OPUMIGvGv4Bv5iequsUvIiIiVcuMg4D3gWspLTkFGAl8EXjCjJfNOKAbIdQCOwDfBl42469mDOlGe3G7HTiRjpPTnBTwGeA1M/aPPqEeVBEREalKZnwT+BXt86E24BngCWAhwe390cA4YCLBbevobmUTgCOgaE9qzkwgm1e3ETAoGhJwMvBxMw5yZ3HpP00itQEvAlMIfv6lBMn9BOB4WJuIDwbuM2Mnd2aBElQRERGpQmacAlyVV30LcL47szu4bjhwJvA9gvGppZrgzooC7W1DkKx9BxgeVn8cuNGM/3HHy3iNpFgA/Aa42Z2FhU4w4wfAbcCnwqohwM8JhkboFr+IiIhUFzN2Aq6LVLUBZ7lzWkfJKYA7K9y5nGAS1W+gewmkO9PduQjYHdq99hHAft1pOyaXAdu4c3mx5BTAnSXA0cD8SPUxZvQFJagiIiJSfa4ABkTK33fn+nIacGeNO98iSCTndTcgd2YQTNKK+nx32600d37lzpoSz60D/hqpGgR8FHSLX0RERKqIGbsBB0eqJgNXdrU9dx4EHuxmWDn/IljOalhY3r6Dc/9bvJdXHgnqQRUREZHqcnZe+eKkjPN0p41gMlHOuJhCqaS+eeV6UIIqIiIi1eVTkeMZwGNxBVJENDdrji2KytkhcuwEn4kSVBEREakOZmwBbBWpejIpvacA4QShj0SqOpywtaEzIw38T6TqTXeWgxJUERERqR75C/E/F0sUxR1P+8lbj8cVSIWcSvvtYG/JHShBFRERkWoxMq9cdBmkSgt7d38VqWoEbo0pnF5nxnjgl5GqhQS7eQFKUEVERKR6jMgrr7dwfqWZUWvGycALBDtL5fzKvfvLVyWRGf2Bu1j3H4YscHp0eSotMyUiIiLVIj/vyVTwtX9iRlN4PBgYCGwO7Mq6ZaVyHgB+WrnQKiccd3ozwc+dc7k7/4qepwRVREREqsWyvHJ+j2pv+t8SznHgt8B33SuaPFeEGSngz8Bxkeo7gfPzz1WCKiIiItVieV55dCxRrK8eeAi4yJ2pcQfTG8ww4HrglEj1A8DnCyXjSlBFRESkWszJK38C+FOFXvtCgolPEPSUriDYNepD4NVwkf5S1EeO+5QbRHiLPR2pKmlb0u4wowa4DvhypPoh4Dh3WgpdowRVREREqsUbBInh8LA8qYKvfZV7j0zKWh05HlD0rOIG5ZVXdSOWToUTov4GHBWpvg34QrHkFDSLX0RERKqEO1ngyUjVtmbsE1c8XbQ0crxpF67fMq+8qOuhdMyMYcDDtE9OryW4rV80OQUlqCIiIlJd7sgr/yiWKLru1cjxFmbrre3amd3yyr0y5tWMzYCngH0j1T9352vhfxQ6pARVREREqsnfgfcj5cPN2o2NLIsZ25q1m/jT216IHKeBk8q8Pnr+CmB6tyPKY8ZuwPPAx8OqNuBsdy4otQ0lqCIiIlI1wslIF+ZVX23W7jZ0ScLE9EVg556IrURPArMi5R+ZtVvgvygzjgAOilT9xR3vyeDC9/FJYFxYtQo4wp3rymlHCaqIiIhUFXf+AtwQqeoP3G3G5WZrJ1AVZIaZcagZzxHsHZ8/6ahXhUsyXRmpGgs8GG6VWpQZnyaYrJTTClzdk7GFCftdBJsQQJBIT3TnkXLb0ix+ERERqUZfBzYDDg7LKeB7wFlmPAhMBuYCdQRbco4D9gQOAcZUOtg8VwOfYV1v6ATgLTP+QjApaRZB3KOA7YCjw/OjznPv8dv7e9J+CatZwAVmZbdznRJUERERqTruNJlxOHARcC6QS6OGAieGj1LMIpgMVDHuZMw4CbgX1q5CMAA4K3x05te074XtLft18bpHdYtfREREqpI7GXfOI+iB/Dt0Prs8lCHYBek44CPu/LOXQizKnaUE67j+nPZro3bkPeB4d77T02NPe5p6UEVERKSqufMqcEI42Whi+NiS4Nb+QILb5QuA2cDTwJQSFt2/l2CXqJz6Yid2VbiW6AVm/Bo4kqDHcltgBNCPYJeoJcDLBEMWHipliaduuJGe6U1+WQmqiIiICODOYuDu8NHdtt4F3u12UKW91krg5vARG3em0kPrquoWv4iIiIgkihJUEREREUmUxN3ib/RW/lX3VtxhrGdpZk3qxcbZ1Fri3jIA3miaz9zW5akkvnc5LZ5J5Geb05BtSU1e8x7v1i6OO5T1vN28kBWZBt5vXcrAxn5xh1PQ+y1LqMs2pV5qnBN3KEVl3ElyfK2eSb3TvIhlmYa4QyloSdsaPMHv4ZzW5dRlmhP9HWz1LK80zmHdhPHOx56kAAASUElEQVRkWZ5pTFnL8sR9xnWZYXGHIBWWuGyrgUa/M3tnW9xx5FttXvMay3x+9pXExQYwF0/XGak7s3e2xh1LMRm8NsnxpWq89lF/NDMg26sDyLtkhWOrzdPOSq/PzsrEHU8hS7Ok6/HUM9kpifwdAfCU1yQ5vrYU6df89WwSv4MAi7Kk69PLaMjOTuR7WOekmizZ38FU2mueyT6T2PiW4enVWfPG7JxE/Z1p9rFG+/U15b9c4hLUMf3cJh/utXHHke+AB2k7YxtqTtk6ebEB/HoaPLuE1jsmJTM+gFG34kn8bHPG30HbTft5zXbDkvdH8KF58JNX8N1GYYdv6on7vQWYvBAen0/bzyckMz6AkyfjF++e3PjOfoa2r25LzTZDkzn86pfTYIuB+PHjk/dvB8DU5XDLe2SS/BmfPBn/xW5ek0pmByqXv07b1kO95rNbJOszXtjonDUl7iikkhL5R1BEREREqpcSVBERERFJFCWoIiIiIpIoSlBFREREJFGUoIqIiIhIoihBFREREZFESdQyEiIiIiJxMiMN7Ax8BBgNDAJagJXA28Ab7tTHF+GGw4w+wI7ArsA4YAiQBVYD7wHPuVNwVwglqCIiIlL1zJgIfAM4CBjRwakZM54B7gH+5s6CIu2dC1zWQTtOkPTOA6YBjwD3uLOikzjfBLYPi/e5c1RH5xdpo411Gx9c4c655bbRQdsDgBOAY4FPAQM6ON3D9/Kn7jwWfUK3+EVERKRqmfFRMx4F/gN8jo6TUwgSu32BXwEzzbjJjG278tLAcIIexhOBG8P2zgt7cTdUtxL8LJ+h4+QUgvfgk8CjZlxutm4PYPWgioiISFUy49PA7QSJYtQy4GlgLtAAjALGAHvnndsHOA1YDHyvB0IaAlwC7G3Gie409kCblZafXLcAL8L/b+/eg6UozzyOf5/hEpSrgEoEFIgYb6uGoMGEFZWNyeIlkkQjpagbEy9LNpYbs7i6UWOFLBhKTQyJESspgwYrEcR4WRVvxEVxFRcxukoUQRCRi3I9wOFwnv2jezjdw5xzZs6ZmW7p36dqqvp9p7vnYRyox7ff93lZAqwlmDIxABhJ/H8GfgisBm4BJagiIiKSQWacBDwCRLfgXghcBzzpzq4i13QARgCXA+PYMxlrSe/o43szehIkvscC5xCM3uafbJ8FTAUmlHH/tHkamE4wDaGu8E0z9gGuBf4j0v1jM+50Z4se8YuIiEimmHEQwchpNDn9BXCCO48XS04B3Nnlznx3xgNHAXPbGoM7G915x53Z7owjmPu6KXLKFWYc09b7J2ghcKo7o925r1hyCuDONnd+BPwu0t0NGA2agyoiIiLZczPQL9Ke5s6V7jSWegN33gK+CkwEdrY3IHeeIT5NwAimD3yiuHNj+Gcp1d0F7YNBj/hFREQkQ8wYTLDKPO914Oq23CtMaG+uRFyhGcCtNC0uGl7Be6fVxoL2DtAIqoiIiGTLBOIDdJPc2Z5UMFHhoqilka5PJxVLDR1d0P4fUIIqIiIi2XJa5PhD4P6kAmlGfeTYmj1rL2BGJ+CqSNc8dxaBElQRERHJCDP2Jz5i96x7++ePVkpYJWBwpGtVUrFUmxkDgYeAYWHXGuCf8u9rDqqIiIhkxbHERyVfSCqQZvwD8Tqr85IKpJLCZHQE0IugnuwI4MsEdWQBFgHnuvNu/holqCIiIpIVfQra7yUSRRFmdCdYIJXXSFAKa29wIsX/LHMJykz9yZ2G6Bt6xC8iIiJZUZigtrjvfa2E9U7nAUdEume480ZCIdXKkcBJFKlWoBFUERERyYp9Ctq1XL1/kVmsaH0PYCBwPMEIY9RfgX+pVWA18A5wJ8Ej/f0JqhMcDfQn2JXrcjPuA77jzlZQgioiIiLZUThiul/Rs6rj1tZPAeAJYJw7m6sZTC25sxC4LNoXTmm4CrieYMvY84CeZpzujusRv4iIiGTF+oJ24SP/JC0BLgLGuPNR0sFUmzub3bkJ+EGk+x8JElWNoIqIiEhmrC5oHwvcU6PPvptwl6TQDoIR3eXA/HDr1FJsixx3KjcIM3LE1yDVNXdujUwDriN49A9wMTBTCaqIiIhkxSKChCy/legpNfzsq9wrsihrU+S4cE5tKfYlXmqrcKvRmnKnwYwFwJlh1zDQKn4RERHJCHd2APMjXZ8z47NJxdNGGyLH/dpw/YCCduG0hyREk+TeZpgSVBEREcmShyLHOWBiUoG00WuR4yFmu0eDS3VMQXtxO+OphOhc4E1aJCUiIiJZ81tgbaR9kRmj23ozM3qZcWr7wyrZy5HjzsBZZV7/9cjxNuD1dkfUDmZ0IthZKm8p6BG/iIiIZEhYZ3NqpCsH3GvG35V7LzM+DywkWH1eK09BbJX/DWZ0KeVCM44FvhnpesCdnZUKzIyhbRjRnUC83NejoARVREREsucWgkQv70Bgvhnjw1XuLTJjkBl3AS8AQ6oUY1Hu1AG/iXQdDvzBrOUFU2YMAf5MUHM07/YKh/dNYIkZl4d1TltkxlhgSqSrjqCgvxJUERERyZZw3/fzCGqP5nUHfg+8asa1Zow0Y6AZ+5lxWNi+2ownw+suoQ1lnipkEvFH82OB1834nhmHmvEpADO6mXGCGT8lmLt6cOSaae4sqEJs/YFfA6vMuMeMb5txlBl9zegUfqfnmvEwMJtgmkLeje6sANVBFRERkQxyZ50ZXwBmAGdE3jqaIAEs1Q7iiW7VubPVjG8Acwm2SwUYTGRE1Ix64slf1GPEC+RXQzfg/PBVil+787N8QyOoIiIikknubAC+Boyn/MVCy4AbgcHuTK9sZK0LC/sPBx4EvMgpxZLTOuDHwBlhya1K+wvwfJnXrAcuceefo50aQRUREZHMcqcRuMeMPwAnAaOAkcAhBOWPegNrCFb+Lwf+G5gHLAivbc6LxOdXbq9C7GuAs8PFT+eH8R8Ju+d/ehj3wjDm37rHKhhUOp75wJfMGAh8heB7PBY4jKbNERz4AHiJYCR3RrhwLUYJqoiIiGRemGw+G74qcb95BElh1bnzKvBqvh2WbupWoZ2r2hLPCuCu8JWPqTPQtdSYlKCKiIiI7EXC0lGJJKfNcaceqC/1fM1BFREREZFUUYIqIiIiIqli7sUWftUwAOPnwPfz7Zy9R899D0k2qCLqd2Edc5CzoivlEle/CwysU4d0xgdQV4/t2zm98TU6ZoZb0oEUsXMX1DdgnTqApfQ32LALPOW/wZ0NWKeO6Y3PGzFy6fwNAmzfCZ07YLlcOr/DxkbY5en+DTY0Yh1T+v1BEF9jI945ZRMA3fuxdcd0CyoXnZzvHuvOnOSikmpK2U8QBvSF5dNJ3b/Po66j4bun0fGCUemLDeCWB+H5N9l5/8TEiga3qs94fP2MdH5/AIMupeG/rqfjEQOSjmRPj70C18/Eh38GGzM8nd/hM6/BU4tp+Mn56ft3JW/cVHzm1en8/gAu+xUNPzibjocdlHQkxU2dAwf3xc8dmc7v8H+Xwu+fYdetl8R2ykmVcVPxe/8Vy6X0+eWU2TQc+mk6fuPEpCOJW/0xfHda0lFILaX0r4iIiIiIZJUSVBERERFJFSWoIiIiIpIqSlBFREREJFWUoIqIiIhIqihBFREREZFUSW05GBEREZEkmNENGAj0BfoAW4D1wNvubE4ytqxQgioiIiKZZ0Y/4DvAacAIKFpX3M14G3gSeAB4xp2GZu53KTCxhY/8GNgGrAReA55w5+US4nwcODRsPuXOpa1dU+QeS2B3veDp7kwu9x7tZcYNwIWRruOiyb8SVBEREcksM3oCNwKXAfu0djowNHxdAbxnxu0ESd7GgnN7AUNKDOM8YJIZrwPXuPNwC+cOiNz3ryXev9AQmhLU3m28R5uZcTHBdx4Vm3aqBFVEREQyyYyhwJ+Bw4u8/TdgNcHj/d5Af4LkMOpg4GfAgcAPKxDSUcBDZkwGrnVP77a4bWXGKcBvWjtPCaqIiIhkTpicLiA+grgOmALc587KItcMAr5KMNp6XJkfeSqwKdLuBPQDjgHOAY6OvHcN8BFB8rvXMONwYBbQubVztYpfREREMsWMrsBs4snpE8BQd6YWS04B3Fnmzh3AMODrwDtlfOwidxZGXgvcmePOTQRJ6vcgNp/1J2YcUs6fK83M2B94BNgv7HqrpfOVoIqIiEjW3ER8xPJR4Ax3NpRysTvuzgPA54AZ7Q0mvN80YFKkuzMwvr33TgMzugAP0jR3dg7wny1dowRVREREMsOMPgSP6PNWARe5s7Pce7mz2Z0LgZsrFN4vIBbHqArdNzFmGHA3cGLY9TJwPtDY0nVKUEVERCRLrgC6RtqT3VnXnhu6s7Z9Ie2+z0fEpw0cVIn7JmwScG54vBw405261i5SgioiIiJZMiZyvAn4XVKBNGNL5Li1slepZsa3gX8Pm5sIplGsLuVaJagiIiKSCWZ0B4ZHuv7iHksI0yBayqqkZC6NzBgN3BE2G4Bz3Euv26oEVURERLJiGPEdouYnFUgxZgwnKD2VtyCpWNrDjCOA+2n6rie480Q591CCKiIiIlmxf0H77USiKMKMjuy52GpWErG0hxkHEJST6hV23ezOneXeRwmqiIiIZEWfgvbHiURRINxudSZwSqR7rnu6RnhbY8Y+BOWkBodds2iag1oW7SQlIiIiWdG9oF3L+afHme3eSaozQSWBQcDxwLeAnpFzPwQuqWFs7WZGjqCc1Iiw60VgvHvL5aSaowRVREREsmJjQbtn0bOq4+kSz/sbcLY7K6oZTBVMItiyFWAZ8DV3trX1ZnrELyIiIlmxvqDdu+hZydgKTAWOd+eNpIMphxn7AdeEzQ3A6e582J57agRVREREsqKwIP/hNfzsRcCuSHszwRzY94DngGfCQv2tqY8cdyg3iHBnp+gA5Y5y71FE9H7vAFeatXrN0IL2bWZNfzYlqCIiIpIVrxBsJZovf3RyDT/7VPeKLMraFDluSyH/fYBo+rihfeHs4fPhq1wXRxt6xC8iIiKZEBblfznSdaJZrO7oJ0F0Hm3fNlx/YEG70glqRWgEVURERLLkMeDE8LgzcBUwMblwyvYmcGZ4/BkzOrrTUMb1RxW0KzHfdSPxHbpKMQa4KdI+mUhVBSWoIiIikiV3ECSk+4btCWbc3daFSWZ0AIa682alAmxFdAS4KzAaeLyM60+PHDcQzI1tlzBBXljONWYcWdC1yL1pdFiP+EVERCQz3FkDsZ2NugJ/Mttjl6lWhdMD5lLbmqVPQ6x803XhwqdWmdEfuDDS9VR7SkFVkxJUERERyZrrgf+LtI8EFpgxrJSLzehixpXAq8R3f6o6d9YB90a6/h6Y3Np1ZnQDZtM0cgzwy8pGVzlKUEVERCRT3NkMjCW+QGgI8JIZ95lxlll81ykzepnxFTNuJSildBtwQM2CjrsBYnVG/82MJ8wYZRafvmlGDzPGAYuBEyJvPRq+UklzUEVERCRz3HnLjBEEo4r5+ZA5gm1HvwUQbk26Edgf6NLC7TZXMdQ9uLPKjPOAR2gaEf1y+NpqxkqCBUd9gAHsme+9RTu2Ia0FjaCKiIhIJrnzFsHe8TdTPMnsAQykeHJaD8wCTnaPrUavCXeeBb4ELCl4qyvwWYJapIPYMzmdDXyhxE0BEqMRVBEREcms8HH/RDMmAxcAo4CR7Fkv1IEVwHxgHjArnA/anGXAk5H2zkrFvDsgZ5EZRxGM+F5AkLB2L3LqSuBZ4JfuvFjpONroA+LfT6xUlhJUERERybxwl6fbwxdmdCF4RN6DYK7q2nLqjbrzR+CPVQi18HMaCBZN3RvOP+0P9Aa6EWylus6d1dWOo1zuPEk8QY1RgioiIiJSwJ3twPvh6xMhTFaXh69PtNQlqJvqejBldvo2dFix1nIPv+S8vz7pSIp77g1YvsZyU2Z70qE0a3s9TJmddBTN21RnubvmOgf0TDqSPS15fykffOy88i7U1ScdTXFLV8OaDZa7//n0/gbrG+D+55OOonlbtlvu6cXO4mVJR1LcirWwqQ5yKf0OV30EH28hl+b/xvUNMOsFsJKqVtbeynWW21bveMr+Gm/Z3i3pEKTGzBP+FZrxc+D7iQYhknqLoayd7ERE9kZdaFpwz1h35iQYjFRRGkZQ3wVeyNnyYY1+yKeSDkYknY5JOgARkVTI2bIPG33QUiClzzSlEhIvM+XObe58sdGX/SjpWERERCTdGv1XY9z5ojvPJR2LVE/ij/jzwoKzM5OOQ0RERFKtn3tsFyXZC/0/Tc95AoNRmtsAAAAASUVORK5CYII=" } }, "cell_type": "markdown", - "id": "6a4c4051", + "id": "b90252f1", "metadata": {}, "source": [ "
\n", - "\n", + "\n", "
" ] }, + { + "cell_type": "markdown", + "id": "866824c6", + "metadata": {}, + "source": [ + "## Conclusion\n", + "Cyclic partitioning tends to work well in problems with predictable load imbalance. It is a form of **static load balancing** which means using a pre-defined load schedule based on prior information about the algorithm (as opposed to **dynamic load balancing** which can schedule loads flexibly during runtime). The data dependencies are the same as for the 1d block partitioning.\n", + "\n", + "At the same time, cyclic partitioning is not suitable for all communication patterns. For example, it can lead to a large communication overhead in the parallel Jacobi method, since the computation of each value depends on its neighbouring elements." + ] + }, { "cell_type": "markdown", "id": "20982b04", "metadata": {}, "source": [ "## Exercise\n", - "\n", - "- The actual parallel implementation is let as an exercise\n", - "- Implement both 1d block and 1d cyclic partitions and compare performance\n", - "- Closely related with Floyd's algorithm\n", - "- Generate input matrix with function below (a random matrix is not enough, we need a non singular matrix that does not require pivoting)" + "The actual implementation of the parallel algorithm is left as an exercise. Implement both 1d block and 1d cyclic partitioning and compare their performance. The implementation is closely related to that of Floyd's algorithm. To test your algorithms, generate input matrices with the function below (a random matrix is not enough, we need a non singular matrix that does not require pivoting). " ] }, { @@ -343,16 +451,37 @@ "metadata": {}, "outputs": [], "source": [ - "n = 5\n", + "n = 12\n", "C = tridiagonal_matrix(n)\n", "b = ones(n)\n", - "gaussian_elimination!(C)" + "B = [C b]\n", + "gaussian_elimination!(B)" ] + }, + { + "cell_type": "markdown", + "id": "f60d9ea0", + "metadata": {}, + "source": [ + "# License\n", + "\n", + "\n", + "\n", + "This notebook is part of the course [Programming Large Scale Parallel Systems](https://www.francescverdugo.com/XM_40017) at Vrije Universiteit Amsterdam and may be used under a [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) license." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ab22f67", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.0", + "display_name": "Julia 1.9.1", "language": "julia", "name": "julia-1.9" }, @@ -360,7 +489,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.0" + "version": "1.9.1" } }, "nbformat": 4, diff --git a/dev/LEQ/index.html b/dev/LEQ/index.html index fa13ca3..5ed7f23 100644 --- a/dev/LEQ/index.html +++ b/dev/LEQ/index.html @@ -1,5 +1,5 @@ -Gaussian elimination · XM_40017
+- · XM_40017
Tip
    @@ -14,4 +14,4 @@ var myIframe = document.getElementById("notebook"); iFrameResize({log:true}, myIframe); }); -
+
diff --git a/dev/LEQ_src/index.html b/dev/LEQ_src/index.html index 04f1b5e..eac8edd 100644 --- a/dev/LEQ_src/index.html +++ b/dev/LEQ_src/index.html @@ -7333,11 +7333,12 @@ a.anchor-link { if (!diagrams.length) { return; } - const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.5.0/mermaid.esm.min.mjs")).default; + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, + maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) @@ -7408,7 +7409,8 @@ a.anchor-link { let results = null; let output = null; try { - const { svg } = await mermaid.render(id, raw, el); + let { svg } = await mermaid.render(id, raw, el); + svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement("figure"); results.map(output.appendChild, output); @@ -7423,6 +7425,38 @@ a.anchor-link { parent.appendChild(output); } + + /** + * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. + */ + function cleanMermaidSvg(svg) { + return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); + } + + + /** + * A regular expression for all void elements, which may include attributes and + * a slash. + * + * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element + * + * Of these, only `
` is generated by Mermaid in place of `\n`, + * but _any_ "malformed" tag will break the SVG rendering entirely. + */ + const RE_VOID_ELEMENT = + /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi; + + /** + * Ensure a void element is closed with a slash, preserving any attributes. + */ + function replaceVoidElement(match, tag, rest) { + rest = rest.trim(); + if (!rest.endsWith('/')) { + rest = `${rest} /`; + } + return `<${tag} ${rest}>`; + } + void Promise.all([...diagrams].map(renderOneMarmaid)); }); @@ -7505,13 +7539,49 @@ a.anchor-link { +
+ +
+ +
+ +
+ +
+
+
+
+ +
+ +
-
+ + + - +
+ +
+
+ @@ -7772,26 +7944,21 @@ $$

-
+
+
@@ -7802,12 +7969,7 @@ $$

@@ -7845,10 +8007,36 @@ $$

In [ ]:
-
n = 5
+
n = 12
 C = tridiagonal_matrix(n)
 b = ones(n)
-gaussian_elimination!(C)
+B = [C b]
+gaussian_elimination!(B)
+
+
+
+
+ + +
+ +
+" + ] + }, + { + "cell_type": "markdown", + "id": "d89d2b45", + "metadata": {}, + "source": [ + "**Communication cost:** \n", + "- One process broadcasts a message of length $N$ to $P-1$ processes per iteration. Thus, the **send cost** is $O(N P)$ per iteration (if we use send/receive instead of broadcast).\n", + "- $P-1$ processes receive one message of length $N$ per iteration. Hence, the **receive cost** is $O(N)$ per iteration at each process. " + ] + }, + { + "attachments": { + "fig-asp-efficiency-comm-2.png": { + "image/png": "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p08fpkyZwsUXX0y7djFzq1atqqqKp556ittuu42PPvoo3rDdwK+AG909bsdeSQwlUCIiIiKSVGZ2EFBI2K7XNdaYgw8+mKuuuooJEyaQm5ub1PjSUWVlJUuXLuXOO+9kw4a4OdJWoBi4zd3jduyV5lECJSIiIiJJYWbtgcuAW4CYjZo6derEZZddxqRJk+jcuXMyw8sI27dvZ/HixSxYsIAtW+LmSJ8DdwL3uHvcjr3SNEqgRERERKRFmVkW8F1CL6cjY43p0KEDl156KZMnT6Z79+5JjS8Tbd68meLiYu6//3527oybI60lNB5+wN33JC+61k0JlIiIiIi0CAvVHsYSvokfGGtMTk4OBQUFTJ06lV69Yi5KSR3Wr19PcXExDz/8MLt374437B1CP61H3L0qedG1TkqgRERERCThzOwcworTybE+z8rKYvTo0UyfPp3+/fsnNbbWaO3atSxYsIAlS5awd+/eeMPeBG5192VJDK3VUQIlIiIiIgljZqcRVjtGxhszYsQIbrrpJo499tikxdVWvPPOO9x1112UlJTUNWwFMMPd/5KksFoVJVAiIiIi0mxmdhxwE3BRvDFDhgxh+vTpDB06NHmBtVGrVq1izpw5vPDCC3UNexYocvdXkxRWq6AESkRERESazMz6E8qRTwCyYo0ZNGgQU6ZMIT8/P4mRCUBpaSmzZs3ijTfeiDfEgceAme7+bvIiy1xKoERERESk0cysL3AjcDkQs8PtgAEDuP766xkzZgyhnoSkgrvz5JNPMnfuXN5///14wyqBxcAt7r4uedFlHiVQIiIiItJgZnYIcD0wCegQa0yfPn2YMmUKF198Me3axcytJAWqqqp46qmnmDVrFh9//HG8YbuBXwE3unvcjr1tmRIoEREREamXmR0EFBK263WNNebggw/mqquuYsKECeTm5iY1Pmm4yspKli5dyp133smGDXFzpK1AMXCbu8ft2NsWKYESERERkbjMrD1wGXALELNRU6dOnbjsssuYNGkSnTt3TmZ40gzbt29n8eLFLFiwgC1b4uZInwN3Ave4e9yOvW2JEigREREROYCZZQHfJfRyOjLWmA4dOnDppZcyefJkunfvntT4JHE2b95McXEx999/Pzt3xs2R1hIaIj/g7nuSF136UQIlIiIiIvtYqPYwlvDN8sBYY3JycigoKGDq1Kn06hVzUUoy0Pr16ykuLuahhx6isrIy3rC3CeXqH/M2mkgogRIRERERAMzsHMKK08mxPs/KymL06NFMnz6d/v37JzU2SZ61a9eyYMEClixZwt69e+MNexO41d2XJTG0tKAESkRERKSNM7PTgFnAWfHGjBgxghtvvJHjjjsueYFJSr3zzjvcddddlJSU1DVsBTDD3f+SpLBSTgmUiIiISBtlZt8gJE4XxBszbNgwpk2bxuDBg5MXmKSVl19+mdmzZ/PSSy/VNewD4Ep3fyZJYaWMEigRERGRNsbMBhKq6o0DYna4PfHEE5k2bRpnnnlmUmOT9PXHP/6ROXPm8NZbb8UbUgX0dfdPkxhW0imBEhEREWkjzKwvoQDA94GYHW6POuooioqKuOCCCwj1JERqVFRUcPHFF7N69ep4Qy5398XJjCnZ1BpaREREpJUzs+6EBrg/AvJijenbty9Tp05l7NixZGdnJzU+SX9btmxh4cKF3HfffWzbtg2Ak046iVdffbX20A+THlySKYESERERaaXMrDNwLTAViNnhtnv37kyePJl/+7d/o3379kmNT9Lfzp07eeCBB/j5z3/O5s2bARg8eDDTpk2ja9eunHvuubVviVu2r7VQAiUiIiLSyphZe+AywjmnmI2aOnXqxGWXXcakSZPo3DlmbiVtWGVlJUuXLuWuu+5i/fr1ABx99NFce+215OfnA9R1FqpVUwIlIiIi0kqYWRbwXUIvpyNjjWnfvj3jxo2jqKiI7t27JzU+SX/uzpNPPsmcOXP48MOwG69fv35cc801XHLJJdreiRIoERERkYxnodrDWOA/gIGxxuTk5FBQUMDUqVPp1SvmopS0caWlpdx66637VpZ69+5NYWGhtnfWogRKREREJIOZ2TnAHCBmo6asrCxGjx7NtGnTOPLImItS0sb97W9/Y/bs2bz44osAdOvWjcLCQq644gry8mLWHGnTlECJiIiIZCAzGwrcBpwVb8yIESO48cYbOe6445IXmGSM1atXc/fdd1NSUgJAx44d+f73v88111xDly5dUhxd+lICJSIiIpJBzOxY4CfARfHGnHLKKcyYMYOhQ4cmLzDJGO+//z733HMPjz/+OFVVVfu2d1533XX07Nkz1eGlPSVQIiIiIhnAzPoTejldAcQ8yT9o0CCmTJmyr0qaSLRPPvmEu+++m9/85jfs2bOHrKws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blQi4jclUPXLBXh/58lY9llERCTZ3Ia3cgJeQYg3gdnA381sl29RiYivdA9U/XJwYWFhPPtYiIiI1GXvA0uBXOBIMzvLzP6q5EmkftMKVD0TKGde4HccIiIiyc7M/gL8xe846oh3gRZljkV7D9QO4NEIx5dGef0rwKYyxzZEea1IOUqg6plAOfNb/I5DRERE6g8z+xvwt2peuwm4qgbPfU91rxWJRFv46p9j1q5d28PvIEREREREUpESqHooPT39Qr9jEBERERFJRUqg6qdMvwMQEREREUlFSqDqp//ZsmWLGsiJiIiIiMRICVT91KioqOg8v4MQEREREUk1SqDqKefcQL9jEBERERFJNUqg6ikzG4j+/kVEREREYqI30PVXh40bN/bzOwgRERERkVSiBKoeKy4uVjW+WnLgwAE2bSrbBF1EREREUo0SqPpNCVQtePnllznnnHOYP39+ybGGDRv6GJGIiIiIVFcDvwMQX/UuLCw8tHPnzqv9DqQuWrRoEbm5uSxZsiTseMeOHfntb3/rU1QiIiIiUhNKoOQC4AG/g6hLli1bxvTp08NWnABatGjBkCFDGDFiBC1atPApOhERERGpCSVQkokSqLhYs2YN9957L0888QTFxcUlxxs2bMjgwYPJzs6mXbt2PkYoIiIiIjWlBErOLiwsbNa5c+ddfgeSqrZu3coDDzzAQw89xL59+0qON2jQgEsvvZSbb76ZTp06+RihiIiIiMSLEihpamY/A+ZXOVLCfP/999x3333Mnj2bPXv2lBx3zpGZmcktt9zCEUcc4WOEIiIiIhJvSqAE59xAlEBFbffu3cyZM4f77ruP77//PuxcRkYGEyZM4IQTTvApOhERERFJJCVQgnNuEHA9YH7HksyKioqYN28eU6dOZePGjWHnTjrpJMaOHcuAAQN8ik5EREREaoMSKMHMuqxfv753ly5dPvI7lmRkZixYsIBJkyaxatWqsHM9e/Zk9OjRZGZm4pzzJ0ARERERqTVKoASAtLS0QYASqDIKCgr485//zGeffRZ2vEuXLtx0001cdtllpKen+xSdiIiIiNQ2JVACgJkNBO7wO45ksWTJEiZNmsQ777wTdvzggw/m+uuvZ+jQoTRu3Nin6BJn586d5Ofn889//pMTTzyR6dOn06CBvk2IiIiIBOmdkQT13bx5c6f27dtv8DsQP61atYohQ4bwyiuvhB1v2bIlWVlZZGVl0bx5c5+iS5x9+/bx+OOPM2PGDLZu3QrAV199xeWXX87pp5/uc3QiIiIiyUMJlASlFRUVXQjM8TsQP7366qthXweb4I4ZM4b27dv7FFXiHDhwgL///e9MmTKFtWvXlju/d+9eH6ISERERSV5KoKSEcy6Tep5ABTVo0IBLLrmEUaNG0aVLF7/DSYiCggL+9Kc/8cUXX/gdioiIiEjKSPM7AEkq561ataqJ30HUttAtec45Bg4cyGuvvcbUqVPrZPL0zjvvMGjQIAYPHhyWPHXs2JFJkybRrl07H6MTERERSW5agZJQzRs3bvw/wMt+B1Kbrr/+ejZu3EhaWhpZWVn07t3b75ASYtmyZUyfPp3588N7Jrdo0YIhQ4YwYsQIWrRowT333ONThCIiIiLJTwmUhHHODaSeJVCdO3cmPz/f7zASZs2aNdx777088cQTFBcXlxxv2rQpl19+OTfddBNt27b1MUIRERGR1KEESsKY2S+A4X7HITW3YcMGZs2axeOPP05RUVHJ8WBhjFGjRtGxY0cfIxQRERFJPUqgpKxDN2zYcGynTp0+9zsQqZ7t27cza9YsZs+ezZ49e0qOO+fIzMxk7NixHH744T5GKCIiIpK6lEBJOWY2CFAClWJ2797NnDlzuPfee9mxY0fYuYyMDP74xz9y/PHH+xSdiIiISN2gBEoiGQhM9jsIiU5RURHz5s1j6tSpbNy4MezcSSedxLhx4zjjjDN8ik5ERESkblECJZGcXlhY2K5z585b/A5EKlZcXMw//vEP7r77blavXh127uijj2bs2LGcd955Mc25d+/esPulRERERCScEiiJJB04H5jrdyAS2SuvvMLkyZNZunRp2PHu3bszevRoLr74YtLSom/zduDAAZ555hmmTJnCtm3bSo43aKBvESIiIiKh9O5IInLOZaIEKuksXryY3NxcFi9eHHa8Xbt23HTTTfzud7+jYcOGUc9nZrz44ovcddddrFixIuxcr1696NOnT1ziFhEREakrlEBJRGZ2PtAQ0H6uJLB8+XKmTp1arglu8+bNufLKKxk+fDgtW7aMac7333+fnJyccslYp06duOGGGxgyZEhMyZiIiIhIfaAESirSasOGDQM6der0ut+B1Gfr1q1jxowZPPnkkxw4cKDkeLCX05gxY2jfvn1Mc3788cdMnz6dV155Jex469atGTZsGNdccw1NmjSJS/wiIiIidY0SKKmQmQ0ElED5YNu2bdx///089NBD7Nu3r+R4WloaAwcOZMKECRxyyCExzbly5Ury8vJYsGABZlZyvGnTplx99dXceOONHHTQQXF7DSIiIiJ1kRIoqUwmMNrvIOqTH3/8kUcffZSZM2fyww8/hJ3LyMhg4sSJ9OrVK6Y5CwsLmT59Ok899RT79+8vOR5cxRo1ahQdO3aMS/wiIiIidZ0SKKnMUevWrTuya9euy/0OpK4L9nLKy8tjy5bw6vH9+vVjwoQJnHLKKTHNuX37dmbNmsXs2bPZs2dPyXHnHJmZmYwbN47DDjssHuGLiIiI1BtKoKRSaWlpmcA0v+Ooq/bv38///d//MWXKFNasWRN2rnfv3owfP54BAwbENOeuXbt45JFHuPfee9mxY0fYuYyMDG699VaOO+64GscuIiIiUh8pgZJKBe6DUgIVZ2bGggULuOuuu/j666/DzvXo0YMxY8aQmZmJcy7qOYOrWFOnTmXjxo1h504++WTGjRtH//794xK/iIiISH2lBEoq5ZzLWLVqVevDDjtsu9+x1BUFBQXk5OTwySefhB3v3LkzI0eO5NJLL42pgW1xcTELFy5k0qRJrFq1KuzckUceyahRoxg0aFA8QhcRERGp95RASVUaNmnS5Dzgab8DSXUfffQRkyZN4q233go73qZNG2644YZqlQ8vKCjgjjvu4PPPPw873rVrV0aMGMFll11Genp61PPt37+fp59+mmeeeYa+ffsyfvz4mFbBREREROo6JVBSJTPLRAlUta1YsYIpU6aUKx/erFkzrrrqqmqVD1+yZAm5ubksWrQo7PjBBx/M9ddfz7XXXkujRo2ini+4pTAvL4+VK1cC8N5773HeeefRr1+/mGITERERqcuUQEk0BgLpwIGqBkqp9evXc88991TYBHf06NF06NAhpjm//PJLpk2bxvz588OON2/enCuvvJLhw4fTsmXLmOZ88803yc3NLbelELyy6iIiIiJSSgmUROPg9evXn9alS5e3/Q4kFXz33Xf85S9/4eGHH2bv3r0lx4NNcKtTPnzt2rXMnDmzwmQsOzubdu3axTRnRVsKRURERKRiSqAkKs65gYASqEoEm+BWVD789ttv55hjjolpzq1bt/LAAw/w0EMPsW/fvpLjDRo04KKLLmLMmDF07949pjmXL1/OXXfdxUsvvRS2pbB58+Zce+21PPbYY3z33XcxzSkiIiJSXyiBkmhlAuP9DiIZBcuH33333WzevDnsXLAQw2mnnRbTnN9//z0PP/ww+fn57Ny5s+R4sAnuLbfcwhFHHBHTnMEthU899RT79+8vOR5cxRo1ahQdO3bkySefjGleERERkfpECZRE6/iNGzce3rFjx2/8DiRZBMuH5+bmsnr16rBzRx99NCNHjoy5fPju3buZM2cO9913H99//33YuYyMDCZMmMAJJ5wQ05yJ2FIoIiIiUl8pgZKoHThwYCBwn99xJIOCggImTpzI0qVLw453796dG2+8kcsvv5y0tLSo56usCW6fPn0YN24cAwYMiCnGXbt28cgjj1S4pfC2227j2GOPjWlOERERkfpOCZRELXAfVL1OoN5//31yc3N57733wo63bduW6667jt///vc0bNgw6vmC5cMnT57MN9+EL+717NmT0aNHk5mZGVMvpmAyNmXKFDZt2hR27uSTT2b8+PGcfvrpUc8nIiIiIqWUQEksfrply5aW7dq1+8HvQGrb0qVLueeee8qVD2/dujXDhg2rdhPcO++8k08//TTseJcuXbjppptiboJb2ZbCo446iptvvjnmLYUiIiIiEk4JlMSicVFR0c+Af/gdSG1ZuXIleXl55ZrgNm3alKuvvrraTXAnT57M22+HFzVs06YNN9xwA0OHDqVx48YxzVlQUMCf/vQnvvjii7Dj3bp1Y/jw4TEnYyIiIiISmRIoiVUm9SCBKiwsZPr06VVWrIvF8uXLmTp1arlkLNgEtzrJ2Ntvv82kSZP48MMPw4537NiRkSNHctlll8W8pTC0z5SIiIiIhFMCJbEaBKQBxX4Hkgjbt29n1qxZzJ49mz179pQcD5YPr07FunXr1jFjxowKm+COGTOG9u3bxzTnJ598wqRJk/jPf/4TdrxVq1YlWwqbNm0a05yvv/46kyZNYsuWLSXHYimEUZsC9+NdBAw3s91+x1MXOEcHoBmw2gyraryIiEh9pQRKYtVhw4YNJ3fq1Ol9vwOJp6oq1t16660cd9xxMc25bds27r///grLh48fP55DDz00pjm//vpr8vLymD9/frkthddccw3Dhg2jVatWMc25ZMkScnNzWbRoUdjxrl27xlwyvTY457oB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" + } + }, + "cell_type": "markdown", + "id": "e96eda2d", + "metadata": {}, + "source": [ + "
\n", + "\n", "
" ] }, + { + "cell_type": "markdown", + "id": "6993b9d0", + "metadata": {}, + "source": [ + "In summary, the send/computation ratio is $O(P^2/N)$ and the receive/computation ratio is $O(P/N)$. The algorithm is potentially scalable if $P<\n", + "Question: Which of the following statements is true?\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "4ec6718c", + "metadata": {}, + "source": [ + " a) The processes are synchronized in each iteration due to the blocking send and receive of row k.\n", + " b) Receiving processes may overwrite the data in row k, which can lead to incorrect behavior.\n", + " c) The sending process can only continue the computation after the data are received in every other process.\n", + " d) The receiving process does not know the source of the received data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f4a57de", + "metadata": {}, + "outputs": [], + "source": [ + "answer = \"x\" # replace x with a, b, c or d\n", + "floyd_impl_check(answer)" + ] + }, { "cell_type": "markdown", "id": "c624722a", @@ -634,9 +774,8 @@ "source": [ "### Is this implementation correct?\n", "\n", - "- Point-to-point messages are *non-overtaking* (i.e. FIFO order) according to section 3.5 of the MPI standard 4.0\n", - "\n", - "- Unfortunately this is not enough in this case" + "Point-to-point messages are *non-overtaking* (i.e. FIFO order) between the specified sender and receiver according to section 3.5 of the MPI standard 4.0.\n", + "Unfortunately this is not enough in this case. The messages can still arrive in the wrong order if messages from different processes overtake each other." ] }, { @@ -667,7 +806,7 @@ "id": "df60e4e7", "metadata": {}, "source": [ - "However, FIFO ordering is not enough. In the next figure communication between process 1 and process 3 is particularly slow. Note that process 3 receives messages from process 1 after the messages received from 2 even though FIFO order is satisfied between any two processors." + "However, FIFO ordering is not enough. In the next figure, communication between process 1 and process 3 is particularly slow. Note that process 3 receives messages from process 1 after it receives the messages from 2 even though FIFO ordering is satisfied between any two processors." ] }, { @@ -692,10 +831,72 @@ "source": [ "### Possible solutions\n", "\n", - "- Use synchronous send MPI_SSEND (less efficient). Note that the blocking send MPI_SEND used above does not guarantee that the message was received.\n", - "- Barrier at the end of each iteration over $k$ (simple solution, but synchronization overhead)\n", - "- Order incoming messages (buffering and extra user code needed)\n", - "- Use a specific rank id instead of `MPI.ANY_SOURCE` or use `MPI.Bcast!` (one needs to know which are the rows owned by the other ranks)" + "1. **Synchronous sends**: Use synchronous send MPI_SSEND. This is less efficient because we spend time waiting until each message is received. Note that the blocking send MPI_SEND used above does not guarantee that the message was received. \n", + "2. **MPI.Barrier**: Use a barrier at the end of each iteration over $k$. This is easy to implement, but we get a synchronization overhead.\n", + "3. **Order incoming messages**: The receiver orders the incoming messages, e.g. according to MPI.Status or the sender rank. This requires buffering and extra user code.\n", + "4. **MPI.Bcast!**: Communicate row k using `MPI.Bcast!`. One needs to know which are the rows owned by the other ranks." + ] + }, + { + "cell_type": "markdown", + "id": "de96ad1b", + "metadata": {}, + "source": [ + "## Exercise \n", + "Rewrite the worker code of the parallel ASP algorithm so it runs correctly. Use the `MPI.Bcast!` to solve the problem of overtaking messages. Note: Only use `MPI.Bcast!`, do not use other MPI directives in addition. You can test your function with the following code cell. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31194529", + "metadata": {}, + "outputs": [], + "source": [ + "function floyd_par!(C,N)\n", + " comm = MPI.Comm_dup(MPI.COMM_WORLD)\n", + " nranks = MPI.Comm_size(comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " T = eltype(C)\n", + " if rank == 0\n", + " buffer_root = Vector{T}(undef,N*N)\n", + " buffer_root[:] = transpose(C)[:]\n", + " else\n", + " buffer_root = Vector{T}(undef,0)\n", + " end \n", + " Nw = div(N,nranks)\n", + " buffer = Vector{T}(undef,Nw*N)\n", + " MPI.Scatter!(buffer_root,buffer,comm;root=0)\n", + " Cw = Matrix{T}(undef,Nw,N)\n", + " transpose(Cw)[:] = buffer\n", + " MPI.Barrier(comm)\n", + " floyd_worker_bcast!(Cw,comm)\n", + " buffer[:] = transpose(Cw)[:]\n", + " MPI.Gather!(buffer,buffer_root,comm;root=0)\n", + " if rank == 0\n", + " transpose(C)[:] = buffer_root[:]\n", + " end\n", + " C\n", + "end\n", + "\n", + "@everywhere function floyd_worker_bcast!(Cw,comm)\n", + " # Your implementation here\n", + "end\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1b7eb4c2", + "metadata": {}, + "outputs": [], + "source": [ + "load = 10\n", + "n = nworkers()*load\n", + "C = rand_distance_table(n)\n", + "C_seq = floyd!(copy(C))\n", + "C_par = floyd_par!(copy(C),n)\n", + "@test C_seq == C_par" ] }, { @@ -713,7 +914,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.0", + "display_name": "Julia 1.9.1", "language": "julia", "name": "julia-1.9" }, @@ -721,7 +922,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.0" + "version": "1.9.1" } }, "nbformat": 4, diff --git a/dev/asp/index.html b/dev/asp/index.html index 7f75ffe..88067e9 100644 --- a/dev/asp/index.html +++ b/dev/asp/index.html @@ -1,5 +1,5 @@ -All pairs of shortest paths · XM_40017
+- · XM_40017
Tip
    @@ -14,4 +14,4 @@ var myIframe = document.getElementById("notebook"); iFrameResize({log:true}, myIframe); }); -
+
diff --git a/dev/asp_src/index.html b/dev/asp_src/index.html index a487159..31b5cd1 100644 --- a/dev/asp_src/index.html +++ b/dev/asp_src/index.html @@ -7333,11 +7333,12 @@ a.anchor-link { if (!diagrams.length) { return; } - const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.5.0/mermaid.esm.min.mjs")).default; + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, + maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) @@ -7408,7 +7409,8 @@ a.anchor-link { let results = null; let output = null; try { - const { svg } = await mermaid.render(id, raw, el); + let { svg } = await mermaid.render(id, raw, el); + svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement("figure"); results.map(output.appendChild, output); @@ -7423,6 +7425,38 @@ a.anchor-link { parent.appendChild(output); } + + /** + * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. + */ + function cleanMermaidSvg(svg) { + return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); + } + + + /** + * A regular expression for all void elements, which may include attributes and + * a slash. + * + * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element + * + * Of these, only `
` is generated by Mermaid in place of `\n`, + * but _any_ "malformed" tag will break the SVG rendering entirely. + */ + const RE_VOID_ELEMENT = + /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi; + + /** + * Ensure a void element is closed with a slash, preserving any attributes. + */ + function replaceVoidElement(match, tag, rest) { + rest = rest.trim(); + if (!rest.endsWith('/')) { + rest = `${rest} /`; + } + return `<${tag} ${rest}>`; + } + void Promise.all([...diagrams].map(renderOneMarmaid)); }); @@ -7505,18 +7539,66 @@ a.anchor-link { +
+ +
+ +
+
+ +
@@ -7706,7 +7788,7 @@ a.anchor-link {
@@ -7772,7 +7854,7 @@ a.anchor-link {
@@ -7802,7 +7884,7 @@ a.anchor-link { -
+
+
+ +
@@ -7914,6 +8009,38 @@ a.anchor-link { +
+ +
+ +
-
+ - @@ -8056,7 +8213,7 @@ a.anchor-link {
@@ -8076,6 +8233,7 @@ a.anchor-link { C_k = similar(Cw,n) for k in 1:n if k in rows_w + # Send row k to other workers if I have it myk = (k-first(rows_w))+1 C_k .= view(Cw,myk,:) for proc in 0:(nranks-1) @@ -8085,6 +8243,7 @@ a.anchor-link { MPI.Send(C_k,comm;dest=proc,tag=0) end else + # Wait until row k is received MPI.Recv!(C_k,comm,source=MPI.ANY_SOURCE,tag=0) end for j in 1:n @@ -8101,6 +8260,48 @@ a.anchor-link { +
+ +
+
+ +
+ +
@@ -8207,7 +8404,7 @@ a.anchor-link {
@@ -8231,12 +8428,84 @@ a.anchor-link {
+
+ + +
+ +
+ +
+ diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js index f531160..b2bdd43 100644 --- a/dev/assets/documenter.js +++ b/dev/assets/documenter.js @@ -4,7 +4,6 @@ requirejs.config({ 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', - 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', @@ -103,9 +102,10 @@ $(document).on("click", ".docstring header", function () { }); }); -$(document).on("click", ".docs-article-toggle-button", function () { +$(document).on("click", ".docs-article-toggle-button", function (event) { let articleToggleTitle = "Expand docstring"; let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; debounce(() => { if (isExpanded) { @@ -116,7 +116,7 @@ $(document).on("click", ".docs-article-toggle-button", function () { isExpanded = false; - $(".docstring section").slideUp(); + $(".docstring section").slideUp(animationSpeed); } else { $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); $(".docstring-article-toggle-button") @@ -127,7 +127,7 @@ $(document).on("click", ".docs-article-toggle-button", function () { articleToggleTitle = "Collapse docstring"; navArticleToggleTitle = "Collapse all docstrings"; - $(".docstring section").slideDown(); + $(".docstring section").slideDown(animationSpeed); } $(this).prop("title", navArticleToggleTitle); @@ -224,224 +224,474 @@ $(document).ready(function () { }) //////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'minisearch'], function($, minisearch) { +require(['jquery'], function($) { -// In general, most search related things will have "search" as a prefix. -// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); -let results = []; -let timer = undefined; - -let data = documenterSearchIndex["docs"].map((x, key) => { - x["id"] = key; // minisearch requires a unique for each object - return x; + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } }); -// list below is the lunr 2.1.3 list minus the intersect with names(Base) -// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) -// ideally we'd just filter the original list but it's not available as a variable -const stopWords = new Set([ - "a", - "able", - "about", - "across", - "after", - "almost", - "also", - "am", - "among", - "an", - "and", - "are", - "as", - "at", - "be", - "because", - "been", - "but", - "by", - "can", - "cannot", - "could", - "dear", - "did", - "does", - "either", - "ever", - "every", - "from", - "got", - "had", - "has", - "have", - "he", - "her", - "hers", - "him", - "his", - "how", - "however", - "i", - "if", - "into", - "it", - "its", - "just", - "least", - "like", - "likely", - "may", - "me", - "might", - "most", - "must", - "my", - "neither", - "no", - "nor", - "not", - "of", - "off", - "often", - "on", - "or", - "other", - "our", - "own", - "rather", - "said", - "say", - "says", - "she", - "should", - "since", - "so", - "some", - "than", - "that", - "the", - "their", - "them", - "then", - "there", - "these", - "they", - "this", - "tis", - "to", - "too", - "twas", - "us", - "wants", - "was", - "we", - "were", - "what", - "when", - "who", - "whom", - "why", - "will", - "would", - "yet", - "you", - "your", -]); +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { -let index = new minisearch({ - fields: ["title", "text"], // fields to index for full-text search - storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results - processTerm: (term) => { - let word = stopWords.has(term) ? null : term; - if (word) { - // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names - word = word - .replace(/^[^a-zA-Z0-9@!]+/, "") - .replace(/[^a-zA-Z0-9@!]+$/, ""); - } +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc - return word ?? null; - }, - // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification - tokenize: (string) => string.split(/[\s\-\.]+/), - // options which will be applied during the search - searchOptions: { - boost: { title: 100 }, - fuzzy: 2, +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results processTerm: (term) => { let word = stopWords.has(term) ? null : term; if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names word = word .replace(/^[^a-zA-Z0-9@!]+/, "") .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); } return word ?? null; }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification tokenize: (string) => string.split(/[\s\-\.]+/), - }, + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * RegX escape function from MDN + * Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + searchstring = escapeRegExp(querystring); + let textindex = new RegExp(`${searchstring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + combineWith: "AND", + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } }); -index.addAll(data); +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} -let filters = [...new Set(data.map((x) => x.category))]; -var modal_filters = make_modal_body_filters(filters); -var filter_results = []; +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } -$(document).on("keyup", ".documenter-search-input", function (event) { - // Adding a debounce to prevent disruptions from super-speed typing! - debounce(() => update_search(filter_results), 300); -}); + unfiltered_results = e.data; + update_search(); +}; $(document).on("click", ".search-filter", function () { if ($(this).hasClass("search-filter-selected")) { - $(this).removeClass("search-filter-selected"); + selected_filter = ""; } else { - $(this).addClass("search-filter-selected"); + selected_filter = $(this).text().toLowerCase(); } - // Adding a debounce to prevent disruptions from crazy clicking! - debounce(() => get_filters(), 300); + // This updates search results and toggles classes for UI: + update_search(); }); -/** - * A debounce function, takes a function and an optional timeout in milliseconds - * - * @function callback - * @param {number} timeout - */ -function debounce(callback, timeout = 300) { - clearTimeout(timer); - timer = setTimeout(callback, timeout); -} - /** * Make/Update the search component - * - * @param {string[]} selected_filters */ -function update_search(selected_filters = []) { - let initial_search_body = ` -
Type something to get started!
- `; - +function update_search() { let querystring = $(".documenter-search-input").val(); if (querystring.trim()) { - results = index.search(querystring, { - filter: (result) => { - // Filtering results - if (selected_filters.length === 0) { - return result.score >= 1; - } else { - return ( - result.score >= 1 && selected_filters.includes(result.category) - ); - } - }, - }); + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } let search_result_container = ``; + let modal_filters = make_modal_body_filters(); let search_divider = `
`; if (results.length) { @@ -449,19 +699,23 @@ function update_search(selected_filters = []) { let count = 0; let search_results = ""; - results.forEach(function (result) { - if (result.location) { - // Checking for duplication of results for the same page - if (!links.includes(result.location)) { - search_results += make_search_result(result, querystring); - count++; - } - + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; links.push(result.location); } - }); + } - let result_count = `
${count} result(s)
`; + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; search_result_container = `
@@ -490,125 +744,37 @@ function update_search(selected_filters = []) { $(".search-modal-card-body").html(search_result_container); } else { - filter_results = []; - modal_filters = make_modal_body_filters(filters, filter_results); - if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { $(".search-modal-card-body").addClass("is-justify-content-center"); } - $(".search-modal-card-body").html(initial_search_body); + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); } } /** * Make the modal filter html * - * @param {string[]} filters - * @param {string[]} selected_filters * @returns string */ -function make_modal_body_filters(filters, selected_filters = []) { - let str = ``; +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); - filters.forEach((val) => { - if (selected_filters.includes(val)) { - str += `${val}`; - } else { - str += `${val}`; - } - }); - - let filter_html = ` + return `
Filters: ${str} -
- `; - - return filter_html; -} - -/** - * Make the result component given a minisearch result data object and the value of the search input as queryString. - * To view the result object structure, refer: https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult - * - * @param {object} result - * @param {string} querystring - * @returns string - */ -function make_search_result(result, querystring) { - let search_divider = `
`; - let display_link = - result.location.slice(Math.max(0), Math.min(50, result.location.length)) + - (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div - - if (result.page !== "") { - display_link += ` (${result.page})`; - } - - let textindex = new RegExp(`\\b${querystring}\\b`, "i").exec(result.text); - let text = - textindex !== null - ? result.text.slice( - Math.max(textindex.index - 100, 0), - Math.min( - textindex.index + querystring.length + 100, - result.text.length - ) - ) - : ""; // cut-off text before and after from the match - - let display_result = text.length - ? "..." + - text.replace( - new RegExp(`\\b${querystring}\\b`, "i"), // For first occurrence - '$&' - ) + - "..." - : ""; // highlights the match - - let in_code = false; - if (!["page", "section"].includes(result.category.toLowerCase())) { - in_code = true; - } - - // We encode the full url to escape some special characters which can lead to broken links - let result_div = ` - -
-
${result.title}
-
${result.category}
-
-

- ${display_result} -

-
- ${display_link} -
-
- ${search_divider} - `; - - return result_div; -} - -/** - * Get selected filters, remake the filter html and lastly update the search modal - */ -function get_filters() { - let ele = $(".search-filters .search-filter-selected").get(); - filter_results = ele.map((x) => $(x).text().toLowerCase()); - modal_filters = make_modal_body_filters(filters, filter_results); - update_search(filter_results); +
`; } }) @@ -635,104 +801,108 @@ $(document).ready(function () { //////////////////////////////////////////////////////////////////////////////// require(['jquery'], function($) { -let search_modal_header = ` - -`; - -let initial_search_body = ` -
Type something to get started!
-`; - -let search_modal_footer = ` -
- - Ctrl + - / to search - - esc to close -
-`; - -$(document.body).append( - ` - \n", "\n", - " a) each rank holds the complete solution.\n", - " b) only the root process holds the solution. \n", - " c) the values of the ghost cells of u are not consistent with the neighbors\n", - " d) the ghost cells of u contain the initial values -1 and 1 in all ranks" + " a) each process holds the complete solution.\n", + " b) the complete solution is gathered in the root process. \n", + " c) each process contains the solution for the local partition. \n", + " d) the ghost cells of u contain the initial values -1 and 1 in all processes." ] }, { @@ -772,7 +772,7 @@ }, { "cell_type": "markdown", - "id": "267ecd2a", + "id": "f93e2024", "metadata": {}, "source": [ "### Parallelization strategies\n", @@ -783,21 +783,21 @@ "- 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" + "The three partition types are depicted in the following figure for 4 processes." ] }, { "attachments": { - "fig18.png": { - "image/png": "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" + "fig-jacobi-partitions.png": { + "image/png": "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" } }, "cell_type": "markdown", - "id": "e52959a5", + "id": "267ecd2a", "metadata": {}, "source": [ "
\n", - "\n", + "\n", "
" ] }, @@ -937,7 +937,7 @@ "\n", "\n", "- Both 1d and 2d block partitions are potentially scalable if $P< -Jacobi method · XM_40017
+- · XM_40017
Tip
    @@ -14,4 +14,4 @@ var myIframe = document.getElementById("notebook"); iFrameResize({log:true}, myIframe); }); -
+
diff --git a/dev/jacobi_method_src/index.html b/dev/jacobi_method_src/index.html index 251c46b..7b8be6a 100644 --- a/dev/jacobi_method_src/index.html +++ b/dev/jacobi_method_src/index.html @@ -7333,11 +7333,12 @@ a.anchor-link { if (!diagrams.length) { return; } - const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.5.0/mermaid.esm.min.mjs")).default; + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, + maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) @@ -7408,7 +7409,8 @@ a.anchor-link { let results = null; let output = null; try { - const { svg } = await mermaid.render(id, raw, el); + let { svg } = await mermaid.render(id, raw, el); + svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement("figure"); results.map(output.appendChild, output); @@ -7423,6 +7425,38 @@ a.anchor-link { parent.appendChild(output); } + + /** + * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. + */ + function cleanMermaidSvg(svg) { + return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); + } + + + /** + * A regular expression for all void elements, which may include attributes and + * a slash. + * + * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element + * + * Of these, only `
` is generated by Mermaid in place of `\n`, + * but _any_ "malformed" tag will break the SVG rendering entirely. + */ + const RE_VOID_ELEMENT = + /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi; + + /** + * Ensure a void element is closed with a slash, preserving any attributes. + */ + function replaceVoidElement(match, tag, rest) { + rest = rest.trim(); + if (!rest.endsWith('/')) { + rest = `${rest} /`; + } + return `<${tag} ${rest}>`; + } + void Promise.all([...diagrams].map(renderOneMarmaid)); }); @@ -7524,7 +7558,7 @@ a.anchor-link { @@ -8169,10 +8203,10 @@ d) 4
Question: At the end of function jacobi_mpi ...
-
a) each rank holds the complete solution.
-b) only the root process holds the solution. 
-c) the values of the ghost cells of u are not consistent with the neighbors
-d) the ghost cells of u contain the initial values -1 and 1 in all ranks
+
a) each process holds the complete solution.
+b) the complete solution is gathered in the root process. 
+c) each process contains the solution for the local partition. 
+d) the ghost cells of u contain the initial values -1 and 1 in all processes.
@@ -8337,7 +8371,7 @@ d) the ghost cells of u contain the initial values -1 and 1 in all ranks< -
+
-
+
+
+ +
+ +
@@ -8397,6 +8488,20 @@ d) near 0*t
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
@@ -8233,8 +8292,7 @@ bottlenecks. Being aware of the data we are moving when using functions such as
@@ -8472,6 +8531,20 @@ d) 65 +
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
-
- -
-
- -
- -
-
- -
- -
-
- -
- -
\n", "\n", - "\n", - "- Answer: Only the entries of x associated with the non-zero columns of A stored in the worker." + " a) The local entries of A and all entries of x.\n", + " b) The local entries of A and the local entries of x. \n", + " c) All entries of A and the entries of x associated with local non-zero columns of A. \n", + " d) The local entries of A and the entries of x associated with the local non-zero columns of A. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53672399", + "metadata": {}, + "outputs": [], + "source": [ + "answer=\"x\" # Replace x with a, b, c, or d\n", + "pdes_check_3(answer)" ] }, { @@ -1149,7 +1319,8 @@ "id": "4afca5ab", "metadata": {}, "source": [ - "### Ghost (halo) columns" + "### Ghost (halo) columns\n", + "In our example, each CPU needs all local entries of $x$ plus two additional entries from another machine. If all entries in $A$ were non-zero, the whole vector $x$ would be required. Thus, the sparsity of $A$ allows to reduce the amount of communication. This pays off especially in larger problems. " ] }, { @@ -1174,7 +1345,11 @@ "source": [ "### Latency hiding\n", "\n", - "A = A_own + A_ghost\n" + "We can also use latency hiding for this problem. The computations are split into two parts: \n", + "1. Multiplication with only local values of $x$ \n", + "2. Multiplication with the remaining communicated values of $x$\n", + "\n", + "The first part of the computations has no data dependencies, so it can be started immediately. During its computation, the communication of the values of $x$ can be started. " ] }, { @@ -1203,31 +1378,50 @@ }, { "cell_type": "markdown", - "id": "a6433395", + "id": "149111fa", "metadata": {}, "source": [ "
\n", "Question: Which mesh partition does lead to less communication in the sparse matrix-vector product?\n", - "
\n", - "\n", - "- Answer: 2d block (as for Jacobi method)\n" + "
" ] }, { "attachments": { - "g20102.png": { - "image/png": "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0OelpdHlk4YNc1eMRW1dnf777o6TmAcOOkptSto3sEbuffT6VNXW1kiSuvXsrW7793JcUdD8me+qbNNGSVLbDh3V9/DBjisKWrFkkVYs/kKSlJeXp0GjRjuuKKiutlYfvv5f12UggROGDFFBvl/nlV5+553o9T4DjlBJp84Oqwmb9eY01VRXS5L2795dB+yzTyNr5NbMTz7Ruk2mtWPrdiU6aPAQxxUFrf5qmZZ9Pj+6PHroUOXl5TmsKCz2GOx7+GC17dDRYTVhH70xVbU15nPT9+zWpqS9Dhx0lOOKgjavX6fPP5oZXQ40g5n20EMaOdivD/qS4cO1qaxMkjR+zBhNuOoqxxUFDb/kEv1vtmluN2LgQE1/5BHHFQVNfOwxjZs0Kbocme1X08Cyigq1ifkCcffL03XIsBENrJF7p3Zto63bj8GLbpqg748b77iioJ+MHKLPPnhPkjTgmJG664VpjisKevLOCXr8tlskSQWFhXp1fbXjioIqK8p1SpfWsTfRDMatQDOYshkz1KpFC4flhOUNGBC9ftuUl3TkCSc7rCbszH06assG04x+3MUX646rr3ZcUdDIyy/X6zNNEDlw0FG67zW//t2efeg+3X/9juesauZMFRcVOawoLPYYnPj8VA08dpTDasJO716i8s3mC9nNY8boN55ltxGXXqq3Z82SJPUfOlz3vPKW44qCZr0xTTecfnx02a/TFQAAAACiCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwjrAAAAgKcI6wAAAICnCOsAAACApwpjF5569VV9+Omnrmqx2rptW/T6azNnqlWLFg6rCStdsSJ6ffFXX+nORx91WE3YtPffDyz7Vl9VTU1g+dW/Pqr5M991VI1ddcwx+OHrU1VYXOywmrBvvloWvb76y2X6xz13OqwmbM70N6LX6+rqvKuvJub1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" + "fig-pdes-2d-partition.png": { + "image/png": "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" } }, "cell_type": "markdown", - "id": "931e1fb6", + "id": "b2883efb", "metadata": {}, "source": [ "
\n", - "\n", + "\n", "
" ] }, + { + "cell_type": "markdown", + "id": "5e2926d0", + "metadata": {}, + "source": [ + " a) The 2D block partitioning\n", + " b) The 2D cyclic partitioning\n", + " c) Both are equally good" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f67a66a", + "metadata": {}, + "outputs": [], + "source": [ + "answer=\"x\" # Replace x with a, b, or c \n", + "pdes_check_4(answer)" + ] + }, { "cell_type": "markdown", "id": "a91edb5d", @@ -1235,7 +1429,9 @@ "source": [ "Remember: The equation associated with point (i,j) is:\n", "\n", - "$u_{i-1,j} + u_{i+1,j} + u_{i,j-1} + u_{i,j+1} - 4u_{i,j} = 0$" + "$u_{i-1,j} + u_{i+1,j} + u_{i,j-1} + u_{i,j+1} - 4u_{i,j} = 0$\n", + "\n", + "Each equation for a point corresponds with a row in the matrix $A$. Each row will have only 5 non-zero values, and it reduces communication if they are on the same CPU. Therefore, the 2D block partitioning is more suitable, since only the boundary values need to be communicated." ] }, { @@ -1261,10 +1457,7 @@ "source": [ "## How to partition unstructured meshes?\n", "\n", - "- FEM methods work on unstructured meshes\n", - "- One equation per node\n", - "- Non-zero columns are associated with nodes connected by mesh edges\n", - "\n" + "Finite element methods also work on unstructured meshes. The grid of points can be modeled as a graph. Again, there will be one equation per node in the graph. The partition can be computed as the result of a k-way graph partitioning problem.\n" ] }, { @@ -1290,10 +1483,10 @@ "### k-way graph partitioning problem\n", "\n", "\n", - "Given a graph $G$ (i.e. the mesh)\n", + "Given a graph $G$ (i.e. the mesh),\n", "\n", - "- Partition the vertices of $G$ into k disjoint parts of equal size (load balance)\n", - "- Minimize the number of edges with end vertices belonging to different parts (reduce communication)\n", + "- Partition the vertices of $G$ into $k$ disjoint parts of equal size (to achieve load balance)\n", + "- Minimize the number of edges with end vertices belonging to different parts (to reduce communication)\n", "\n", "\n", "\n" @@ -1311,18 +1504,37 @@ "source": [ "### Example\n", "\n", - "- Partition of a mesh into 8 parts\n", - "- Computed with [METIS](https://github.com/KarypisLab/METIS)\n", + "The picture shows a partition of a mesh into 8 parts (computed with [METIS](https://github.com/KarypisLab/METIS)).\n", "\n", "
\n", "\n", "
\n" ] + }, + { + "cell_type": "markdown", + "id": "b706b055", + "metadata": {}, + "source": [ + "# License\n", + "\n", + "\n", + "\n", + "This notebook is part of the course [Programming Large Scale Parallel Systems](https://www.francescverdugo.com/XM_40017) at Vrije Universiteit Amsterdam and may be used under a [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) license." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "87beee72", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.0", + "display_name": "Julia 1.9.1", "language": "julia", "name": "julia-1.9" }, @@ -1330,7 +1542,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.0" + "version": "1.9.1" } }, "nbformat": 4, diff --git a/dev/pdes/index.html b/dev/pdes/index.html index ea96bdc..ae0384c 100644 --- a/dev/pdes/index.html +++ b/dev/pdes/index.html @@ -1,5 +1,5 @@ -Partial differential equations · XM_40017
+- · XM_40017
Tip
    @@ -14,4 +14,4 @@ var myIframe = document.getElementById("notebook"); iFrameResize({log:true}, myIframe); }); -
+
diff --git a/dev/pdes_src/index.html b/dev/pdes_src/index.html index 93cd0be..50d14e0 100644 --- a/dev/pdes_src/index.html +++ b/dev/pdes_src/index.html @@ -7333,11 +7333,12 @@ a.anchor-link { if (!diagrams.length) { return; } - const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.5.0/mermaid.esm.min.mjs")).default; + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, + maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) @@ -7408,7 +7409,8 @@ a.anchor-link { let results = null; let output = null; try { - const { svg } = await mermaid.render(id, raw, el); + let { svg } = await mermaid.render(id, raw, el); + svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement("figure"); results.map(output.appendChild, output); @@ -7423,6 +7425,38 @@ a.anchor-link { parent.appendChild(output); } + + /** + * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. + */ + function cleanMermaidSvg(svg) { + return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); + } + + + /** + * A regular expression for all void elements, which may include attributes and + * a slash. + * + * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element + * + * Of these, only `
` is generated by Mermaid in place of `\n`, + * but _any_ "malformed" tag will break the SVG rendering entirely. + */ + const RE_VOID_ELEMENT = + /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi; + + /** + * Ensure a void element is closed with a slash, preserving any attributes. + */ + function replaceVoidElement(match, tag, rest) { + rest = rest.trim(); + if (!rest.endsWith('/')) { + rest = `${rest} /`; + } + return `<${tag} ${rest}>`; + } + void Promise.all([...diagrams].map(renderOneMarmaid)); }); @@ -7508,15 +7542,52 @@ a.anchor-link { +
+ +
+ +
@@ -7527,11 +7598,8 @@ a.anchor-link {
@@ -7555,7 +7623,8 @@ a.anchor-link {
@@ -7608,14 +7677,15 @@ a.anchor-link {
@@ -7639,10 +7709,7 @@ a.anchor-link {
@@ -7666,11 +7733,8 @@ a.anchor-link {
@@ -7760,7 +7824,7 @@ a.anchor-link {
@@ -7818,30 +7882,17 @@ a.anchor-link { -
- -
@@ -7859,17 +7910,49 @@ a.anchor-link {
+
+ +
+ +
@@ -7940,6 +8023,18 @@ a.anchor-link {
+
+ +
+
+ +
+ +
+ @@ -7985,22 +8114,7 @@ a.anchor-link {
@@ -8011,7 +8125,7 @@ a.anchor-link {
@@ -8049,6 +8163,17 @@ a.anchor-link { + +
+
@@ -8190,23 +8311,14 @@ a.anchor-link {
-
+
+
+ +
- -
- -
-
+
+ +
@@ -8319,9 +8425,7 @@ a.anchor-link {
@@ -8332,19 +8436,19 @@ a.anchor-link {
@@ -8355,11 +8459,12 @@ a.anchor-link {
@@ -8370,7 +8475,7 @@ a.anchor-link {
@@ -8404,6 +8509,17 @@ a.anchor-link { + +
+
+
+ +
@@ -8472,7 +8602,7 @@ a.anchor-link { @@ -8593,16 +8735,13 @@ a.anchor-link {
-
+
@@ -8640,7 +8777,7 @@ a.anchor-link {
@@ -8651,7 +8788,7 @@ a.anchor-link {
@@ -8698,12 +8835,13 @@ a.anchor-link {
@@ -8714,7 +8852,9 @@ a.anchor-link {
@@ -8726,31 +8866,63 @@ a.anchor-link {
+
+ +
- + +
+ +
+ @@ -8802,7 +8990,7 @@ a.anchor-link {
@@ -8826,7 +9014,12 @@ a.anchor-link {
@@ -8855,7 +9048,7 @@ a.anchor-link { -
+
-
+ +
@@ -8915,11 +9134,7 @@ a.anchor-link {
@@ -8943,10 +9158,10 @@ a.anchor-link {
@@ -8958,10 +9173,7 @@ a.anchor-link {
+
+ +
+ +
diff --git a/dev/search_index.js b/dev/search_index.js index 64f1344..0c149fd 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"getting_started_with_julia/#Getting-started","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"getting_started_with_julia/#Introduction","page":"Getting started","title":"Introduction","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The programming of this course will be done using the Julia programming language. Thus, we start by explaining how to get up and running with Julia. After studying this page, you will be able to:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Use the Julia REPL,\nRun serial and parallel code,\nInstall and manage Julia packages.","category":"page"},{"location":"getting_started_with_julia/#Why-Julia?","page":"Getting started","title":"Why Julia?","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Courses related with high-performance computing (HPC) often use languages such as C, C++, or Fortran. We use Julia instead to make the course accessible to a wider set of students, including the ones that have no experience with C/C++ or Fortran, but are willing to learn parallel programming. Julia is a relatively new programming language specifically designed for scientific computing. It combines a high-level syntax close to interpreted languages like Python with the performance of compiled languages like C, C++, or Fortran. Thus, Julia will allow us to write efficient parallel algorithms with a syntax that is convenient in a teaching setting. In addition, Julia provides easy access to different programming models to write distributed algorithms, which will be useful to learn and experiment with them.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nYou can run the code in this link to learn how Julia compares to other languages (C and Python) in terms of performance.","category":"page"},{"location":"getting_started_with_julia/#Installing-Julia","page":"Getting started","title":"Installing Julia","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"This is a tutorial-like page. Follow these steps before you continue reading the document.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Download and install Julia from julialang.org;\nFollow the specific instructions for your operating system: Windows, MacOS, or Linux\nDownload and install VSCode and its Julia extension;","category":"page"},{"location":"getting_started_with_julia/#The-Julia-REPL","page":"Getting started","title":"The Julia REPL","text":"","category":"section"},{"location":"getting_started_with_julia/#Starting-Julia","page":"Getting started","title":"Starting Julia","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"There are several ways of opening Julia depending on your operating system and your IDE, but it is usually as simple as launching the Julia app. With VSCode, open a folder (File > Open Folder). Then, press Ctrl+Shift+P to open the command bar, and execute Julia: Start REPL. If this does not work, make sure you have the Julia extension for VSCode installed. Independently of the method you use, opening Julia results in a window with some text ending with:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia>","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You have just opened the Julia read-evaluate-print loop, or simply the Julia REPL. Congrats! You will spend most of time using the REPL, when working in Julia. The REPL is a console waiting for user input. Just as in other consoles, the string of text right before the input area (julia> in the case) is called the command prompt or simply the prompt.","category":"page"},{"location":"getting_started_with_julia/#Basic-usage","page":"Getting started","title":"Basic usage","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The usage of the REPL is as follows:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You write some input\npress enter\nyou get the output","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"For instance, try this","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> 1 + 1","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"A \"Hello world\" example looks like this in Julia","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> println(\"Hello, world!\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Try to run it in the REPL.","category":"page"},{"location":"getting_started_with_julia/#Help-mode","page":"Getting started","title":"Help mode","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Curious about what the function println does? Enter into help mode to look into the documentation. This is done by typing a question mark (?) into the input field:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ?","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"After typing ?, the command prompt changes to help?>. It means we are in help mode. Now, we can type a function name to see its documentation.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"help?> println","category":"page"},{"location":"getting_started_with_julia/#Package-and-shell-modes","page":"Getting started","title":"Package and shell modes","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The REPL comes with two more modes, namely package and shell modes. To enter package mode type","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ]","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Package mode is used to install and manage packages. We are going to discuss the package mode in greater detail later. To return back to normal mode press the backspace key several times.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To enter shell mode type semicolon (;)","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ;","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt should have changed to shell> indicating that we are in shell mode. Now you can type commands that you would normally do on your system command line. For instance,","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"shell> ls","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"will display the contents of the current folder in Mac or Linux. Using shell mode in Windows is not straightforward, and thus not recommended for beginners.","category":"page"},{"location":"getting_started_with_julia/#Running-Julia-code","page":"Getting started","title":"Running Julia code","text":"","category":"section"},{"location":"getting_started_with_julia/#Running-more-complex-code","page":"Getting started","title":"Running more complex code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Real-world Julia programs are not typed in the REPL in practice. They are written in one or more files and included in the REPL. To try this, create a new file called hello.jl, write the code of the \"Hello world\" example above, and save it. If you are using VSCode, you can create the file using File > New File > Julia File. Once the file is saved with the name hello.jl, execute it as follows","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"warning: Warning\nMake sure that the file \"hello.jl\" is located in the current working directory of your Julia session. You can query the current directory with function pwd(). You can change to another directory with function cd() if needed. Also, make sure that the file extension is .jl.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The recommended way of running Julia code is using the REPL as we did. But it is also possible to run code directly from the system command line. To this end, open a terminal and call Julia followed by the path to the file containing the code you want to execute.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia hello.jl","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The previous line assumes that you have Julia properly installed in the system and that it's usable from the terminal. In UNIX systems (Linux and Mac), the Julia binary needs to be in one of the directories listed in the PATH environment variable. To check that Julia is properly installed, you can use","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia --version","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"If this runs without error and you see a version number, you are good to go!","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nIn this tutorial, when a code snipped starts with $, it should be run in the terminal. Otherwise, the code is to be run in the Julia REPL.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nAvoid calling Julia code from the terminal, use the Julia REPL instead! Each time you call Julia from the terminal, you start a fresh Julia session and Julia will need to compile your code from scratch. This can be time consuming for large projects. In contrast, if you execute code in the REPL, Julia will compile code incrementally, which is much faster. Running code in a cluster (like in DAS-5 for the Julia assignment) is among the few situations you need to run Julia code from the terminal.","category":"page"},{"location":"getting_started_with_julia/#Running-parallel-code","page":"Getting started","title":"Running parallel code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Since we are in a parallel computing course, let's run a parallel \"Hello world\" example in Julia. Open a Julia REPL and write","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using Distributed\njulia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Here, we are using the Distributed package, which is part of the Julia standard library that provides distributed memory parallel support. The code prints the process id and the number of processes in the current Julia session.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You will probably only see output from 1 process. We need to add more processes to run the example in parallel. This is done with the addprocs function.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> addprocs(3)","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"We have added 3 new processes. Plus the old one, we have 4 processes. Run the code again.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, you should see output from 4 processes.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"It is possible to specify the number of processes when starting Julia from the terminal with the -p argument (useful, e.g., when running in a cluster). If you launch Julia from the terminal as","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia -p 3","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"and then run","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You should get output from 4 processes as before.","category":"page"},{"location":"getting_started_with_julia/#Installing-packages","page":"Getting started","title":"Installing packages","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"One of the most useful features of Julia is its package manager. It allows one to install Julia packages in a straightforward and platform independent way. To illustrate this, let us consider the following parallel \"Hello world\" example. This example uses the Message Passing Interface (MPI). We will learn more about MPI later in the course.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Copy the following block of code into a new file named \"hello_mpi.jl\"","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"# file hello_mpi.jl\nusing MPI\nMPI.Init()\ncomm = MPI.COMM_WORLD\nrank = MPI.Comm_rank(comm)\nnranks = MPI.Comm_size(comm)\nprintln(\"Hello world, I am rank $rank of $nranks\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"As you can see from this example, one can access MPI from Julia in a clean way, without type annotations and other complexities of C/C++ code.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, run the file from the REPL","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello_mpi.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"It probably didn't work, right? Read the error message and note that the MPI package needs to be installed to run this code.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install a package, we need to enter package mode. Remember that we entered into help mode by typing ?. Package mode is activated by typing ] : ","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ]","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"At this point, the prompt should have changed to (@v1.8) pkg> indicating that we are in package mode. The text between the parentheses indicates which is the active project, i.e., where packages are going to be installed. In this case, we are working with the global project associated with our Julia installation (which is Julia 1.8 in this example, but it can be another version in your case).","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install the MPI package, type","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> add MPI","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Congrats, you have installed MPI!","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nMany Julia package names end with .jl. This is just a way of signaling that a package is written in Julia. When using such packages, the .jl needs to be omitted. In this case, we have installed the MPI.jl package even though we have only typed MPI in the REPL.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nThe package you have installed is the Julia interface to MPI, called MPI.jl. Note that it is not a MPI library by itself. It is just a thin wrapper between MPI and Julia. To use this interface, you need an actual MPI library installed in your system such as OpenMPI or MPICH. Julia downloads and installs a MPI library for you, but it is also possible to use a MPI library already available in your system. This is useful, e.g., when running on HPC clusters. See the documentation of MPI.jl for further details.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To check that the package was installed properly, exit package mode by pressing the backspace key several times, and run it again","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello_mpi.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, it should work, but you probably get output from a single MPI rank only.","category":"page"},{"location":"getting_started_with_julia/#Running-MPI-code","page":"Getting started","title":"Running MPI code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To run MPI applications in parallel, you need a launcher like mpiexec. MPI codes written in Julia are not an exception to this rule. From the system terminal, you can run","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ mpiexec -np 4 julia hello_mpi.jl","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"But it will probably not work since the version of mpiexec needs to match with the MPI version we are using from Julia. Don't worry if you could not make it work! A more elegant way to run MPI code is from the Julia REPL directly, by using these commands:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using MPI\njulia> mpiexec(cmd->run(`$cmd -np 4 julia hello_mpi.jl`))","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, you should see output from 4 ranks.","category":"page"},{"location":"getting_started_with_julia/#Package-manager","page":"Getting started","title":"Package manager","text":"","category":"section"},{"location":"getting_started_with_julia/#Installing-packages-locally","page":"Getting started","title":"Installing packages locally","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"We have installed the MPI package globally and it will be available in all Julia sessions. However, in some situations, we want to work with different versions of the same package or to install packages in an isolated way to avoid potential conflicts with other packages. This can be done by using local projects.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"A project is simply a folder in the hard disk. To use a particular folder as your project, you need to activate it. This is done by entering package mode and using the activate command followed by the path to the folder you want to activate.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> activate .","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The previous command will activate the current working directory. Note that the dot . is indeed the path to the current folder.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt has changed to (lessons) pkg> indicating that we are in the project within the lessons folder. The particular folder name can be different in your case.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nYou can activate a project directly when opening Julia from the terminal using the --project flag. The command $ julia --project=. will open Julia and activate a project in the current directory. You can also achieve the same effect by setting the environment variable JULIA_PROJECT with the path of the folder you want to activate.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nThe active project folder and the current working directory are two independent concepts! For instance, (@v1.8) pkg> activate folderB and then julia> cd(\"folderA\"), will activate the project in folderB and change the current working directory to folderA.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"At this point all package-related operations will be local to the new project. For instance, install the DataFrames package.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(lessons) pkg> add DataFrames","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Use the package to check that it is installed","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using DataFrames\njulia> DataFrame(a=[1,2],b=[3,4])","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, we can return to the global project to check that DataFrames has not been installed there. To return to the global environment, use activate without a folder name.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(lessons) pkg> activate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt is again (@v1.8) pkg>","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, try to use DataFrames.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using DataFrames\njulia> DataFrame(a=[1,2],b=[3,4])","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You should get an error or a warning unless you already had DataFrames installed globally.","category":"page"},{"location":"getting_started_with_julia/#Project-and-Manifest-files","page":"Getting started","title":"Project and Manifest files","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The information about a project is stored in two files Project.toml and Manifest.toml.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Project.toml contains the packages explicitly installed (the direct dependencies)\nManifest.toml contains direct and indirect dependencies along with the concrete version of each package.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"In other words, Project.toml contains the packages relevant for the user, whereas Manifest.toml is the detailed snapshot of all dependencies. The Manifest.toml can be used to reproduce the same environment in another machine.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can see the path to the current Project.toml file by using the status operator (or st in its short form) while in package mode","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> status","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The information about the Manifest.toml can be inspected by passing the -m flag.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> status -m","category":"page"},{"location":"getting_started_with_julia/#Installing-packages-from-a-project-file","page":"Getting started","title":"Installing packages from a project file","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Project files can be used to install lists of packages defined by others. E.g., to install all the dependencies of a Julia application.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Assume that a colleague has sent to you a Project.toml file with this content:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"[deps]\nBenchmarkTools = \"6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf\"\nDataFrames = \"a93c6f00-e57d-5684-b7b6-d8193f3e46c0\"\nMPI = \"da04e1cc-30fd-572f-bb4f-1f8673147195\"","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Copy the contents of previous code block into a file called Project.toml and place it in an empty folder named newproject. It is important that the file is named Project.toml. You can create a new folder from the REPL with","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> mkdir(\"newproject\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install all the packages registered in this file you need to activate the folder containing your Project.toml file","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> activate newproject","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"and then instantiating it","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(newproject) pkg> instantiate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The instantiate command will download and install all listed packages and their dependencies in just one click.","category":"page"},{"location":"getting_started_with_julia/#Getting-help-in-package-mode","page":"Getting started","title":"Getting help in package mode","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can get help about a particular package operator by writing help in front of it","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> help activate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can get an overview of all package commands by typing help alone","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> help","category":"page"},{"location":"getting_started_with_julia/#Package-operations-in-Julia-code","page":"Getting started","title":"Package operations in Julia code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"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 Pkg package. For instance","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using Pkg\njulia> Pkg.status()","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"is equivalent to calling status in package mode.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.8) pkg> status","category":"page"},{"location":"getting_started_with_julia/#Conclusion","page":"Getting started","title":"Conclusion","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"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:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Julia Manual\nPackage manager","category":"page"},{"location":"tsp/","page":"Traveling salesperson problem","title":"Traveling salesperson problem","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/tsp.ipynb\"","category":"page"},{"location":"tsp/","page":"Traveling salesperson problem","title":"Traveling salesperson problem","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"tsp/","page":"Traveling salesperson problem","title":"Traveling salesperson problem","text":"\n","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/jacobi_2D.ipynb\"","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_async.ipynb\"","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"\n","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/solutions.ipynb\"","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"\n","category":"page"},{"location":"pdes/","page":"Partial differential equations","title":"Partial differential equations","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/pdes.ipynb\"","category":"page"},{"location":"pdes/","page":"Partial differential equations","title":"Partial differential equations","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"pdes/","page":"Partial differential equations","title":"Partial differential equations","text":"\n","category":"page"},{"location":"LEQ/","page":"Gaussian elimination","title":"Gaussian elimination","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/LEQ.ipynb\"","category":"page"},{"location":"LEQ/","page":"Gaussian elimination","title":"Gaussian elimination","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"LEQ/","page":"Gaussian elimination","title":"Gaussian elimination","text":"\n","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_distributed.ipynb\"","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"\n","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_jacobi.ipynb\"","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_tutorial.ipynb\"","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"\n","category":"page"},{"location":"mpi_tutorial/","page":"Distributed computing with MPI","title":"Distributed computing with MPI","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/mpi_tutorial.ipynb\"","category":"page"},{"location":"mpi_tutorial/","page":"Distributed computing with MPI","title":"Distributed computing with MPI","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"mpi_tutorial/","page":"Distributed computing with MPI","title":"Distributed computing with MPI","text":"\n","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/notebook-hello.ipynb\"","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_intro.ipynb\"","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"\n","category":"page"},{"location":"jacobi_method/","page":"Jacobi method","title":"Jacobi method","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/jacobi_method.ipynb\"","category":"page"},{"location":"jacobi_method/","page":"Jacobi method","title":"Jacobi method","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"jacobi_method/","page":"Jacobi method","title":"Jacobi method","text":"\n","category":"page"},{"location":"solutions_for_all_notebooks/#Solutions","page":"Solutions","title":"Solutions","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Julia-Basics","page":"Solutions","title":"Julia Basics","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#NB1-Q1","page":"Solutions","title":"NB1-Q1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"In the first, line we assign a variable to a value. In the second line, we assign another variable to the same value. Thus,we have 2 variables associated with the same value. In line 3, we associate y to a new value (re-assignment). Thus, we have 2 variables associated with 2 different values. Variable x is still associated with its original value. Thus, the value at the final line is x=1.","category":"page"},{"location":"solutions_for_all_notebooks/#NB1-Q2","page":"Solutions","title":"NB1-Q2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"It will be 1 for very similar reasons as in the previous questions: we are reassigning a local variable, not the global variable defined outside the function.","category":"page"},{"location":"solutions_for_all_notebooks/#NB1-Q3","page":"Solutions","title":"NB1-Q3","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"It will be 6. In the returned function f2, x is equal to 2. Thus, when calling f2(3) we compute 2*3.","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-1","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"function ex1(a)\n j = 1\n m = a[j]\n for (i,ai) in enumerate(a)\n if m < ai\n m = ai\n j = i\n end\n end\n (m,j)\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-2","page":"Solutions","title":"Exercise 2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"ex2(f,g) = x -> f(x) + g(x)","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-3","page":"Solutions","title":"Exercise 3","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"using GLMakie\nmax_iters = 100\nn = 1000\nx = LinRange(-1.7,0.7,n)\ny = LinRange(-1.2,1.2,n)\nheatmap(x,y,(i,j)->mandel(i,j,max_iters))","category":"page"},{"location":"solutions_for_all_notebooks/#Asynchronous-programming-in-Julia","page":"Solutions","title":"Asynchronous programming in Julia","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#NB2-Q1","page":"Solutions","title":"NB2-Q1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"Evaluating compute_π(100_000_000) takes about 0.25 seconds. Thus, the loop would take about 2.5 seconds since we are calling the function 10 times.","category":"page"},{"location":"solutions_for_all_notebooks/#NB2-Q2","page":"Solutions","title":"NB2-Q2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"The time in doing the loop will be almost zero since the loop just schedules 10 tasks, which should be very fast.","category":"page"},{"location":"solutions_for_all_notebooks/#NB2-Q3","page":"Solutions","title":"NB2-Q3","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"It will take 2.5 seconds, like in question 1. The @sync macro forces to wait for all tasks we have generated with the @async macro. Since we have created 10 tasks and each of them takes about 0.25 seconds, the total time will be about 2.5 seconds.","category":"page"},{"location":"solutions_for_all_notebooks/#NB2-Q4","page":"Solutions","title":"NB2-Q4","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"It will take about 3 seconds. The channel has buffer size 4, thus the call to put!will not block. The call to take! will not block neither since there is a value stored in the channel. The taken value is 3 and therefore we will wait for 3 seconds. ","category":"page"},{"location":"solutions_for_all_notebooks/#NB2-Q5","page":"Solutions","title":"NB2-Q5","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"The channel is not buffered and therefore the call to put! will block. The cell will run forever, since there is no other task that calls take! on this channel. ","category":"page"},{"location":"solutions_for_all_notebooks/#Distributed-computing-in-Julia","page":"Solutions","title":"Distributed computing in Julia","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#NB3-Q1","page":"Solutions","title":"NB3-Q1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"We send the matrix (16 entries) and then we receive back the result (1 extra integer). Thus, the total number of transferred integers in 17.","category":"page"},{"location":"solutions_for_all_notebooks/#NB3-Q2","page":"Solutions","title":"NB3-Q2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"Even though we only use a single entry of the matrix in the remote worker, the entire matrix is captured and sent to the worker. Thus, we will transfer 17 integers like in Question 1.","category":"page"},{"location":"solutions_for_all_notebooks/#NB3-Q3","page":"Solutions","title":"NB3-Q3","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"The value of x will still be zero since the worker receives a copy of the matrix and it modifies this copy, not the original one.","category":"page"},{"location":"solutions_for_all_notebooks/#NB3-Q4","page":"Solutions","title":"NB3-Q4","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"In this case, the code a[2]=2 is executed in the main process. Since the matrix is already in the main process, it is not needed to create and send a copy of it. Thus, the code modifies the original matrix and the value of x will be 2. ","category":"page"},{"location":"solutions_for_all_notebooks/#Distributed-computing-with-MPI","page":"Solutions","title":"Distributed computing with MPI","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-2","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"using MPI\nMPI.Init()\ncomm = MPI.Comm_dup(MPI.COMM_WORLD)\nrank = MPI.Comm_rank(comm)\nnranks = MPI.Comm_size(comm)\nbuffer = Ref(0)\nif rank == 0\n msg = 2\n buffer[] = msg\n println(\"msg = $(buffer[])\")\n MPI.Send(buffer,comm;dest=rank+1,tag=0)\n MPI.Recv!(buffer,comm;source=nranks-1,tag=0)\n println(\"msg = $(buffer[])\")\nelse\n dest = if (rank != nranks-1)\n rank+1\n else\n 0\n end\n MPI.Recv!(buffer,comm;source=rank-1,tag=0)\n buffer[] += 1\n println(\"msg = $(buffer[])\")\n MPI.Send(buffer,comm;dest,tag=0)\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-2-2","page":"Solutions","title":"Exercise 2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"f = () -> Channel{Int}(1)\nchnls = [ RemoteChannel(f,w) for w in workers() ]\n@sync for (iw,w) in enumerate(workers())\n @spawnat w begin\n chnl_snd = chnls[iw]\n if w == 2\n chnl_rcv = chnls[end]\n msg = 2\n println(\"msg = $msg\")\n put!(chnl_snd,msg)\n msg = take!(chnl_rcv)\n println(\"msg = $msg\")\n else\n chnl_rcv = chnls[iw-1]\n msg = take!(chnl_rcv)\n msg += 1\n println(\"msg = $msg\")\n put!(chnl_snd,msg)\n end\n end\nend","category":"page"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"This is another possible solution.","category":"page"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"@everywhere function work(msg)\n println(\"msg = $msg\")\n if myid() != nprocs()\n next = myid() + 1\n @fetchfrom next work(msg+1)\n else\n @fetchfrom 2 println(\"msg = $msg\")\n end\nend\nmsg = 2\n@fetchfrom 2 work(msg)","category":"page"},{"location":"solutions_for_all_notebooks/#Matrix-matrix-multiplication","page":"Solutions","title":"Matrix-matrix multiplication","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-3","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"function matmul_dist_3!(C,A,B)\n m = size(C,1)\n n = size(C,2)\n l = size(A,2)\n @assert size(A,1) == m\n @assert size(B,2) == n\n @assert size(B,1) == l\n @assert mod(m,nworkers()) == 0\n nrows_w = div(m,nworkers())\n @sync for (iw,w) in enumerate(workers())\n lb = 1 + (iw-1)*nrows_w\n ub = iw*nrows_w\n A_w = A[lb:ub,:]\n ftr = @spawnat w begin\n C_w = similar(A_w)\n matmul_seq!(C_w,A_w,B)\n C_w\n end\n @async C[lb:ub,:] = fetch(ftr)\n end\n C\nend\n\n@everywhere function matmul_seq!(C,A,B)\n m = size(C,1)\n n = size(C,2)\n l = size(A,2)\n @assert size(A,1) == m\n @assert size(B,2) == n\n @assert size(B,1) == l\n z = zero(eltype(C))\n for j in 1:n\n for i in 1:m\n Cij = z\n for k in 1:l\n @inbounds Cij = Cij + A[i,k]*B[k,j]\n end\n C[i,j] = Cij\n end\n end\n C\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-2-3","page":"Solutions","title":"Exercise 2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"At each call to @spawnat we will communicate O(N) and compute O(N) in a worker process just like in algorithm 1. However, we will do this work N^2/P times on average at each worker. Thus, the total communication and computation on a worker will be O(N^3/P) for both communication and computation. Thus, the communication over computation ratio will still be O(1) and thus the communication will dominate in practice, making the algorithm inefficient.","category":"page"},{"location":"solutions_for_all_notebooks/#Jacobi-method","page":"Solutions","title":"Jacobi method","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-4","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"@everywhere workers() begin\n using MPI\n comm = MPI.Comm_dup(MPI.COMM_WORLD)\n function jacobi_mpi(n,niters)\n nranks = MPI.Comm_size(comm)\n rank = MPI.Comm_rank(comm)\n if mod(n,nranks) != 0\n println(\"n must be a multiple of nranks\")\n MPI.Abort(comm,1)\n end\n n_own = div(n,nranks)\n u = zeros(n_own+2)\n u[1] = -1\n u[end] = 1\n u_new = copy(u)\n for t in 1:niters\n reqs = MPI.Request[]\n if rank != 0\n neig_rank = rank-1\n req = MPI.Isend(view(u,2:2),comm,dest=neig_rank,tag=0)\n push!(reqs,req)\n req = MPI.Irecv!(view(u,1:1),comm,source=neig_rank,tag=0)\n push!(reqs,req)\n end\n if rank != (nranks-1)\n neig_rank = rank+1\n s = n_own+1\n r = n_own+2\n req = MPI.Isend(view(u,s:s),comm,dest=neig_rank,tag=0)\n push!(reqs,req)\n req = MPI.Irecv!(view(u,r:r),comm,source=neig_rank,tag=0)\n push!(reqs,req)\n end\n for i in 3:n_own\n u_new[i] = 0.5*(u[i-1]+u[i+1])\n end\n MPI.Waitall(reqs)\n for i in (2,n_own+1)\n u_new[i] = 0.5*(u[i-1]+u[i+1])\n end\n u, u_new = u_new, u\n end\n return u\n end\nend","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_basics.ipynb\"","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"\n","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/matrix_matrix.ipynb\"","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"\n","category":"page"},{"location":"asp/","page":"All pairs of shortest paths","title":"All pairs of shortest paths","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/asp.ipynb\"","category":"page"},{"location":"asp/","page":"All pairs of shortest paths","title":"All pairs of shortest paths","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"asp/","page":"All pairs of shortest paths","title":"All pairs of shortest paths","text":"\n","category":"page"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = XM_40017","category":"page"},{"location":"#Programming-Large-Scale-Parallel-Systems-(XM_40017)","page":"Home","title":"Programming Large-Scale Parallel Systems (XM_40017)","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Welcome to the interactive lecture notes of the Programming Large-Scale Parallel Systems course at VU Amsterdam!","category":"page"},{"location":"#What","page":"Home","title":"What","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This page contains part of the course material of the Programming Large-Scale Parallel Systems course at VU Amsterdam. We provide several lecture notes in jupyter notebook format, which will help you to learn how to design, analyze, and program parallel algorithms on multi-node computing systems. Further information about the course is found in the study guide (click here) and our Canvas page (for registered students).","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Note\nMaterial will be added incrementally to the website as the course advances.","category":"page"},{"location":"","page":"Home","title":"Home","text":"warning: Warning\nThis page will eventually contain only a part of the course material. The rest will be available on Canvas. In particular, the material in this public webpage does not fully cover all topics in the final exam.","category":"page"},{"location":"#How-to-use-this-page","page":"Home","title":"How to use this page","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"You have two main ways of studying the notebooks:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Download the notebooks and run them locally on your computer (recommended). At each notebook page you will find a green box with links to download the notebook.\nYou also have the static version of the notebooks displayed in this webpage for quick reference.","category":"page"},{"location":"#How-to-run-the-notebooks-locally","page":"Home","title":"How to run the notebooks locally","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To run a notebook locally follow these steps:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Install Julia (if not done already). More information in Getting started.\nDownload the notebook.\nLaunch Julia. More information in Getting started.\nExecute these commands in the Julia command line:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Pkg\njulia> Pkg.add(\"IJulia\")\njulia> using IJulia\njulia> notebook()","category":"page"},{"location":"","page":"Home","title":"Home","text":"These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.","category":"page"},{"location":"#Authors","page":"Home","title":"Authors","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This material is created by Francesc Verdugo with the help of Gelieza Kötterheinrich. Part of the notebooks are based on the course slides by Henri Bal.","category":"page"},{"location":"#License","page":"Home","title":"License","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"All material on this page that is original to this course may be used under a CC BY 4.0 license.","category":"page"},{"location":"#Acknowledgment","page":"Home","title":"Acknowledgment","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This page was created with the support of the Faculty of Science of Vrije Universiteit Amsterdam in the framework of the project \"Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course\" funded by the \"Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning\".","category":"page"}] +[{"location":"getting_started_with_julia/#Getting-started","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"getting_started_with_julia/#Introduction","page":"Getting started","title":"Introduction","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The programming of this course will be done using the Julia programming language. Thus, we start by explaining how to get up and running with Julia. After studying this page, you will be able to:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Use the Julia REPL,\nRun serial and parallel code,\nInstall and manage Julia packages.","category":"page"},{"location":"getting_started_with_julia/#Why-Julia?","page":"Getting started","title":"Why Julia?","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Courses related with high-performance computing (HPC) often use languages such as C, C++, or Fortran. We use Julia instead to make the course accessible to a wider set of students, including the ones that have no experience with C/C++ or Fortran, but are willing to learn parallel programming. Julia is a relatively new programming language specifically designed for scientific computing. It combines a high-level syntax close to interpreted languages like Python with the performance of compiled languages like C, C++, or Fortran. Thus, Julia will allow us to write efficient parallel algorithms with a syntax that is convenient in a teaching setting. In addition, Julia provides easy access to different programming models to write distributed algorithms, which will be useful to learn and experiment with them.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nYou can run the code in this link to learn how Julia compares to other languages (C and Python) in terms of performance.","category":"page"},{"location":"getting_started_with_julia/#Installing-Julia","page":"Getting started","title":"Installing Julia","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"This is a tutorial-like page. Follow these steps before you continue reading the document.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Download and install Julia from julialang.org;\nFollow the specific instructions for your operating system: Windows, MacOS, or Linux\nDownload and install VSCode and its Julia extension;","category":"page"},{"location":"getting_started_with_julia/#The-Julia-REPL","page":"Getting started","title":"The Julia REPL","text":"","category":"section"},{"location":"getting_started_with_julia/#Starting-Julia","page":"Getting started","title":"Starting Julia","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"There are several ways of opening Julia depending on your operating system and your IDE, but it is usually as simple as launching the Julia app. With VSCode, open a folder (File > Open Folder). Then, press Ctrl+Shift+P to open the command bar, and execute Julia: Start REPL. If this does not work, make sure you have the Julia extension for VSCode installed. Independently of the method you use, opening Julia results in a window with some text ending with:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia>","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You have just opened the Julia read-evaluate-print loop, or simply the Julia REPL. Congrats! You will spend most of time using the REPL, when working in Julia. The REPL is a console waiting for user input. Just as in other consoles, the string of text right before the input area (julia> in the case) is called the command prompt or simply the prompt.","category":"page"},{"location":"getting_started_with_julia/#Basic-usage","page":"Getting started","title":"Basic usage","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The usage of the REPL is as follows:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You write some input\npress enter\nyou get the output","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"For instance, try this","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> 1 + 1","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"A \"Hello world\" example looks like this in Julia","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> println(\"Hello, world!\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Try to run it in the REPL.","category":"page"},{"location":"getting_started_with_julia/#Help-mode","page":"Getting started","title":"Help mode","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Curious about what the function println does? Enter into help mode to look into the documentation. This is done by typing a question mark (?) into the input field:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ?","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"After typing ?, the command prompt changes to help?>. It means we are in help mode. Now, we can type a function name to see its documentation.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"help?> println","category":"page"},{"location":"getting_started_with_julia/#Package-and-shell-modes","page":"Getting started","title":"Package and shell modes","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The REPL comes with two more modes, namely package and shell modes. To enter package mode type","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ]","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Package mode is used to install and manage packages. We are going to discuss the package mode in greater detail later. To return back to normal mode press the backspace key several times.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To enter shell mode type semicolon (;)","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ;","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt should have changed to shell> indicating that we are in shell mode. Now you can type commands that you would normally do on your system command line. For instance,","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"shell> ls","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"will display the contents of the current folder in Mac or Linux. Using shell mode in Windows is not straightforward, and thus not recommended for beginners.","category":"page"},{"location":"getting_started_with_julia/#Running-Julia-code","page":"Getting started","title":"Running Julia code","text":"","category":"section"},{"location":"getting_started_with_julia/#Running-more-complex-code","page":"Getting started","title":"Running more complex code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Real-world Julia programs are not typed in the REPL in practice. They are written in one or more files and included in the REPL. To try this, create a new file called hello.jl, write the code of the \"Hello world\" example above, and save it. If you are using VSCode, you can create the file using File > New File > Julia File. Once the file is saved with the name hello.jl, execute it as follows","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"warning: Warning\nMake sure that the file \"hello.jl\" is located in the current working directory of your Julia session. You can query the current directory with function pwd(). You can change to another directory with function cd() if needed. Also, make sure that the file extension is .jl.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The recommended way of running Julia code is using the REPL as we did. But it is also possible to run code directly from the system command line. To this end, open a terminal and call Julia followed by the path to the file containing the code you want to execute.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia hello.jl","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The previous line assumes that you have Julia properly installed in the system and that it's usable from the terminal. In UNIX systems (Linux and Mac), the Julia binary needs to be in one of the directories listed in the PATH environment variable. To check that Julia is properly installed, you can use","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia --version","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"If this runs without error and you see a version number, you are good to go!","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nIn this tutorial, when a code snipped starts with $, it should be run in the terminal. Otherwise, the code is to be run in the Julia REPL.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nAvoid calling Julia code from the terminal, use the Julia REPL instead! Each time you call Julia from the terminal, you start a fresh Julia session and Julia will need to compile your code from scratch. This can be time consuming for large projects. In contrast, if you execute code in the REPL, Julia will compile code incrementally, which is much faster. Running code in a cluster (like in DAS-5 for the Julia assignment) is among the few situations you need to run Julia code from the terminal. Visit this link (Julia workflow tips) from the official Julia documentation for further information about how to develop Julia code effectivelly.","category":"page"},{"location":"getting_started_with_julia/#Running-parallel-code","page":"Getting started","title":"Running parallel code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Since we are in a parallel computing course, let's run a parallel \"Hello world\" example in Julia. Open a Julia REPL and write","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using Distributed\njulia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Here, we are using the Distributed package, which is part of the Julia standard library that provides distributed memory parallel support. The code prints the process id and the number of processes in the current Julia session.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You will probably only see output from 1 process. We need to add more processes to run the example in parallel. This is done with the addprocs function.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> addprocs(3)","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"We have added 3 new processes. Plus the old one, we have 4 processes. Run the code again.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, you should see output from 4 processes.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"It is possible to specify the number of processes when starting Julia from the terminal with the -p argument (useful, e.g., when running in a cluster). If you launch Julia from the terminal as","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ julia -p 3","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"and then run","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> @everywhere println(\"Hello, world! I am proc $(myid()) from $(nprocs())\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You should get output from 4 processes as before.","category":"page"},{"location":"getting_started_with_julia/#Installing-packages","page":"Getting started","title":"Installing packages","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"One of the most useful features of Julia is its package manager. It allows one to install Julia packages in a straightforward and platform independent way. To illustrate this, let us consider the following parallel \"Hello world\" example. This example uses the Message Passing Interface (MPI). We will learn more about MPI later in the course.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Copy the following block of code into a new file named \"hello_mpi.jl\"","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"# file hello_mpi.jl\nusing MPI\nMPI.Init()\ncomm = MPI.COMM_WORLD\nrank = MPI.Comm_rank(comm)\nnranks = MPI.Comm_size(comm)\nprintln(\"Hello world, I am rank $rank of $nranks\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"As you can see from this example, one can access MPI from Julia in a clean way, without type annotations and other complexities of C/C++ code.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, run the file from the REPL","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello_mpi.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"It probably didn't work, right? Read the error message and note that the MPI package needs to be installed to run this code.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install a package, we need to enter package mode. Remember that we entered into help mode by typing ?. Package mode is activated by typing ] : ","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> ]","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"At this point, the prompt should have changed to (@v1.10) pkg> indicating that we are in package mode. The text between the parentheses indicates which is the active project, i.e., where packages are going to be installed. In this case, we are working with the global project associated with our Julia installation (which is Julia 1.10 in this example, but it can be another version in your case).","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install the MPI package, type","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> add MPI","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Congrats, you have installed MPI!","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nMany Julia package names end with .jl. This is just a way of signaling that a package is written in Julia. When using such packages, the .jl needs to be omitted. In this case, we have installed the MPI.jl package even though we have only typed MPI in the REPL.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nThe package you have installed is the Julia interface to MPI, called MPI.jl. Note that it is not a MPI library by itself. It is just a thin wrapper between MPI and Julia. To use this interface, you need an actual MPI library installed in your system such as OpenMPI or MPICH. Julia downloads and installs a MPI library for you, but it is also possible to use a MPI library already available in your system. This is useful, e.g., when running on HPC clusters. See the documentation of MPI.jl for further details.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To check that the package was installed properly, exit package mode by pressing the backspace key several times, and run it again","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> include(\"hello_mpi.jl\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, it should work, but you probably get output from a single MPI rank only.","category":"page"},{"location":"getting_started_with_julia/#Running-MPI-code","page":"Getting started","title":"Running MPI code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To run MPI applications in parallel, you need a launcher like mpiexec. MPI codes written in Julia are not an exception to this rule. From the system terminal, you can run","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"$ mpiexec -np 4 julia hello_mpi.jl","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"But it will probably not work since the version of mpiexec needs to match with the MPI version we are using from Julia. Don't worry if you could not make it work! A more elegant way to run MPI code is from the Julia REPL directly, by using these commands:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using MPI\njulia> run(`$(mpiexec()) -np 4 julia hello_mpi.jl`)","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, you should see output from 4 ranks.","category":"page"},{"location":"getting_started_with_julia/#Package-manager","page":"Getting started","title":"Package manager","text":"","category":"section"},{"location":"getting_started_with_julia/#Installing-packages-locally","page":"Getting started","title":"Installing packages locally","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"We have installed the MPI package globally and it will be available in all Julia sessions. However, in some situations, we want to work with different versions of the same package or to install packages in an isolated way to avoid potential conflicts with other packages. This can be done by using local projects.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"A project is simply a folder in your file system. To use a particular folder as your project, you need to activate it. This is done by entering package mode and using the activate command followed by the path to the folder you want to activate.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> activate .","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The previous command will activate the current working directory. Note that the dot . is indeed the path to the current folder.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt has changed to (lessons) pkg> indicating that we are in the project within the lessons folder. The particular folder name can be different in your case.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"tip: Tip\nYou can activate a project directly when opening Julia from the terminal using the --project flag. The command $ julia --project=. will open Julia and activate a project in the current directory. You can also achieve the same effect by setting the environment variable JULIA_PROJECT with the path of the folder you want to activate.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"note: Note\nThe active project folder and the current working directory are two independent concepts! For instance, (@v1.10) pkg> activate folderB and then julia> cd(\"folderA\"), will activate the project in folderB and change the current working directory to folderA.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"At this point all package-related operations will be local to the new project. For instance, install the DataFrames package.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(lessons) pkg> add DataFrames","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Use the package to check that it is installed","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using DataFrames\njulia> DataFrame(a=[1,2],b=[3,4])","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, we can return to the global project to check that DataFrames has not been installed there. To return to the global environment, use activate without a folder name.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(lessons) pkg> activate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The prompt is again (@v1.10) pkg>","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Now, try to use DataFrames.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using DataFrames\njulia> DataFrame(a=[1,2],b=[3,4])","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You should get an error or a warning unless you already had DataFrames installed globally.","category":"page"},{"location":"getting_started_with_julia/#Project-and-Manifest-files","page":"Getting started","title":"Project and Manifest files","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The information about a project is stored in two files Project.toml and Manifest.toml.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Project.toml contains the packages explicitly installed (the direct dependencies)\nManifest.toml contains direct and indirect dependencies along with the concrete version of each package.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"In other words, Project.toml contains the packages relevant for the user, whereas Manifest.toml is the detailed snapshot of all dependencies. The Manifest.toml can be used to reproduce the same environment in another machine.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can see the path to the current Project.toml file by using the status operator (or st in its short form) while in package mode","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> status","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The information about the Manifest.toml can be inspected by passing the -m flag.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> status -m","category":"page"},{"location":"getting_started_with_julia/#Installing-packages-from-a-project-file","page":"Getting started","title":"Installing packages from a project file","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Project files can be used to install lists of packages defined by others. E.g., to install all the dependencies of a Julia application.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Assume that a colleague has sent to you a Project.toml file with this content:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"[deps]\nBenchmarkTools = \"6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf\"\nDataFrames = \"a93c6f00-e57d-5684-b7b6-d8193f3e46c0\"\nMPI = \"da04e1cc-30fd-572f-bb4f-1f8673147195\"","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Copy the contents of previous code block into a file called Project.toml and place it in an empty folder named newproject. It is important that the file is named Project.toml. You can create a new folder from the REPL with","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> mkdir(\"newproject\")","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"To install all the packages registered in this file you need to activate the folder containing your Project.toml file","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> activate newproject","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"and then instantiating it","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(newproject) pkg> instantiate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"The instantiate command will download and install all listed packages and their dependencies in just one click.","category":"page"},{"location":"getting_started_with_julia/#Getting-help-in-package-mode","page":"Getting started","title":"Getting help in package mode","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can get help about a particular package operator by writing help in front of it","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> help activate","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"You can get an overview of all package commands by typing help alone","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> help","category":"page"},{"location":"getting_started_with_julia/#Package-operations-in-Julia-code","page":"Getting started","title":"Package operations in Julia code","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"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 Pkg package. For instance","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"julia> using Pkg\njulia> Pkg.status()","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"is equivalent to calling status in package mode.","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"(@v1.10) pkg> status","category":"page"},{"location":"getting_started_with_julia/#Conclusion","page":"Getting started","title":"Conclusion","text":"","category":"section"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"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:","category":"page"},{"location":"getting_started_with_julia/","page":"Getting started","title":"Getting started","text":"Julia Manual\nPackage manager","category":"page"},{"location":"tsp/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/tsp.ipynb\"","category":"page"},{"location":"tsp/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"tsp/","page":"-","title":"-","text":"\n","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/jacobi_2D.ipynb\"","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"jacobi_2D/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_async.ipynb\"","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_async/","page":"Asynchronous programming in Julia","title":"Asynchronous programming in Julia","text":"\n","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/solutions.ipynb\"","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"solutions/","page":"-","title":"-","text":"\n","category":"page"},{"location":"pdes/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/pdes.ipynb\"","category":"page"},{"location":"pdes/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"pdes/","page":"-","title":"-","text":"\n","category":"page"},{"location":"LEQ/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/LEQ.ipynb\"","category":"page"},{"location":"LEQ/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"LEQ/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_distributed.ipynb\"","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_distributed/","page":"Distributed computing in Julia","title":"Distributed computing in Julia","text":"\n","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_jacobi.ipynb\"","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_jacobi/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_tutorial.ipynb\"","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_tutorial/","page":"-","title":"-","text":"\n","category":"page"},{"location":"mpi_tutorial/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/mpi_tutorial.ipynb\"","category":"page"},{"location":"mpi_tutorial/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"mpi_tutorial/","page":"-","title":"-","text":"\n","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/notebook-hello.ipynb\"","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"notebook-hello/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_intro.ipynb\"","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_intro/","page":"-","title":"-","text":"\n","category":"page"},{"location":"jacobi_method/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/jacobi_method.ipynb\"","category":"page"},{"location":"jacobi_method/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"jacobi_method/","page":"-","title":"-","text":"\n","category":"page"},{"location":"solutions_for_all_notebooks/#Solutions","page":"Solutions","title":"Solutions","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Julia-Basics","page":"Solutions","title":"Julia Basics","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"function ex1(a)\n j = 1\n m = a[j]\n for (i,ai) in enumerate(a)\n if m < ai\n m = ai\n j = i\n end\n end\n (m,j)\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-2","page":"Solutions","title":"Exercise 2","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"ex2(f,g) = x -> f(x) + g(x)","category":"page"},{"location":"solutions_for_all_notebooks/#Exercise-3","page":"Solutions","title":"Exercise 3","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"using GLMakie\nmax_iters = 100\nn = 1000\nx = LinRange(-1.7,0.7,n)\ny = LinRange(-1.2,1.2,n)\nheatmap(x,y,(i,j)->mandel(i,j,max_iters))","category":"page"},{"location":"solutions_for_all_notebooks/#Asynchronous-programming-in-Julia","page":"Solutions","title":"Asynchronous programming in Julia","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Distributed-computing-in-Julia","page":"Solutions","title":"Distributed computing in Julia","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-2","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"f = () -> Channel{Int}(1)\nchnls = [ RemoteChannel(f,w) for w in workers() ]\n@sync for (iw,w) in enumerate(workers())\n @spawnat w begin\n chnl_snd = chnls[iw]\n if w == 2\n chnl_rcv = chnls[end]\n msg = 2\n println(\"msg = $msg\")\n put!(chnl_snd,msg)\n msg = take!(chnl_rcv)\n println(\"msg = $msg\")\n else\n chnl_rcv = chnls[iw-1]\n msg = take!(chnl_rcv)\n msg += 1\n println(\"msg = $msg\")\n put!(chnl_snd,msg)\n end\n end\nend","category":"page"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"This is another possible solution.","category":"page"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"@everywhere function work(msg)\n println(\"msg = $msg\")\n if myid() != nprocs()\n next = myid() + 1\n @fetchfrom next work(msg+1)\n else\n @fetchfrom 2 println(\"msg = $msg\")\n end\nend\nmsg = 2\n@fetchfrom 2 work(msg)","category":"page"},{"location":"solutions_for_all_notebooks/#MPI-(Point-to-point)","page":"Solutions","title":"MPI (Point-to-point)","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-3","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"using MPI\nMPI.Init()\ncomm = MPI.Comm_dup(MPI.COMM_WORLD)\nrank = MPI.Comm_rank(comm)\nnranks = MPI.Comm_size(comm)\nbuffer = Ref(0)\nif rank == 0\n msg = 2\n buffer[] = msg\n println(\"msg = $(buffer[])\")\n MPI.Send(buffer,comm;dest=rank+1,tag=0)\n MPI.Recv!(buffer,comm;source=nranks-1,tag=0)\n println(\"msg = $(buffer[])\")\nelse\n dest = if (rank != nranks-1)\n rank+1\n else\n 0\n end\n MPI.Recv!(buffer,comm;source=rank-1,tag=0)\n buffer[] += 1\n println(\"msg = $(buffer[])\")\n MPI.Send(buffer,comm;dest,tag=0)\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Matrix-matrix-multiplication","page":"Solutions","title":"Matrix-matrix multiplication","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-4","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"function matmul_dist_3!(C,A,B)\n m = size(C,1)\n n = size(C,2)\n l = size(A,2)\n @assert size(A,1) == m\n @assert size(B,2) == n\n @assert size(B,1) == l\n @assert mod(m,nworkers()) == 0\n nrows_w = div(m,nworkers())\n @sync for (iw,w) in enumerate(workers())\n lb = 1 + (iw-1)*nrows_w\n ub = iw*nrows_w\n A_w = A[lb:ub,:]\n ftr = @spawnat w begin\n C_w = similar(A_w)\n matmul_seq!(C_w,A_w,B)\n C_w\n end\n @async C[lb:ub,:] = fetch(ftr)\n end\n C\nend\n\n@everywhere function matmul_seq!(C,A,B)\n m = size(C,1)\n n = size(C,2)\n l = size(A,2)\n @assert size(A,1) == m\n @assert size(B,2) == n\n @assert size(B,1) == l\n z = zero(eltype(C))\n for j in 1:n\n for i in 1:m\n Cij = z\n for k in 1:l\n @inbounds Cij = Cij + A[i,k]*B[k,j]\n end\n C[i,j] = Cij\n end\n end\n C\nend","category":"page"},{"location":"solutions_for_all_notebooks/#Jacobi-method","page":"Solutions","title":"Jacobi method","text":"","category":"section"},{"location":"solutions_for_all_notebooks/#Exercise-1-5","page":"Solutions","title":"Exercise 1","text":"","category":"section"},{"location":"solutions_for_all_notebooks/","page":"Solutions","title":"Solutions","text":"@everywhere workers() begin\n using MPI\n comm = MPI.Comm_dup(MPI.COMM_WORLD)\n function jacobi_mpi(n,niters)\n nranks = MPI.Comm_size(comm)\n rank = MPI.Comm_rank(comm)\n if mod(n,nranks) != 0\n println(\"n must be a multiple of nranks\")\n MPI.Abort(comm,1)\n end\n n_own = div(n,nranks)\n u = zeros(n_own+2)\n u[1] = -1\n u[end] = 1\n u_new = copy(u)\n for t in 1:niters\n reqs = MPI.Request[]\n if rank != 0\n neig_rank = rank-1\n req = MPI.Isend(view(u,2:2),comm,dest=neig_rank,tag=0)\n push!(reqs,req)\n req = MPI.Irecv!(view(u,1:1),comm,source=neig_rank,tag=0)\n push!(reqs,req)\n end\n if rank != (nranks-1)\n neig_rank = rank+1\n s = n_own+1\n r = n_own+2\n req = MPI.Isend(view(u,s:s),comm,dest=neig_rank,tag=0)\n push!(reqs,req)\n req = MPI.Irecv!(view(u,r:r),comm,source=neig_rank,tag=0)\n push!(reqs,req)\n end\n for i in 3:n_own\n u_new[i] = 0.5*(u[i-1]+u[i+1])\n end\n MPI.Waitall(reqs)\n for i in (2,n_own+1)\n u_new[i] = 0.5*(u[i-1]+u[i+1])\n end\n u, u_new = u_new, u\n end\n return u\n end\nend","category":"page"},{"location":"julia_mpi/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_mpi.ipynb\"","category":"page"},{"location":"julia_mpi/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_mpi/","page":"-","title":"-","text":"\n","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/julia_basics.ipynb\"","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"julia_basics/","page":"Julia Basics","title":"Julia Basics","text":"\n","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/matrix_matrix.ipynb\"","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"matrix_matrix/","page":"Matrix-matrix multiplication","title":"Matrix-matrix multiplication","text":"\n","category":"page"},{"location":"asp/","page":"-","title":"-","text":"EditURL = \"https://github.com/fverdugo/XM_40017/blob/main/notebooks/asp.ipynb\"","category":"page"},{"location":"asp/","page":"-","title":"-","text":"
\n
Tip
\n
\n
    \n
  • \n Download this notebook and run it locally on your machine [recommended]. Click here.\n
  • \n
\n
\n
","category":"page"},{"location":"asp/","page":"-","title":"-","text":"\n","category":"page"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = XM_40017","category":"page"},{"location":"#Programming-Large-Scale-Parallel-Systems-(XM_40017)","page":"Home","title":"Programming Large-Scale Parallel Systems (XM_40017)","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Welcome to the interactive lecture notes of the Programming Large-Scale Parallel Systems course at VU Amsterdam!","category":"page"},{"location":"#What","page":"Home","title":"What","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This page contains part of the course material of the Programming Large-Scale Parallel Systems course at VU Amsterdam. We provide several lecture notes in jupyter notebook format, which will help you to learn how to design, analyze, and program parallel algorithms on multi-node computing systems. Further information about the course is found in the study guide (click here) and our Canvas page (for registered students).","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Note\nMaterial will be added incrementally to the website as the course advances.","category":"page"},{"location":"","page":"Home","title":"Home","text":"warning: Warning\nThis page will eventually contain only a part of the course material. The rest will be available on Canvas. In particular, the material in this public webpage does not fully cover all topics in the final exam.","category":"page"},{"location":"#How-to-use-this-page","page":"Home","title":"How to use this page","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"You have two main ways of studying the notebooks:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Download the notebooks and run them locally on your computer (recommended). At each notebook page you will find a green box with links to download the notebook.\nYou also have the static version of the notebooks displayed in this webpage for quick reference.","category":"page"},{"location":"#How-to-run-the-notebooks-locally","page":"Home","title":"How to run the notebooks locally","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To run a notebook locally follow these steps:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Install Julia (if not done already). More information in Getting started.\nDownload the notebook.\nLaunch Julia. More information in Getting started.\nExecute these commands in the Julia command line:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Pkg\njulia> Pkg.add(\"IJulia\")\njulia> using IJulia\njulia> notebook()","category":"page"},{"location":"","page":"Home","title":"Home","text":"These commands will open a jupyter in your web browser. Navigate in jupyter to the notebook file you have downloaded and open it.","category":"page"},{"location":"#Authors","page":"Home","title":"Authors","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This material is created by Francesc Verdugo with the help of Gelieza Kötterheinrich. Part of the notebooks are based on the course slides by Henri Bal.","category":"page"},{"location":"#License","page":"Home","title":"License","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"All material on this page that is original to this course may be used under a CC BY 4.0 license.","category":"page"},{"location":"#Acknowledgment","page":"Home","title":"Acknowledgment","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This page was created with the support of the Faculty of Science of Vrije Universiteit Amsterdam in the framework of the project \"Interactive lecture notes and exercises for the Programming Large-Scale Parallel Systems course\" funded by the \"Innovation budget BETA 2023 Studievoorschotmiddelen (SVM) towards Activated Blended Learning\".","category":"page"}] } diff --git a/dev/solutions.ipynb b/dev/solutions.ipynb index 1ea20d6..f0e4fe5 100644 --- a/dev/solutions.ipynb +++ b/dev/solutions.ipynb @@ -381,6 +381,315 @@ "end" ] }, + { + "cell_type": "markdown", + "id": "48e594e7", + "metadata": {}, + "source": [ + "## LEQ: Exercise 1\n", + "### Blockwise partitioning: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d890006", + "metadata": {}, + "outputs": [], + "source": [ + "function ge_par_block!(B,n,m,comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " # Init buffers\n", + " T = eltype(B)\n", + " if rank == 0\n", + " buffer_root = Vector{T}(undef,n*m)\n", + " buffer_root[:] = transpose(B)[:]\n", + " else\n", + " buffer_root = Vector{T}(undef,0)\n", + " end \n", + " nw = div(n,nranks)\n", + " buffer = Vector{T}(undef,nw*m)\n", + " # Send local matrices to workers\n", + " MPI.Scatter!(buffer_root,buffer,comm;root=0)\n", + " Bw = Matrix{T}(undef,nw,m)\n", + " transpose(Bw)[:] = buffer\n", + " MPI.Barrier(comm)\n", + " # time calcultation\n", + " t = @elapsed ge_block_worker!(Bw,n,comm)\n", + " # Gather results\n", + " buffer[:] = transpose(Bw)[:]\n", + " MPI.Gather!(buffer,buffer_root,comm;root=0)\n", + " Tf = typeof(t)\n", + " if rank == 0\n", + " transpose(B)[:] = buffer_root[:]\n", + " ts = Vector{Tf}(undef,nranks)\n", + " else\n", + " ts = Vector{Tf}(undef,0)\n", + " end\n", + " MPI.Gather!([t],ts,comm;root=0)\n", + " B, ts\n", + "end \n", + "\n", + "function ge_block_worker!(Bw,n,comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " nw,m = size(Bw)\n", + " B_k = similar(Bw,m)\n", + " lb = nw*rank + 1\n", + " ub = nw*(rank+1)\n", + " @inbounds for k in 1:n\n", + " # If I have row k\n", + " if k in lb:ub\n", + " myk = k - lb + 1\n", + " # Update just row k\n", + " #@show Bw[myk,k]\n", + " for t in (k+1):m\n", + " Bw[myk,t] = Bw[myk,t]/Bw[myk,k]\n", + " end\n", + " Bw[myk,k] = 1\n", + " # Send k to other procs\n", + " B_k .= view(Bw,myk,:)\n", + " MPI.Bcast!(B_k,comm;root=rank)\n", + " else\n", + " myk = 0\n", + " owner = div(k-1,nw)\n", + " MPI.Bcast!(B_k,comm;root=owner)\n", + " end\n", + " # Do nothing if I only have rows < k \n", + " if k <= ub\n", + " for i in (myk+1):nw\n", + " for j in (k+1):m\n", + " Bw[i,j] = Bw[i,j] - Bw[i,k]*B_k[j]\n", + " end\n", + " Bw[i,k] = 0\n", + " end\n", + " end\n", + " end\n", + " Bw\n", + "end" + ] + }, + { + "cell_type": "markdown", + "id": "18c688ac", + "metadata": {}, + "source": [ + "### Cyclic partitioning: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ba555b2", + "metadata": {}, + "outputs": [], + "source": [ + "function ge_par_cyclic!(B,n,m,comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " nw = div(n,nranks)\n", + " # Init buffers\n", + " T = eltype(B)\n", + " if rank == 0\n", + " buffer_root = Vector{T}(undef,n*m)\n", + " # Fill buffer cyclicly\n", + " for i in 1:n\n", + " ub = i * m \n", + " lb = ub - m + 1\n", + " j = mod(i-1,nw)*nranks + div(i-1,nw) +1\n", + " buffer_root[lb:ub] = transpose(B)[:,j]\n", + " end\n", + " else\n", + " buffer_root = Vector{T}(undef,0)\n", + " end \n", + " buffer = Vector{T}(undef,nw*m)\n", + " # Send local matrices to workers\n", + " MPI.Scatter!(buffer_root,buffer,comm;root=0)\n", + " Bw = Matrix{T}(undef,nw,m)\n", + " transpose(Bw)[:] = buffer\n", + " MPI.Barrier(comm)\n", + " # time calcultation\n", + " t = @elapsed ge_cyclic_worker!(Bw,n,comm)\n", + " # Gather results\n", + " buffer[:] = transpose(Bw)[:]\n", + " MPI.Gather!(buffer,buffer_root,comm;root=0)\n", + " Tf = typeof(t)\n", + " if rank == 0\n", + " for i in 1:n\n", + " ub = i * m \n", + " lb = ub - m + 1\n", + " j = mod(i-1,nw)*nranks + div(i-1,nw) +1\n", + " transpose(B)[:,j] = buffer_root[lb:ub]\n", + " end\n", + " ts = Vector{Tf}(undef,nranks)\n", + " else\n", + " ts = Vector{Tf}(undef,0)\n", + " end\n", + " MPI.Gather!([t],ts,comm;root=0)\n", + " B, ts\n", + "end\n", + "\n", + "function ge_cyclic_worker!(Bw,n,comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " nw,m = size(Bw)\n", + " B_k = similar(Bw,m)\n", + " my_rows = [i*nranks+(rank+1) for i in 0:(nw-1)]\n", + " @inbounds for k in 1:n\n", + " # If I have row k\n", + " if k in my_rows\n", + " myk = findfirst(my_rows .== k)[2]\n", + " # Update just row k\n", + " for t in (k+1):m\n", + " Bw[myk,t] = Bw[myk,t]/Bw[myk,k]\n", + " end\n", + " Bw[myk,k] = 1\n", + " # Send k to other procs\n", + " B_k .= view(Bw,myk,:)\n", + " MPI.Bcast!(B_k,comm;root=rank)\n", + " else\n", + " owner = mod(k-1,nranks)\n", + " MPI.Bcast!(B_k,comm;root=owner)\n", + " end\n", + " # Do nothing if I only have rows < k \n", + " if k < maximum(my_rows)\n", + " cutoff = findfirst(my_rows .> k)[2]\n", + " for i in cutoff:length(my_rows)\n", + " for j in (k+1):m\n", + " Bw[i,j] = Bw[i,j] - Bw[i,k]*B_k[j]\n", + " end\n", + " Bw[i,k] = 0\n", + " end\n", + " end\n", + " end\n", + " Bw\n", + "end" + ] + }, + { + "cell_type": "markdown", + "id": "fe0bb4ab", + "metadata": {}, + "source": [ + "### Main Function to run code and test performance: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d00c192", + "metadata": {}, + "outputs": [], + "source": [ + "using MPI\n", + "using Test\n", + "MPI.Init()\n", + "\n", + "\n", + "function tridiagonal_matrix(n)\n", + " C = zeros(n,n)\n", + " stencil = [(-1,2,-1),(-1,0,1)]\n", + " for i in 1:n\n", + " for (coeff,o) in zip((-1,2,-1),(-1,0,1))\n", + " j = i+o\n", + " if j in 1:n\n", + " C[i,j] = coeff\n", + " end\n", + " end\n", + " end\n", + " C\n", + "end\n", + "\n", + "function ge_seq!(B)\n", + " n,m = size(B)\n", + " @inbounds for k in 1:n\n", + " for t in (k+1):m\n", + " B[k,t] = B[k,t]/B[k,k]\n", + " end\n", + " B[k,k] = 1\n", + " for i in (k+1):n \n", + " for j in (k+1):m\n", + " B[i,j] = B[i,j] - B[i,k]*B[k,j]\n", + " end\n", + " B[i,k] = 0\n", + " end\n", + " end\n", + " B\n", + "end\n", + "\n", + "function main_check()\n", + " # Create communicator \n", + " comm = MPI.Comm_dup(MPI.COMM_WORLD)\n", + " rank = MPI.Comm_rank(comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " n = 10*nranks\n", + " # create matrix B such that mod(n, nprocs) == 0\n", + " if rank == 0 \n", + " A = tridiagonal_matrix(n)\n", + " b = ones(n)\n", + " B = [A b]\n", + " else \n", + " B = tridiagonal_matrix(0)\n", + " end\n", + " # call parallel method \n", + " B_block, ts_block = ge_par_block!(copy(B),n,n+1,comm)\n", + " B_cyclic, ts_cyclic = ge_par_cyclic!(copy(B),n,n+1,comm)\n", + " # test if results is equal to sequential \n", + " if rank == 0\n", + " B_seq = ge_seq!(copy(B))\n", + " @test B_seq == B_block\n", + " @test B_seq == B_cyclic\n", + " # print timings\n", + " println(\"No workers: $nranks| Blockwise: min $(minimum(ts_block))| Cyclic: min $(minimum(ts_cyclic))\")\n", + " end\n", + "end\n", + "\n", + "main_check()" + ] + }, + { + "cell_type": "markdown", + "id": "cbbd3b8f", + "metadata": {}, + "source": [ + "## ASP : Exercise 1\n", + "Implementation of parallel ASP using only `MPI.Bcast!`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec5f932f", + "metadata": {}, + "outputs": [], + "source": [ + "@everywhere function floyd_worker_bcast!(Cw,comm)\n", + " rank = MPI.Comm_rank(comm)\n", + " nranks = MPI.Comm_size(comm)\n", + " Nw,N = size(Cw)\n", + " C_k = similar(Cw,N)\n", + " lb = Nw*rank + 1\n", + " ub = Nw*(rank+1)\n", + " for k in 1:N\n", + " if k in lb:ub\n", + " myk = k - lb + 1\n", + " C_k .= view(Cw,myk,:)\n", + " MPI.Bcast!(C_k,comm;root=rank)\n", + " else\n", + " owner = div(k-1,Nw)\n", + " MPI.Bcast!(C_k,comm;root=owner)\n", + " end\n", + " for j in 1:N\n", + " for i in 1:Nw\n", + " @inbounds Cw[i,j] = min(Cw[i,j],Cw[i,k]+C_k[j])\n", + " end\n", + " end\n", + " end\n", + " Cw\n", + "end" + ] + }, { "cell_type": "markdown", "id": "19641daf", @@ -401,7 +710,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "a4d5ab70", "metadata": {}, "outputs": [], @@ -424,21 +733,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "bcee99f0", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tsp_serial (generic function with 1 method)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "## TSP serial \n", "function tsp_serial_impl(connections,hops,path,current_distance, min_path, min_distance, node_count)\n", @@ -482,21 +780,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "327f5349", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tsp_dist (generic function with 1 method)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "## TSP distributed\n", "@everywhere function tsp_dist_impl(connections,hops,path,current_distance,min_dist_chnl, max_hops,jobs_chnl,ftr_result,node_count)\n", @@ -597,134 +884,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "706242f2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "n = 4\n", - "n = 6\n", - "n = 8\n", - "n = 10\n", - "search_overhead_perc = [0.75 0.16666666666666666 0.3333333333333333 0.2727272727272727 0.14285714285714285 0.07692307692307693 0.0 0.16666666666666666 0.4 0.16666666666666666; 0.01092896174863388 0.005154639175257732 0.031578947368421054 0.05384615384615385 0.4672897196261682 0.10434782608695652 0.09917355371900827 0.06666666666666667 -0.0056179775280898875 0.2736842105263158; 0.0 -0.009295120061967466 -0.0032278889606197547 0.01906318082788671 0.028241335044929396 0.0011111111111111111 -0.008201892744479496 0.004958047292143402 -0.005873715124816446 -0.009497336113041464; 3.87551835057939e-5 -0.014818818265230451 7.133685261806249e-5 -0.03200184183262346 -0.01696773663002659 -0.004075168167420009 6.629541235746487e-5 -0.0033114074608037486 -0.016359150396910535 -0.0025293711126468557]\n" - ] - }, - { - "data": { - "image/png": "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", - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "using Distributed\n", "using Plots\n", @@ -800,18 +963,6 @@ "xlabel!(\"Number of cities\")" ] }, - { - "cell_type": "markdown", - "id": "47d88e7a", - "metadata": {}, - "source": [ - "# License\n", - "\n", - "TODO: replace link to website\n", - "\n", - "This notebook is part of the course [Programming Large Scale Parallel Systems](http://localhost:8000/) at Vrije Universiteit Amsterdam and may be used under a [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) license." - ] - }, { "cell_type": "code", "execution_count": null, @@ -823,7 +974,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.0", + "display_name": "Julia 1.9.1", "language": "julia", "name": "julia-1.9" }, @@ -831,7 +982,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.0" + "version": "1.9.1" } }, "nbformat": 4, diff --git a/dev/solutions/index.html b/dev/solutions/index.html index af1cdff..eef7e46 100644 --- a/dev/solutions/index.html +++ b/dev/solutions/index.html @@ -1,5 +1,5 @@ -- · XM_40017
+- · XM_40017
Tip
    @@ -14,4 +14,4 @@ var myIframe = document.getElementById("notebook"); iFrameResize({log:true}, myIframe); }); -
+
diff --git a/dev/solutions_for_all_notebooks/index.html b/dev/solutions_for_all_notebooks/index.html index 01918fa..cfbc4e7 100644 --- a/dev/solutions_for_all_notebooks/index.html +++ b/dev/solutions_for_all_notebooks/index.html @@ -1,5 +1,5 @@ -Solutions · XM_40017

Solutions

Julia Basics

NB1-Q1

In the first, line we assign a variable to a value. In the second line, we assign another variable to the same value. Thus,we have 2 variables associated with the same value. In line 3, we associate y to a new value (re-assignment). Thus, we have 2 variables associated with 2 different values. Variable x is still associated with its original value. Thus, the value at the final line is x=1.

NB1-Q2

It will be 1 for very similar reasons as in the previous questions: we are reassigning a local variable, not the global variable defined outside the function.

NB1-Q3

It will be 6. In the returned function f2, x is equal to 2. Thus, when calling f2(3) we compute 2*3.

Exercise 1

function ex1(a)
+Solutions · XM_40017

Solutions

Julia Basics

Exercise 1

function ex1(a)
     j = 1
     m = a[j]
     for (i,ai) in enumerate(a)
@@ -14,30 +14,7 @@ max_iters = 100
 n = 1000
 x = LinRange(-1.7,0.7,n)
 y = LinRange(-1.2,1.2,n)
-heatmap(x,y,(i,j)->mandel(i,j,max_iters))

Asynchronous programming in Julia

NB2-Q1

Evaluating compute_π(100_000_000) takes about 0.25 seconds. Thus, the loop would take about 2.5 seconds since we are calling the function 10 times.

NB2-Q2

The time in doing the loop will be almost zero since the loop just schedules 10 tasks, which should be very fast.

NB2-Q3

It will take 2.5 seconds, like in question 1. The @sync macro forces to wait for all tasks we have generated with the @async macro. Since we have created 10 tasks and each of them takes about 0.25 seconds, the total time will be about 2.5 seconds.

NB2-Q4

It will take about 3 seconds. The channel has buffer size 4, thus the call to put!will not block. The call to take! will not block neither since there is a value stored in the channel. The taken value is 3 and therefore we will wait for 3 seconds.

NB2-Q5

The channel is not buffered and therefore the call to put! will block. The cell will run forever, since there is no other task that calls take! on this channel.

Distributed computing in Julia

NB3-Q1

We send the matrix (16 entries) and then we receive back the result (1 extra integer). Thus, the total number of transferred integers in 17.

NB3-Q2

Even though we only use a single entry of the matrix in the remote worker, the entire matrix is captured and sent to the worker. Thus, we will transfer 17 integers like in Question 1.

NB3-Q3

The value of x will still be zero since the worker receives a copy of the matrix and it modifies this copy, not the original one.

NB3-Q4

In this case, the code a[2]=2 is executed in the main process. Since the matrix is already in the main process, it is not needed to create and send a copy of it. Thus, the code modifies the original matrix and the value of x will be 2.

Distributed computing with MPI

Exercise 1

using MPI
-MPI.Init()
-comm = MPI.Comm_dup(MPI.COMM_WORLD)
-rank = MPI.Comm_rank(comm)
-nranks = MPI.Comm_size(comm)
-buffer = Ref(0)
-if rank == 0
-    msg = 2
-    buffer[] = msg
-    println("msg = $(buffer[])")
-    MPI.Send(buffer,comm;dest=rank+1,tag=0)
-    MPI.Recv!(buffer,comm;source=nranks-1,tag=0)
-    println("msg = $(buffer[])")
-else
-    dest = if (rank != nranks-1)
-        rank+1
-    else
-        0
-    end
-    MPI.Recv!(buffer,comm;source=rank-1,tag=0)
-    buffer[] += 1
-    println("msg = $(buffer[])")
-    MPI.Send(buffer,comm;dest,tag=0)
-end

Exercise 2

f = () -> Channel{Int}(1)
+heatmap(x,y,(i,j)->mandel(i,j,max_iters))

Asynchronous programming in Julia

Distributed computing in Julia

Exercise 1

f = () -> Channel{Int}(1)
 chnls = [ RemoteChannel(f,w) for w in workers() ]
 @sync for (iw,w) in enumerate(workers())
     @spawnat w begin
@@ -67,7 +44,30 @@ end

This is another possible solution.

Matrix-matrix multiplication

Exercise 1

function matmul_dist_3!(C,A,B)
+@fetchfrom 2 work(msg)

MPI (Point-to-point)

Exercise 1

using MPI
+MPI.Init()
+comm = MPI.Comm_dup(MPI.COMM_WORLD)
+rank = MPI.Comm_rank(comm)
+nranks = MPI.Comm_size(comm)
+buffer = Ref(0)
+if rank == 0
+    msg = 2
+    buffer[] = msg
+    println("msg = $(buffer[])")
+    MPI.Send(buffer,comm;dest=rank+1,tag=0)
+    MPI.Recv!(buffer,comm;source=nranks-1,tag=0)
+    println("msg = $(buffer[])")
+else
+    dest = if (rank != nranks-1)
+        rank+1
+    else
+        0
+    end
+    MPI.Recv!(buffer,comm;source=rank-1,tag=0)
+    buffer[] += 1
+    println("msg = $(buffer[])")
+    MPI.Send(buffer,comm;dest,tag=0)
+end

Matrix-matrix multiplication

Exercise 1

function matmul_dist_3!(C,A,B)
     m = size(C,1)
     n = size(C,2)
     l = size(A,2)
@@ -108,7 +108,7 @@ end
         end
     end
     C
-end

Exercise 2

At each call to @spawnat we will communicate O(N) and compute O(N) in a worker process just like in algorithm 1. However, we will do this work N^2/P times on average at each worker. Thus, the total communication and computation on a worker will be O(N^3/P) for both communication and computation. Thus, the communication over computation ratio will still be O(1) and thus the communication will dominate in practice, making the algorithm inefficient.

Jacobi method

Exercise 1

@everywhere workers() begin
+end

Jacobi method

Exercise 1

@everywhere workers() begin
     using MPI
     comm = MPI.Comm_dup(MPI.COMM_WORLD)
     function jacobi_mpi(n,niters)
@@ -152,4 +152,4 @@ end

« Partial differential equations

+end
diff --git a/dev/solutions_src/index.html b/dev/solutions_src/index.html index ffbe16d..c17c01d 100644 --- a/dev/solutions_src/index.html +++ b/dev/solutions_src/index.html @@ -7333,11 +7333,12 @@ a.anchor-link { if (!diagrams.length) { return; } - const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.5.0/mermaid.esm.min.mjs")).default; + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default; const parser = new DOMParser(); mermaid.initialize({ maxTextSize: 100000, + maxEdges: 100000, startOnLoad: false, fontFamily: window .getComputedStyle(document.body) @@ -7408,7 +7409,8 @@ a.anchor-link { let results = null; let output = null; try { - const { svg } = await mermaid.render(id, raw, el); + let { svg } = await mermaid.render(id, raw, el); + svg = cleanMermaidSvg(svg); results = makeMermaidImage(svg); output = document.createElement("figure"); results.map(output.appendChild, output); @@ -7423,6 +7425,38 @@ a.anchor-link { parent.appendChild(output); } + + /** + * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML. + */ + function cleanMermaidSvg(svg) { + return svg.replace(RE_VOID_ELEMENT, replaceVoidElement); + } + + + /** + * A regular expression for all void elements, which may include attributes and + * a slash. + * + * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element + * + * Of these, only `
` is generated by Mermaid in place of `\n`, + * but _any_ "malformed" tag will break the SVG rendering entirely. + */ + const RE_VOID_ELEMENT = + /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi; + + /** + * Ensure a void element is closed with a slash, preserving any attributes. + */ + function replaceVoidElement(match, tag, rest) { + rest = rest.trim(); + if (!rest.endsWith('/')) { + rest = `${rest} /`; + } + return `<${tag} ${rest}>`; + } + void Promise.all([...diagrams].map(renderOneMarmaid)); }); @@ -7921,6 +7955,341 @@ a.anchor-link { + + + + + + @@ -8080,16 +8207,26 @@ a.anchor-link { + + - + @@ -8307,7 +8525,7 @@ a.anchor-link { - - @@ -8498,6 +8714,17 @@ a.anchor-link { + + - +