mirror of
https://github.com/fverdugo/XM_40017.git
synced 2025-11-24 09:24:32 +01:00
Adding exercises to MPI tutorial
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user