Adding exercises to MPI tutorial

This commit is contained in:
Francesc Verdugo
2023-08-29 11:15:12 +02:00
parent 98ee1a2e08
commit 0b53e10b89
4 changed files with 510 additions and 31 deletions

View File

@@ -291,6 +291,96 @@
"rmprocs(workers())"
]
},
{
"cell_type": "markdown",
"id": "508125f9",
"metadata": {},
"source": [
"### New ring example"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7af4cfd0",
"metadata": {},
"outputs": [],
"source": [
"@everywhere workers() begin\n",
" using MPI\n",
" MPI.Init()\n",
" comm = MPI.Comm_dup(MPI.COMM_WORLD)\n",
" rank = MPI.Comm_rank(comm)\n",
" nranks = MPI.Comm_size(comm)\n",
" buffer = Ref(0)\n",
" if rank == 0\n",
" msg = rand(1:10)\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[])\")\n",
" else\n",
" dest = (rank != nranks-1) ? rank+1 : 0\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)\n",
" end\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "30ece423",
"metadata": {},
"outputs": [],
"source": [
"ftrs = Vector{Future}(undef,nprocs())\n",
"for p in 1:nprocs()\n",
" ftrs[p] = @spawnat p RemoteChannel(()->Channel{Int}(1))\n",
"end\n",
"for p in 1:nprocs()\n",
" @spawnat p begin \n",
" chnl_snd = fetch(ftrs[p])\n",
" source = (p != 1) ? p-1 : nprocs()\n",
" chnl_rcv = fetch(ftrs[source])\n",
" if p == 1\n",
" msg = rand(1:10)\n",
" @show msg\n",
" put!(chnl_snd,msg)\n",
" msg = take!(chnl_rcv)\n",
" @show msg\n",
" else\n",
" msg = take!(chnl_rcv)\n",
" msg += 1\n",
" @show msg\n",
" put!(chnl_snd,msg)\n",
" end\n",
" end\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "761ce452",
"metadata": {},
"outputs": [],
"source": [
"@everywhere function work(msg)\n",
" msg += 1\n",
" println(\"msg = $msg\")\n",
" if myid() == nprocs()\n",
" @spawnat 1 println(\"msg = $msg\")\n",
" else\n",
" next = myid() + 1\n",
" @spawnat next work(msg)\n",
" end\n",
"end"
]
},
{
"cell_type": "markdown",
"id": "19641daf",
@@ -733,7 +823,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.9.1",
"display_name": "Julia 1.9.0",
"language": "julia",
"name": "julia-1.9"
},
@@ -741,7 +831,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.9.1"
"version": "1.9.0"
}
},
"nbformat": 4,