mirror of
https://github.com/fverdugo/XM_40017.git
synced 2026-11-15 01:37:17 +01:00
Working on asp notebook
This commit is contained in:
1 parent
c85e75ba64
commit
d35314097e
3 files changed
+11467
-734
No files matched your search
+2
-2
@@ -481,7 +481,7 @@
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Julia 1.9.1",
|
||||
"display_name": "Julia 1.9.0",
|
||||
"language": "julia",
|
||||
"name": "julia-1.9"
|
||||
},
|
||||
@@ -489,7 +489,7 @@
|
||||
"file_extension": ".jl",
|
||||
"mimetype": "application/julia",
|
||||
"name": "julia",
|
||||
"version": "1.9.1"
|
||||
"version": "1.9.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
+202
-65
@@ -38,22 +38,42 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 17,
|
||||
"id": "1dc78750",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"🥳 Well done!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"using Printf\n",
|
||||
"\n",
|
||||
"function answer_checker(answer,solution)\n",
|
||||
" if answer == solution\n",
|
||||
" \"🥳 Well done! \"\n",
|
||||
" \"🥳 Well done!\"\n",
|
||||
" else\n",
|
||||
" \"It's not correct. Keep trying! 💪\"\n",
|
||||
" end |> println\n",
|
||||
"end\n",
|
||||
"floyd_check(answer) = answer_checker(answer,\"c\")\n",
|
||||
"floyd_impl_check(answer) = answer_checker(answer, \"d\")"
|
||||
"floyd_impl_check(answer) = answer_checker(answer, \"d\")\n",
|
||||
"function q1_answer(bool)\n",
|
||||
" bool || return\n",
|
||||
" msg = \"\"\"\n",
|
||||
" It is not needed to start the loop over `j` with `j=k` as none of the entries of the matrix will be updated\n",
|
||||
" in this particular case. Rememebr: `C[i,j] = min(C[i,j],C[i,k]+C[k,j])` if we substitute `j=k`, we get:\n",
|
||||
" `C[i,k] = min(C[i,k],C[i,k]+C[k,k])`. Rememeber that `C[k,k]=0, thus, `C[i,k] = min(C[i,k],C[i,k])`, or\n",
|
||||
" `C[i,k] = C[i,k]`. In other words, the new value of `C[i,k]` will correspond to the old value.\n",
|
||||
" The same is true for `i=k`.\n",
|
||||
" \"\"\"\n",
|
||||
" println(msg)\n",
|
||||
"end\n",
|
||||
"println(\"🥳 Well done!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -63,7 +83,7 @@
|
||||
"source": [
|
||||
"## The All Pairs of Shortest Paths (ASP) problem\n",
|
||||
"\n",
|
||||
"Let us start by presenting the all pairs of shortest paths (ASP) problem and its solution, the [Floyd–Warshall algorithm](https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm).\n",
|
||||
"In this notebook, we will parallelize the [Floyd–Warshall algorithm](https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm) used to find a solution of the all pairs of shortest paths (ASP) problem.\n",
|
||||
"\n",
|
||||
"### Problem statement\n",
|
||||
"\n",
|
||||
@@ -74,27 +94,36 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "ade31d26",
|
||||
"id": "1faddbfa",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We represent the distance table as a matrix, where $C_{ij}$ is the distance from node $i$ to node $j$. The next figure shows the input and solution (output) of the ASP problem for a simple 4-node directed graph. Note that the minimum distance from node 2 to node 3, $C_{23}=8$, is highlighted in the figure."
|
||||
"We represent the distance table as a matrix $C$, where $C_{ij}$ is the distance from node $i$ to node $j$ via a direct connection (a single hop in the graph). If there is no direct connection from $i$ to $j$, this is represented using a very large value in $C_{ij}$ (e.g. the largest possible floating point number, `inf`). \n",
|
||||
"The next figure shows a simple directed graph with 4 nodes an its corresponding distance matrix (matrix labeled as \"input\")."
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g37385.png": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABGgAAAGgCAYAAAD2CVFOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N15fBT1/cfx1+zm4iYcAipCCIfggZUqihYFxIpnrYr1bNVqb6+qJEF/jRZyeFXb2npWrUetZ+utXFqtWhUVxQOBBBTkkpsQcuzO749vwu7ObpLdZHdnd/N+Ph77MDPz3ZnPhDg7+5nv9/O1EBEREZFY9QMuClpeAfzTnVBERCQOxgAnAscAewF7AL2BDU2vL4CXgReBdS7FKBnOcjsAERERkTS0H7A4aHkOcKxLsWSa8cDYoOX7AJ9LsYhI5hsP3AwcGWV7H3A/8H/AmkQF1U4jgaODlp8GvnUnFFedCOzZ9PMm4EkXYxERERGRBNsPsINer7obTkapIPR3m+duOCKSobKAvwB+Qq850b62A2cnPerW/YTQGA92NRr3zCPwO/jE5VhikuV2ACIiIiIiIiJJ1AX4B3CKY/1W4FnMUKavgR1AX2A4cCowmcB36O7AQ5ihULclPmQREREREYlEPWgSRz1oRCTRHif0OuMH7gH6tPG+A4C3CO9N8+OERRqbn6AeNJDGPWg8bgcgIiIiIiIikiQXA2cELdvApU3rN7Xx3k+Ao4B/O9bfAYyKV4DSeSlBIyIiIiIiIp3BHsAfHOvKgT/HsI8GYDrwXtC6bph6NiIdoho0IiIiIol3KNCz6ectwPtB2wqB84HRmKldGzC1DxZgZp7YFuUxxgH5TT/vAN4J2vYd4EfACGBg0/aVwHOYWgv1UR7je0Bu08/riL7r+ADM0IBm7xJ6Xl2BCU0/D3W8d3Ir8S0G1kYZg4jILzDJlGafAze0Yz/1mB437xP4Tj0ZM6TogxbeczCBIVTOa3RrugOHBS1/SvjsUVMwMzSPcawfT8vDtqqB5Y51kwBv08/fAJ81/expOsYpwBBMomsDsBR4CvgvpidSW3IxnyPNlmI+i6IxounYzeY6tg8E9m/6Oficu2OmTm/JW8DOKGMQERERkRQUaw2a94Pavtm0rgemwGRrM4isA06PMqYFQe9b1LRuEOYmtrWZSJYSOi1ra1YFve8fUb4HTHIo+JiHOLYPbyPGll5nxRCDiHRuuZiEbjyvIY869vf3VtrOCWr3UQzHGOs4xvkR2tQT+/Xz+gj72RG0/d6mdQcDS9rY1+uYBEpb9nS877dRvKfZzY73Op3VRowtvYbHEEPCaYiTiIiISPL1x/QiORfz1LMlewD/xCQ4YjUU8yR3ShvthmOSOO05hohIuhiP6c3XbBPwTAf3eZ9j+UQy6zv2VEzvmJFttJsI/A/TW1M6QEOcRERERJIrG3gC2Bfz9O4V4EXgK0yy5gDgIgJduT3AX4HXiH44Tw4msTOw6RhPAY8BVZhZkQ4EfkbgZtqLefK7GnijvSfWARuBoqafp2GKcDa7Fmhs4X2xPIUWkc7tSMfyHGBXB/e5ANiO6REJZpjpfiR/5qCZmM+KcYQWQP4T5roeyX/b2OdewMOYz4xdmGTU85jhVT0xv89fAIOb2udjPs8OxJ2hpx8R+By5GDN8GExPVGfdoWAbExmUiIiIiCReR4Y4Nb/WEKi74tQFUxsmuP3v2jhG8BCn5tcuzBPdSLKAWx3tv6D1aa0TNcQpmKbZFpFEeI7Qa8tVcdrva479/qyFdokc4tTsJ462sU6zHTzEqfm1GvOZF0kv4CVH+yda2X8ihzgF0zTbIiIiIhK1WuBYTHHClrafj3ky2+zMdhznl5gnnpE0Ym6Og7v4jwLOa8dxRERS3d6O5cVx2q9zP87jpLNGTJL/0xa2b8XUSVsStO504KAEx5WxlKARERERSb7baPup3nrCkyc9W2gbybvA/W20sYHLCJ0l6ZIYjiEiki6csxltjtN+N7VxnHR2N/BhG21qgKsd6/Q50k5K0IiIiIgkn7OwZEveDvrZQ2BMfTT+RtvdwMFM6f1K0PJ3CS2kKSKSCfIdy1vjtF/nfjIpQRPtZ9ULhNa6OSEBsXQKStCIiIiIJNcaYHmUbVc5lnvHcJw5MbR11tBprUaMiEg68juWW5tBLxZex7IvTvt120bMTIDR8GNmA2y2DzAo7hF1AkrQiIiIiCRXLLNb1DiWu0X5vh1AdQzHcQ63GhXDe0VE0oFzSFMsCe/WOIeexmvolNtiLa7rbD8iXoF0JkrQiIiIiCTXzhjaOocoRfvE99sI723NeseycyiAiEi6c9aK6Run/fZv4zjpakOM7fU5EgdK0IiIiIhknliSQGB63ATrEa9ARERSxArH8tg47de5n1h6L6YyfY64QAkaERERkczTJcb2zqFTzhttEZF091/HcjxqbeUQnqBxHidddY2xvT5H4kAJGhEREZHM05fYCmA6u+hHU0Mhlv3HeqMvIhJvbzqWpwK9OrjPE4C8oOW1wNIo3pcO189Yh4C153MkFp3ic0QJGhEREZHM0xMYEkP7/R3LX7bQLrjLeyw3ywNjaCsikggLCR1+1BU4u4P7vNix/FQrbdt7/XRrNqQDOtg+UqLKOWwqHX4PSaUEjYiIiEhmmhJD22Mcy++20G5r0M97xbD/CTG0bXQs58bwXhGRlviAPzrWXUf7Z3M6BpgWtOwHbm+lffD1cxDRfxc/PIaYGhzLHbl+9gcOjLKtRehnzirgmwjtthE63Xm0nyMWcFiUbSH0cyStPkOUoBERERHJTBdE2W4Qppt+s49oeSrw4Cei+xFdEcjBwLFRxgLhdQv6xfBeEZHW3Efo7ESDMEmVWIYcgZmh6K+OdU/R+vCm4G3diK6HSi5wbgxxxfv6Ge3nyFRgn6Dll1po5weqgpajTT6dSGw9MbcH/ZxWnyFK0IiIiIhkpiOAM6NodxOhTxjvaqXte0E/5wLntbFvC7gDyI4ijmZfO5YLYniviEhrtgMXAXbQuvOB24g+SdMbeBUYHrRuHfCbNt73nmP5p1Ec6/fElphwXj+HxvDeSH4BjG6jTS7mcyTY3a20D/49HEjbxZp7ALe20cZpVdDPvdGU3yIiIiIZbT/MDX7z69U22r8f1NZZqLI1RzuOc1IrbRc42tqYp6mTW2jvAW5wtF9G6zUBBmO6jje33wQc1ELb7sBDEWKyaf2GfJSj7SuEzw4iItIRtxN+XXodGNPG+04BvnK8rxE4Lopj5gDrg97XgOkZEkk25vrsjxDn+a0cIxdT56W57WfEluDZEeF4VUBhC+27Ak872v+7jWOc4mi/GNijhbZ7A+9EiMluoX2zcxxtbwG8bbxHRERERNJUqidolmCGKtmYugsPYmol7IvpVv9j4C3HvhuJrm6NM+lSC/wZ+CEwqem/NwJrmrbXA3c63tPWE9P/Odpvx9TF+TfweNDriCjiFRFx8mDq0Ti/9Psx159STE+bM4BfY3pwVEdoX4u55kWrxPF+H/AIcBbm+nkS8DtMofbmNn9yvKe1BA2Y631w+13Ah8DzhF4/p0d4b3CCZg4mCd+c7L8JOArTc+i7wGWYpH7wsTZjkiqtyQI+cbxvPSYhdULT7+Ec4B6gpmn72qaYo03Q9MDUu3Ee401MQin496Ai9iIiIiJpLtUTNIuAEcBGx/tbevmIvtZAP8wT1Wj3ezHwI8f6thI044j8JNf5OivKmEVEIrmCQBIg1tcq4MgYj5eN+QyI9hg3A2Md69pK0AwCVkex7+sjvDf4unsv5jOnPspYtxF9Id/vYhLv0ex3OyYZf7NjfVvOx3wGtbX/4S3twA2qQSMiIiKSmZZiEh3OugdOX2O62d8f5X6/BSbSdqJpPabXzj1R7jfYQuBg4GHCi16KiMTLH4CRmOtfXZTv+RbT22MMsSXcwQxrOg54oo12OzE9eK6Kcf9gei9+B9PzZkMbbdvyHGaY7Ko22r2Hma3vnSj3+z6msPCyNtp9gkno/zfK/Qb7O6ZX6EuEz26VsmKtVi0iIiIipiZK8OwTm4APWml/KNCz6ectmJvTaORjkizNPsJ8OYhkAabHDcDHmKeuYO73JmIKBhcCe2KedK7A3Hw/i/ky0B7HYuoJ7A/0xXRvXwm8iOlGvqup3QBCZyx5tymGaHiAYU376OLYtpiWZ5wSEYlFN8zU2VMwMxLtgblub8RcZ77EfNn/H6ZnRkcdCpyG6U2yByYZvQqYD/wD81kBpp5XcM+UTzFJmGgNxgw7ctbyqgaWO9btCGp3H4FCxrmY4UcnA0MwPSk3AZ8DzwBzad/vJAfzOzgec53vhSm4XIUZfjSPwLTcI5qO3WxuDMfJxiTi+hFetP4t2v8ZKCIiIiISkXOIk4iISCycQ5wkyTTESURERERERETEZRriJCIiItKyHsAbbgcRpUJMV3gwQ4uWuBiLG2ZgpuQWEWlLLmaokoQ6gEAnjk2YGmWdwVQ6Xq8nLrLcDkBEREQkhXkJ1HJJJ3mkZ9wdke92ACKSNjx0vmtkrPo0vToDZ10a1yhBIyIiItKyHZgna+mgeTpWMAUWf+ZiLG74xO0ARCRt1JE+1/Zkeg6T4AdTEPlWF2NJppaK74tIgnXBVO8eBhyEqQa+J4GZNURERNKVigSLiEhHqEiwy9SDRjLZYGASZhrUkcAoYK9W2m/DTJ/3JfAh8FrTf+MxjZ6IiIiIiIhIi1QkWDLN/sD5wKnA8Djsbwum4ODDwMtAYxz2KSIikgiXYHqIAqwFbnMxFhERST83ADlNP78HPOViLCKSprIxSZmFBLrkJeK1DigHBiTntEREREREREREUl8WpgBiNYlNzDhfO4E/AgMTf4oiIiIiIiLSGWiIk6SrCcBfaHt6PBszq8N7mNoySzBz3NcA24FcoBumcPBQTK2ascBhQNc29r0V+D/gDlSnRkREREREREQ6kS6YxIyflnu41AFPA9OB/u08Tg4wETO13JpWjmUDLine truncated
|
||||
"g32490.png": {
|
||||
"image/png": "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 truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "7605a53f",
|
||||
"id": "39db374f",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g37385.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"<img src=\"attachment:g32490.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "ade31d26",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The ASP problem consists in computing the minimum distance between any two pair of nodes $i$ and $j$ in the graph. All these values can be also represented as a matrix (matrix labeled as \"output\" in the figure above). For instance, the minimum distance from node 2 to node 3 is 8 as highlighted in the figure."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "d9979e39",
|
||||
@@ -107,10 +136,21 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 4,
|
||||
"id": "4fe447c5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"floyd! (generic function with 1 method)"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"function floyd!(C)\n",
|
||||
" n = size(C,1)\n",
|
||||
@@ -131,15 +171,30 @@
|
||||
"id": "b27707b9",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"You can check that this function computes the solution of the small ASP problem in the figure above by executing next cell. Note that we used a large number to represent that there is no direct connection between two nodes."
|
||||
"You can check that this function computes the solution of the small ASP problem in the figure above by executing next cell."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 6,
|
||||
"id": "860e537c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"4×4 Matrix{Int64}:\n",
|
||||
" 0 9 6 1\n",
|
||||
" 2 0 8 3\n",
|
||||
" 5 3 0 6\n",
|
||||
" 10 8 5 0"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"inf = 1000\n",
|
||||
"C = [\n",
|
||||
@@ -151,6 +206,21 @@
|
||||
"floyd!(C)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g32490.png": {
|
||||
"image/png": "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 truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "c0804b07",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g32490.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "b9eeb64d",
|
||||
@@ -158,7 +228,7 @@
|
||||
"source": [
|
||||
"### The algorithm explained\n",
|
||||
"\n",
|
||||
"The main idea of the algorithm is to perform as many iterations as nodes in the graph. At iteration $k$, we update the distance matrix $C$ by finding the shortest paths between each pair of nodes, allowing indirect paths via nodes from 1 to $k$. At the last iteration, it is allowed to visit all nodes and, thus, the distance table will contain the solution of the ASP problem.\n",
|
||||
"The main idea of the algorithm is to perform as many iterations as nodes in the graph. At iteration $k$, we update the distance matrix $C$ by finding the shortest paths between each pair of nodes, allowing indirect paths via nodes from 1 to $k$. At the last iteration, it is allowed to visit all nodes and, thus, the distance table will contain the minimum possible distances, i.e. the solution of the ASP problem.\n",
|
||||
"\n",
|
||||
"This process is cleverly done with three nested loops:\n",
|
||||
"\n",
|
||||
@@ -196,62 +266,78 @@
|
||||
"id": "722e330c",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The update of the distance matrix at each iteration is illustrated in the next figure for a small ASP presented above. We highlight in green the distances that are updated in each iteration. Note that adding values to the table can be interpreted as adding new connections in the graph, as illustrated in the figure."
|
||||
"The update of the distance matrix at each iteration is illustrated in the next figure for a small ASP presented above. We highlight in green the distances that are updated in each iteration."
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g38106.png": {
|
||||
"image/png": "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 truncated
|
||||
"g33734.png": {
|
||||
"image/png": "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JKBjsYiIiIi0eXPw38HUGDQiIiIpRi1opK3IBXYEBgDtMbNOdAAqMdOQlgOrgWWYqT1FREREREREbKOARtLVAMy0b+OA0UBfICPK524EFgIfAbOBr4C6+JcoIiIiIiIiIpJ+ugNXYpp1x3Ogq/XAA8Ao+3ZFREQkZjsCuzU8hjhci4iIiIi0QTsDTwNuEj8q+dfAiUTfGkdEREREREREJK0NAF7FjBQeS8iyFfgd+AVYBWwi9inxlgDHJH4XRURERERERESSUx5wE1BF0yFKPTAfuBuYAOwKFER4zUxge2A8MAV4BzNwcHNBzX+A/nHePxERERERERGRpDYEWETToclnwMVAp1a+VzZwGPAsZranSO9XAZzdyvcSEREREREREUkJZwHbCB+S1AHPAcMT9N4lmFY7GyK8vxeYgZm+W0REREREREQk7biA/yVyMDILGGRTLe2B24DqCLV8CXS2qRYREREREREREVtkAtMJH4aUYsaWccJOwNwIdf0A9HWoLhERERERERGRuHIBjxE+BJkL9HKuNMCER7dguldZ6/sV6ONYZSIiIiIiIiIicXIX4cOZ/8OEI8nicMKPjfMt0MHBukREREREREREWuVCwoczU50sqgl7AusJrfdDkitMEhERERERERGJyjDCT2t9nZNFRWFnYBOhdd/iYE0iIiIiIiIiIjFrDywjNOS418miYrAfUEVw7fXAOCeLEhERERERERGJxT2kfjehcwndh5+BPCeLEhERERERERGJxlCgluBgYx3QvZWv2xkYD9wAvAqsxHRFCnzs3cr3sJpBaEhzc5zfQ0REREREREQk7mYTGmqMb8HrdMeMV/MyJowJN9iw9bFv60oPUQj8ZnmPKjT1toiIiIiIiIgksdGEhiYvtfC1xod5LbsDGoCTwrzPAwl4HxERERERERGRuHiH+LU2SZaABkJbBVXS+i5bIiIiIiIikmYynC5ABBgCHGZZ9wSmi1A8eIAfgWeAKxsedplmWc4HLrbx/UVEREREREREonInwa1M3ED/VrzeXvjDmP0w48EEGot9LWgAPrG813LAlcD3ExERERERERGJSQbwK8EBxhsJfk+7A5pTbX4/ERERERERSTHq4iROG03oWDP/dqKQBHod2GpZd6IThYiIiIiIiEhyUkAjTjvAslwO/MeJQhKoEhPSBDrQiUJEREREREQkOSmgEadZA5qPgRonCkmwDyzLg4EeThQiIiIiIiIiyUcBjTgpEzOgb6A5ThRig9mWZRewtxOFiIiIiIiISPJRQCNO6gvkWdZ94UQhNlhD6LThg5woRERERERERJKPAhpx0k5h1v1gexX2+dGyvKMjVYiIiIiIiEjSUUAjThpgWd7Y8EhX1oBmLine truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "50b782df",
|
||||
"id": "deb384be",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g38106.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"<img src=\"attachment:g33734.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g38354.png": {
|
||||
"image/png": "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 truncated
|
||||
"g32779.png": {
|
||||
"image/png": "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 truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "eb5e46a2",
|
||||
"id": "4157df08",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g38354.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"<img src=\"attachment:g32779.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g38620.png": {
|
||||
"image/png": "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XgGmAO8CLdkvUURERERERESk+GwGXIJt687mRFeLgb8AP/HvqYiIiKRsG2C38G37gGsRERERkRK0I/AA0EzuZyWfCowg+W4cEREREREREZGiNgB4FDtTeCohyzJgPjALaMQOaWpJ8RzTgaNy/xRFRERERERERPJTNXAVdoLftkKUFuB94E/YrpedgY6tnLMM6A8cBFwKPAMsb+f8BngaO/GwiIiIiIiIiEjJ2B6YRtuhyZvAOUCvDB+rAzAcO3xqVRuPtxI4LcPHEhEREREREREpCKdhw5DWumX+DQzK0WP3AK4EFrXy+Aa4D+ico8cXEREREREREQmUA9TTejDyHHblCj90Bq4G1rRSy7vARj7VIiIiIiIiIiLii3LgThKHIQuBXwZU1zbAK63UNQPYMqC6RERERERERESyyqH1cOYVoHdglVllwBgSrwD1FdA3uNJERERERERERLLjTyQOZ27Bdtbki4OBFcTX+TF27hoRERERERERkYJ0DvGBRwi4PMii2vATEk8g/BL5FSaJiIiIiIiIiCRlJxIva10bZFFJ2BFYQnzd4wKsSUREREREREQkZV2AmcSHHDcEWVQK9gZWE1v7OmC/IIsSEREREREREUnFn0m8jHZZkEWl6HTin8OXQHWQRYmIiIiIiIiIJGNHYC2xwca3wKYZnndDYDh2/ppHgTnYoUju288yfAyve4kPaa7K8mOIiIiIiIiIiGTdy8SHGgelcZ5NgTrgv9gwJtFKUN7b3pmVHqcr8LXnMVYDW2T5cUREREREREREsmYI8aHJxDTPdVCCc/kd0ACMSPA4t+TgcUREREREREREsuI54rtNNk/zXPkS0IBdZtv9OKvIfMiWiIiIiIiIFJlCmnhVitf22Dli3P4JzMvS+UPADOABYFT45pc/eLY7Auf5+PgiIiIiIiIiIklpILbLpBnYMoPz/ZRoGLMP0M3z/b3wr4MG4DXPYzUCTg4fT0REREREREQkJWXAV8QGGE/k+DH9DmhO8PnxREREREREpMBoiJMEbQjQ17PvX0EUkkOPAz969o0IohARERERERHJTwpoJGj7ebaXA08FUUgOrcaGNG7e5y0iIiIiIiIlTAGNBM0bVLwGNAVRSI696NneDtgsiEJEREREREQk/yigkSCVA3t69r0cRCE+mOLZdoCfBVGIiIiIiIiI5B8FNBKkfkC1Z987QRTig/nA1559A4MoRERERERERPKPAhoJ0rYJ9n3uexX+meHZ3iaQKkRERERERCTvKKCRIA3wbH8fvhUrb0CzVSBViIiIiIiISN5RQCNB6uHZXhBIFf5Z6NnuHkgVIiIiIiIikncU0EiQuni2VwRShX9+9Gx3C6QKERERERERyTsdgi5ALine truncated
|
||||
"g33077.png": {
|
||||
"image/png": "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yffGERERERERERHJa9sAz2FmCk8lZNkILAW+BxYDa0l9Sbz5wOGZP0QRERERERERkexUDFwDVNB4iFIHfA7cAhwL7ASUNPCYBcDWwDhgEvAaZuLgpoKal4EBaT4+EREREREREZGsNgSYS+OhycfAuUDXFj5XEDgIeAKz2lNDz1cGnN7C5xIRERERERERyQmnAZtJHJLUAk8CwzP03J0xvXZWN/D8NvAwZvluEREREREREZG8YwF/oeFgZBowyKNa2gM3AJUN1PJfoJtHtYiIiIiIiIiIeKIAuI/EYcgKzNwyfhgIvN9AXV8D/X2qS0REREREREQkrSzgfhKHIO8DffwrDTDh0WTM8Cp3fT8B/XyrTEREREREREQkTaaQOJz5GyYcyRYHk3hunDlAJx/rEhERERERERFpkbNJHM5c7WdRjfg1sIr4et8mu8IkEREREREREZGkDCPxstZX+llUEnYA1hJf92QfaxIRERERERERSVl7YCHxIcdUP4tKwV5ABbG11wFj/SxKRERERERERCQVt5L7w4TOIP4YvgOK/SxKRERERERERCQZQ4FqYoON5UDPFj5uN2AccBXwHLAIMxTJedu9hc/h9jDxIc21aX4OEREREREREZG0e4f4UGNcMx6nJ2a+mmcxYUyiyYbdtz1bVnqcDsDPrueoQEtvi4iIiIiIiEgWG0V8aPJMMx9rXILH8jqgATguwfPclYHnERERERERERFJi9dIX2+TbAloIL5XUDktH7IlIiIiIiIieSbgdwEiwBDgIFfbvzBDhNIhBHwDPA5cEr555TrXdlvgXA+fX0REREREREQkKTcT28ukBhjQgsfbjWgYsxdmPhinMXjXgwbgQ9dz/QBYGXw+EREREREREZGUBICfiA0wXszwc3od0Jzk8fOJiIiIiIhIjtEQJ/HbKOLnmnnUj0Iy6AVgo6vtGD8KERERERERkeykgEb8to9rexPwsh+FZFA5JqRx2tePQkRERERERCQ7KaARv7kDmg+AKj8KybC3XNuDgV5+FCIiIiIiIiLZRwGN+KkAM6Gv07t+FOKBd1zbFrC7H4WIiIiIiIhI9lFAI37qDxS72j71oxAP/EL8suGD/ChEREREREREso8CGvHTwARtX3tehXe+cW1v70sVIiIiIiIiknUU0IiftnFtrwnf8pU7oNnWlypEREREREQk6yigET91cm0v96UK76xwbXf0pQoRERERERHJOgpoxE/tXdubfanCOxtd26W+VCEiIiIiIiJZp43fBUir1toCmk2u7Q6+VCEiIl4IANsBg4FumNX71gHfAXOBWv9Ka5HOmBUYdwOGA1uEb92AcswxzgHeB54m/uKEiEg+6AjsCPQD2gEVwGpgJrDSLine truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "d02606e0",
|
||||
"id": "7ff1e8df",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g38620.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"<img src=\"attachment:g33077.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g33443.png": {
|
||||
"image/png": "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ERERERHJPn2BizFl3clsdLUUuAkY4d2piIiIJGwrYOfgYxufYxERERGRDmhb4EGgntR3Jf8MOIr4q3FERERERERERLLaIOBpTKfwRJIsq4FfgXnAAmAFiU+J9x1waOpPUUREREREREQkPRUBfwfW03ISpRH4FLgGGAfsAHRqZp+5wEBgLDABeBnTOLi1RM0LwIAkn5+IiIiIiIiISFrbBviGlpMmHwBnAxu081j5wP7Aw5jZnpo73jrg5HYeS0REREREREQkI5wErCV2kqQBeAQYnqJj98RU7Sxr5vg2cB9m+m4RERERERERkaxjAVNpPjEyHRjiUSxdgKuBmmZi+R/Q26NYREREREREREQ8kQvcQexkyGJMbxk/bA283Uxc3wNb+BSXiIiIiIiIiEhSWcCdxE6CvA1s6l9ogEkelWGGV7nj+wnYzLfIRERERERERESSZBqxkzP/xiRH0sUBxO6N8yXQw8e4RERERERERETa5UxiJ2cm+xlUC/4ALCU63jdIr2SSiIiIiIiIiEhctiP2tNYlfgYVh22BFUTHXeZjTCIiIiIiIiIiCesCzCE6yXG9n0ElYA9gPZGxNwJj/AxKRERERERERCQR15L5w4ROJfoc5gJFfgYlIiIiIiIiIhKPYUAdkYmNRUDfdu63NzAWuAx4GpiPGYrkfPyxncdwu4/oJM0VST6GiIiIiIiIiEjSzSQ6qTG2Dfvpi+lX8yQmGROr2bD7sXv7Qo/SFfjZdYz1aOptEREREREREUljI4lOmjzRxn2NjbEvrxM0AONjHOemFBxHRERERERERCQpXiZ51SbpkqCB6Kqgato/ZEtERERERESyTI7fAYgA2wD7u9bdgxkilAwB4AfgIeDi4MMr/3AtFwNne3h8EREREREREZG4VBBZZVIPDGjH/nYlnIzZA9MPxmk03lXQALzrOlYlYKXweCIiIiIiIiIiCckBfiIygfFcio/pdYLmOI+PJyIiIiIiIhlGQ5zEbyOJ7jXzgB+BpNCzwGrXuqP8CERERERERETSkxI04re9XMtrgBf8CCSFqjFJGqe9/QhERERERERE0pMSNOI3d4LmHaDWj0BS7HXX8lBgYz8CERERERERkfSjBI34KRfT0NfpTT8C8cBM17IF/NGPQERERERERCT9KEEjftoCKHKt+8iPQDywkOhpw4f4EYiIiIiIiIikHyVoxE9bx1j3vedReOcH1/JWvkQhIiIiIiIiaUcJGvHTINfy8uAjW7kTNFv6EoWIiIiIiIikHSVoxE89XMuLfInCO4tdy919iUJERERERETSjhI04qcuruW1vkThndWu5W6+RCEiIiIiIiJpJ8/vAKRD62gJmjWu5a6+RCEiIl7IAQYDQ4HeLine truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "15095a9a",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
"<img src=\"attachment:g33443.png\" align=\"left\" width=\"450\"/>\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"g38913.png": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "0aca29d3",
|
||||
"id": "53a05c72",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div>\n",
|
||||
@@ -273,10 +359,21 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 8,
|
||||
"id": "75cac17e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"floyd2! (generic function with 1 method)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"function floyd2!(C)\n",
|
||||
" n = size(C,1)\n",
|
||||
@@ -302,10 +399,19 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 10,
|
||||
"id": "907bc8c9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" 1.777208 seconds\n",
|
||||
" 2.967238 seconds\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"n = 1000\n",
|
||||
"C = rand(n,n)\n",
|
||||
@@ -347,7 +453,36 @@
|
||||
"```\n",
|
||||
"\n",
|
||||
"- The outer loop cannot be parallelized since the operations at iteration $k$ require the result of iteration $k-1$.\n",
|
||||
"- The inner loops over $i$ and $j$ can be parallelized at a given iteration $k$."
|
||||
"- The inner loops over $i$ and $j$ can be parallelized at a given iteration $k$.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"<div class=\"alert alert-block alert-success\">\n",
|
||||
"<b>Question (hard):</b> Can we really parallelize the loops over `i` and `j` ? To compute `C[i,j]` at iteration `k`, we first need to compute `C[i,k]` and `C[k,j]`. In order words, it seems that the order of the loops over `i` and `j` cannot be arbitrary. The first value of `i` and `j` in the loops should be `k`. However, this is not really necessary, why?\n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"id": "8d05b686",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"It is not needed to start the loop over `j` with `j=k` as none of the entries of the matrix will be updated\n",
|
||||
"in this particular case. Rememebr: `C[i,j] = min(C[i,j],C[i,k]+C[k,j])` if we substitute `j=k`, we get:\n",
|
||||
"`C[i,k] = min(C[i,k],C[i,k]+C[k,k])`. Rememeber that `C[k,k]=0, thus, `C[i,k] = min(C[i,k],C[i,k])`, or\n",
|
||||
"`C[i,k] = C[i,k]`. In other words, the new value of `C[i,k]` will correspond to the old value.\n",
|
||||
"The same is true for `i=k`.\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"uncover = true\n",
|
||||
"q1_answer(uncover)"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -411,7 +546,7 @@
|
||||
"id": "db9a3294",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"At each iteration, the processor needs the input values `C[i,j]`, `C[i,k]` and `C[k,j]`. Since we split the data row-wise, the process already has values `C[i,j]` and `C[i,k]`. However, `C[k,j]` may be stored in a different process. "
|
||||
"At each iteration, the processor needs the input values `C[i,j]`, `C[i,k]` and `C[k,j]`. Since we split the data row-wise, the process already has values `C[i,j]` and `C[i,k]`. However, `C[k,j]` may be stored in a different process. See figure below."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -492,10 +627,18 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"execution_count": 25,
|
||||
"id": "1bf4de56",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"It's not correct. Keep trying! 💪\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"answer = \"x\" # replace x with a, b, c or d\n",
|
||||
"floyd_check(answer)"
|
||||
@@ -506,7 +649,7 @@
|
||||
"id": "eba45ea4",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Efficiency"
|
||||
"### Theoretical performance analysis"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -514,7 +657,9 @@
|
||||
"id": "a15bc34e",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Computation cost:** Each process updates $N^2/P$ entries per iteration. "
|
||||
"### Computation complexity\n",
|
||||
"\n",
|
||||
"Each process updates $N^2/P$ entries per iteration. The computation complexity is $O(N^2/P)$."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -537,8 +682,9 @@
|
||||
"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",
|
||||
"### Communication complexity\n",
|
||||
"\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.\n",
|
||||
"- $P-1$ processes receive one message of length $N$ per iteration. Hence, the **receive cost** is $O(N)$ per iteration at each process. "
|
||||
]
|
||||
},
|
||||
@@ -562,7 +708,13 @@
|
||||
"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$."
|
||||
"The communication over computation cost is\n",
|
||||
"\n",
|
||||
"- On the send side: $O(NP)/O(N^2/P) = O(P^2/N)$\n",
|
||||
"- On the receive side $O(N)/O(N^2/P) = O(P/N)$\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"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^2<<N$."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -572,15 +724,7 @@
|
||||
"source": [
|
||||
"## Parallel Implementation\n",
|
||||
"\n",
|
||||
"Now, we will explore the parallel implementation of Floyd's algorithm using MPIClusterManagers."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "0b451628",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Creating MPI workers"
|
||||
"Now, we will explore the parallel implementation of Floyd's algorithm. We will use MPI."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -590,7 +734,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"] add MPI, MPIClusterManagers"
|
||||
"] add MPI"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -600,14 +744,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"using MPIClusterManagers\n",
|
||||
"using Distributed\n",
|
||||
"if procs() == workers()\n",
|
||||
" nranks = 3\n",
|
||||
" manager = MPIWorkerManager(nranks)\n",
|
||||
" addprocs(manager)\n",
|
||||
" @everywhere using MPI; MPI.Init()\n",
|
||||
"end"
|
||||
"using MPI"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -914,7 +1051,7 @@
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Julia 1.9.1",
|
||||
"display_name": "Julia 1.9.0",
|
||||
"language": "julia",
|
||||
"name": "julia-1.9"
|
||||
},
|
||||
@@ -922,7 +1059,7 @@
|
||||
"file_extension": ".jl",
|
||||
"mimetype": "application/julia",
|
||||
"name": "julia",
|
||||
"version": "1.9.1"
|
||||
"version": "1.9.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
+11263
-667
File diff suppressed because it is too large.
Load diff
|
Before Width: | Height: | Size: 6.1 MiB After Width: | Height: | Size: 6.6 MiB |
Reference in new issue
Block a user