diff --git a/.nojekyll b/.nojekyll index 10495b4..91684f7 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -666687f7 \ No newline at end of file +fffd8f63 \ No newline at end of file diff --git a/com_collectives.html b/com_collectives.html index 96b7783..2024311 100644 --- a/com_collectives.html +++ b/com_collectives.html @@ -115,7 +115,7 @@
mpi.scatter
La ième tranche est envoyée au ième processus.
- +library(Rmpi)
id <- mpi.comm.rank(comm=0)
@@ -297,7 +297,7 @@ Diffusion
Collecte mpi.gather
-
+
- Envoi d’un message de chacun des processus du communicateur
comm
- Collecte de chacun de ces messages, par le processus
root
@@ -307,7 +307,7 @@ Collecte mpi.gat
Collecte générale mpi.allgather
Correspond à un mpi.gather
suivi d’un mpi.bcast
-
+
diff --git a/com_point_a_point.html b/com_point_a_point.html
index a7066c8..72233f8 100644
--- a/com_point_a_point.html
+++ b/com_point_a_point.html
@@ -115,7 +115,7 @@
@@ -222,7 +222,7 @@ mpi.send
et mpi.recv
-Les fonctions mpi.send.Robj
et mpi.recv.Robj
permettent d’envoyer et recevoir des objets R à condition qu’ils soient sérialisables comme les data.frame
par exemple. Il existe des versions non bloquantes mpi.isend
et mpi.irecv
ainsi qu’une version contractée mpi.sendrecv
bidirectionnel. Ces concepts ne seront pas abordés ici.
+Les fonctions mpi.send.Robj
et mpi.recv.Robj
permettent d’envoyer et recevoir des objets R à condition qu’ils soient sérialisables comme les data.frame
par exemple. Il existe des versions non bloquantes mpi.isend
et mpi.irecv
ainsi qu’une version contractée mpi.sendrecv
bidirectionnelle. Ces concepts ne seront pas abordés ici.
diff --git a/exercice.html b/exercice.html
index eec879e..93bb1c3 100644
--- a/exercice.html
+++ b/exercice.html
@@ -115,7 +115,7 @@
diff --git a/allgather.png b/images/allgather.png
similarity index 100%
rename from allgather.png
rename to images/allgather.png
diff --git a/broadcastvsscatter.png b/images/broadcastvsscatter.png
similarity index 100%
rename from broadcastvsscatter.png
rename to images/broadcastvsscatter.png
diff --git a/gather.png b/images/gather.png
similarity index 100%
rename from gather.png
rename to images/gather.png
diff --git a/logo.png b/images/logo.png
similarity index 100%
rename from logo.png
rename to images/logo.png
diff --git a/mpmd.png b/images/mpmd.png
similarity index 100%
rename from mpmd.png
rename to images/mpmd.png
diff --git a/spmd.png b/images/spmd.png
similarity index 100%
rename from spmd.png
rename to images/spmd.png
diff --git a/index.html b/index.html
index 6da8d9f..a08508e 100644
--- a/index.html
+++ b/index.html
@@ -115,7 +115,7 @@
@@ -314,13 +314,13 @@ Exemple C
Compilation et exécution d’un code MPI en C
Pour compiler un code MPI, il faut faire le lien avec la librairie MPI utilisée en utilisant par exemple mpicc
-
+
-Note
+Astuce
@@ -354,7 +354,7 @@ Exemple Python
Exemple R SPMD (Single Program Multiple Data)
-
+
library(Rmpi)
id <- mpi.comm.rank(comm=0)
@@ -446,7 +446,7 @@ Exécuti
Exemple R MPMD (Multiple Program Multiple Data)
-
+
library(Rmpi)
mpi.spawn.Rslaves(nslaves = 4, needlog = FALSE)
diff --git a/search.json b/search.json
index e6f81de..6271906 100644
--- a/search.json
+++ b/search.json
@@ -144,7 +144,7 @@
"href": "index.html#compilation-et-exécution-dun-code-mpi-en-c",
"title": "Rmpi",
"section": "Compilation et exécution d’un code MPI en C",
- "text": "Compilation et exécution d’un code MPI en C\nPour compiler un code MPI, il faut faire le lien avec la librairie MPI utilisée en utilisant par exemple mpicc\n> mpicc hello_mpi.c -o hello\n\n\n\n\n\n\nNote\n\n\n\nPackages ubuntu : libopenmpi-devet openmpi-bin\n\n\nPour exécuter un code MPI, on utilise un lanceur d’application MPI qui ordonne le lancement de l’exécution sur un nombre de processus choisi. Le lanceur défini par la norme MPI est mpiexec. Il existe également des lanceurs non standards, comme mpirun.\n> mpiexec -n 4 ./hello\nHello world from processor ar039133.math.univ-rennes1.fr, rank 2 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 3 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 1 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 0 out of 4 processors"
+ "text": "Compilation et exécution d’un code MPI en C\nPour compiler un code MPI, il faut faire le lien avec la librairie MPI utilisée en utilisant par exemple mpicc\n> mpicc hello_mpi.c -o hello\n\n\n\n\n\n\nAstuce\n\n\n\nPackages ubuntu : libopenmpi-devet openmpi-bin\n\n\nPour exécuter un code MPI, on utilise un lanceur d’application MPI qui ordonne le lancement de l’exécution sur un nombre de processus choisi. Le lanceur défini par la norme MPI est mpiexec. Il existe également des lanceurs non standards, comme mpirun.\n> mpiexec -n 4 ./hello\nHello world from processor ar039133.math.univ-rennes1.fr, rank 2 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 3 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 1 out of 4 processors\nHello world from processor ar039133.math.univ-rennes1.fr, rank 0 out of 4 processors"
},
{
"objectID": "index.html#exemple-python",
@@ -193,7 +193,7 @@
"href": "com_point_a_point.html",
"title": "Rmpi : communications point à point",
"section": "",
- "text": "Une communication dite point à point a lieu entre deux processus, l’un appelé processus émetteur et l’autre processus récepteur (ou destinataire). L’émetteur et le récepteur sont identifiés par leur rang dans le communicateur. L’entité transmise entre deux processus est appelée message. Un message est caractérisé par son enveloppe. Celle-ci est constituée :\n\ndu rang du processus émetteur source;\ndu rang du processus récepteur dest ;\nde l’étiquette du message tag;\ndu communicateur qui définit le groupe de processus et le contexte de communication comm.\nLes données échangées sont typées (entiers, réels, etc…) type.\n\nCette opération est bloquante : l’exécution reste bloquée jusqu’à ce que le contenu de message puisse être réécrit sans risque d’écraser la valeur qui devait être envoyée.\n\nmpi.send(x, type, dest, tag, comm = 1)\nmpi.recv(x, type, source, tag, comm = 1, status = 0)\n\ntype : 1 pour les entiers, 2 pour les flottants, 3 pour les caractères.\nL’appel mpi.recv pourra fonctionner avec une opération mpi.send si ces deux appels ont la même enveloppe (source, dest, tag, comm).\nCette opération est bloquante : l’exécution reste bloquée jusqu’à ce que le contenu de message corresponde au message reçu.\n\n\n\n\n\n\nNote\n\n\n\nLes fonctions mpi.send.Robj et mpi.recv.Robj permettent d’envoyer et recevoir des objets R à condition qu’ils soient sérialisables comme les data.frame par exemple. Il existe des versions non bloquantes mpi.isend et mpi.irecv ainsi qu’une version contractée mpi.sendrecv bidirectionnel. Ces concepts ne seront pas abordés ici.\n\n\n\n\nlibrary(Rmpi)\n\nid <- mpi.comm.rank(comm = 0)\nnp <- mpi.comm.size(comm = 0)\n\nif (id == 0) {\n for (i in seq(1, np-1)) {\n recv <- mpi.recv(x = integer(1), type = 1, source = i, tag = 0, comm = 0)\n cat(\"Process 0: Received from process\", i, \"saying:\", recv, \"\\n\")\n }\n} else {\n msg <- as.integer(id)\n cat(\"Process\", id, \" sent to process 0:\", msg, \"\\n\")\n invisible(mpi.send(msg, 1, dest = 0, tag = 0, comm = 0))\n}\n\ninvisible(mpi.barrier(comm = 0))\ninvisible(mpi.finalize())\n$ mpiexec -np 4 Rscript send_recv.R\nProcess 3 sent to process 0: 3\nProcess 2 sent to process 0: 2\nProcess 1 sent to process 0: 1\nProcess 0: Received from process 1 saying: 1\nProcess 0: Received from process 2 saying: 2\nProcess 0: Received from process 3 saying: 3\n\n\n\nL’exercice est décomposé en 3 étapes :\n\nPing: compléter le script ping_pong_1.R de manière à ce que le processus de rang 0 envoie un message contenant une série aléatoire de 1000 réels au rang 1.\nPing-Pong: compléter le script ping_pong_2.R de manière à ce que le processus de rang 1 renvoie le message vers le processus de rang 0.\nMatch de Ping-Pong: compléter le script ping_pong_3.R de manière à enchainer 9 échanges."
+ "text": "Une communication dite point à point a lieu entre deux processus, l’un appelé processus émetteur et l’autre processus récepteur (ou destinataire). L’émetteur et le récepteur sont identifiés par leur rang dans le communicateur. L’entité transmise entre deux processus est appelée message. Un message est caractérisé par son enveloppe. Celle-ci est constituée :\n\ndu rang du processus émetteur source;\ndu rang du processus récepteur dest ;\nde l’étiquette du message tag;\ndu communicateur qui définit le groupe de processus et le contexte de communication comm.\nLes données échangées sont typées (entiers, réels, etc…) type.\n\nCette opération est bloquante : l’exécution reste bloquée jusqu’à ce que le contenu de message puisse être réécrit sans risque d’écraser la valeur qui devait être envoyée.\n\nmpi.send(x, type, dest, tag, comm = 1)\nmpi.recv(x, type, source, tag, comm = 1, status = 0)\n\ntype : 1 pour les entiers, 2 pour les flottants, 3 pour les caractères.\nL’appel mpi.recv pourra fonctionner avec une opération mpi.send si ces deux appels ont la même enveloppe (source, dest, tag, comm).\nCette opération est bloquante : l’exécution reste bloquée jusqu’à ce que le contenu de message corresponde au message reçu.\n\n\n\n\n\n\nNote\n\n\n\nLes fonctions mpi.send.Robj et mpi.recv.Robj permettent d’envoyer et recevoir des objets R à condition qu’ils soient sérialisables comme les data.frame par exemple. Il existe des versions non bloquantes mpi.isend et mpi.irecv ainsi qu’une version contractée mpi.sendrecv bidirectionnelle. Ces concepts ne seront pas abordés ici.\n\n\n\n\nlibrary(Rmpi)\n\nid <- mpi.comm.rank(comm = 0)\nnp <- mpi.comm.size(comm = 0)\n\nif (id == 0) {\n for (i in seq(1, np-1)) {\n recv <- mpi.recv(x = integer(1), type = 1, source = i, tag = 0, comm = 0)\n cat(\"Process 0: Received from process\", i, \"saying:\", recv, \"\\n\")\n }\n} else {\n msg <- as.integer(id)\n cat(\"Process\", id, \" sent to process 0:\", msg, \"\\n\")\n invisible(mpi.send(msg, 1, dest = 0, tag = 0, comm = 0))\n}\n\ninvisible(mpi.barrier(comm = 0))\ninvisible(mpi.finalize())\n$ mpiexec -np 4 Rscript send_recv.R\nProcess 3 sent to process 0: 3\nProcess 2 sent to process 0: 2\nProcess 1 sent to process 0: 1\nProcess 0: Received from process 1 saying: 1\nProcess 0: Received from process 2 saying: 2\nProcess 0: Received from process 3 saying: 3\n\n\n\nL’exercice est décomposé en 3 étapes :\n\nPing: compléter le script ping_pong_1.R de manière à ce que le processus de rang 0 envoie un message contenant une série aléatoire de 1000 réels au rang 1.\nPing-Pong: compléter le script ping_pong_2.R de manière à ce que le processus de rang 1 renvoie le message vers le processus de rang 0.\nMatch de Ping-Pong: compléter le script ping_pong_3.R de manière à enchainer 9 échanges."
},
{
"objectID": "com_point_a_point.html#exemple",
diff --git a/sitemap.xml b/sitemap.xml
index b3f93d7..6ffcfd4 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,18 +2,18 @@
https://groupecalcul.github.io/ANFRCalculRmpi/com_collectives.html
- 2024-09-24T21:56:09.134Z
+ 2024-09-25T07:48:11.988Z
https://groupecalcul.github.io/ANFRCalculRmpi/exercice.html
- 2024-09-24T21:56:09.135Z
+ 2024-09-25T07:48:11.989Z
https://groupecalcul.github.io/ANFRCalculRmpi/index.html
- 2024-09-24T21:56:09.135Z
+ 2024-09-25T07:48:11.991Z
https://groupecalcul.github.io/ANFRCalculRmpi/com_point_a_point.html
- 2024-09-24T21:56:09.135Z
+ 2024-09-25T07:48:11.988Z