mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-25 14:28:05 +02:00
MPI Datentypen hinzugefügt
This commit is contained in:
parent
ab5cf691bb
commit
16d9ba2f2a
3 changed files with 30 additions and 4 deletions
|
@ -6,6 +6,12 @@ Message Passing Interface (kurz: MPI) ist ein Standard,
|
||||||
der den Nachrichtenaustausch bei parallelen Berechnungen auf
|
der den Nachrichtenaustausch bei parallelen Berechnungen auf
|
||||||
verteilten Computersystemen beschreibt.
|
verteilten Computersystemen beschreibt.
|
||||||
|
|
||||||
|
Prozesse kommunizieren in MPI über sog. \textit{Kommunikatoren}. Ein Kommunikator
|
||||||
|
(\texttt{MPI\_Comm}\xindex{MPI\_Comm})
|
||||||
|
definiert eine Menge an Prozessen, die miteinander kommunizieren können. In dieser
|
||||||
|
Prozessgruppe hat jeder Prozess einen eindeutigen \textit{rank}\xindex{rank} über den die Prozesse
|
||||||
|
sich identifizieren können.
|
||||||
|
|
||||||
\section{Erste Schritte}
|
\section{Erste Schritte}
|
||||||
\inputminted[numbersep=5pt, tabsize=4, frame=lines, label=hello-world.c]{c}{scripts/mpi/hello-world.c}
|
\inputminted[numbersep=5pt, tabsize=4, frame=lines, label=hello-world.c]{c}{scripts/mpi/hello-world.c}
|
||||||
|
|
||||||
|
@ -14,6 +20,18 @@ Mit \texttt{mpirun -np 14 scripts/mpi/a.out} werden 14 Kopien des Programms
|
||||||
gestartet.
|
gestartet.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\section{MPI Datatypes}\xindex{MPI datatypes}
|
||||||
|
|
||||||
|
\begin{table}[h]
|
||||||
|
\begin{tabular}{|l|l||p{3.2cm}|l|}
|
||||||
|
\hline
|
||||||
|
MPI datatype & C datatype & MPI datatype & C datatype \\ \hline
|
||||||
|
MPI\_INT & signed int & MPI\_FLOAT & float \\
|
||||||
|
MPI\_UNSIGNED & unsigned int & MPI\_DOUBLE & double \\
|
||||||
|
MPI\_CHAR & signed char & MPI\_UNSIGNED\newline{}\_CHAR & unsigned char \\ \hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
\section{Funktionen}
|
\section{Funktionen}
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-size.c}\xindex{MPI\_Comm\_size}%
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-size.c}\xindex{MPI\_Comm\_size}%
|
||||||
Liefert die Größe des angegebenen Kommunikators; dh. die Anzahl der Prozesse in der Gruppe.
|
Liefert die Größe des angegebenen Kommunikators; dh. die Anzahl der Prozesse in der Gruppe.
|
||||||
|
@ -27,6 +45,7 @@ Liefert die Größe des angegebenen Kommunikators; dh. die Anzahl der Prozesse i
|
||||||
\textbf{Beispiel}
|
\textbf{Beispiel}
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-size-example.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-size-example.c}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Comm\_rank}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Comm\_rank}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-rank.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-rank.c}
|
||||||
Bestimmt den Rang des rufenden Prozesses innerhalb des Kommunikators.
|
Bestimmt den Rang des rufenden Prozesses innerhalb des Kommunikators.
|
||||||
|
@ -42,6 +61,7 @@ Der Rang wird von MPI zum Identifizieren eines Prozesses verwendet. Die Rangnumm
|
||||||
\textbf{Beispiel}
|
\textbf{Beispiel}
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-rank-example.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/comm-rank-example.c}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Send}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Send}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-send.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-send.c}
|
||||||
Senden einer Nachricht an einen anderen Prozeß innerhalb eines Kommunikators. (Standard-Send)
|
Senden einer Nachricht an einen anderen Prozeß innerhalb eines Kommunikators. (Standard-Send)
|
||||||
|
@ -60,6 +80,7 @@ Ein Kommunikationsvorgang wird durch ein Tripel (Sender, Empfänger, tag) eindeu
|
||||||
\textbf{Beispiel}
|
\textbf{Beispiel}
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-send-example.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-send-example.c}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Recv}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Recv}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-receive.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-receive.c}
|
||||||
Empfangen einer Nachricht (blockierend)
|
Empfangen einer Nachricht (blockierend)
|
||||||
|
@ -67,18 +88,20 @@ Empfangen einer Nachricht (blockierend)
|
||||||
\textbf{Parameter}
|
\textbf{Parameter}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item \textbf{buf}: Anfangsadresse des Empfangspuffers
|
\item \textbf{buf}: Anfangsadresse des Empfangspuffers
|
||||||
\item \textbf{status}: Status, welcher source und tag angibt (\texttt{MPI\_Status})
|
\item \textbf{count}: Anzahl (d.~h. $\geq 0$) der Elemente im Empfangspuffer
|
||||||
\item \textbf{count}: Anzahl der Elemente im Empfangspuffer (nichtnegativ)
|
|
||||||
\item \textbf{datatype}: Typ der zu empfangenden Elemente (handle)
|
\item \textbf{datatype}: Typ der zu empfangenden Elemente (handle)
|
||||||
\item \textbf{source}: Rang des Senderprozesses in comm oder \texttt{MPI\_ANY\_SOURCE}
|
\item \textbf{source}: Rang des Senderprozesses in comm oder \texttt{MPI\_ANY\_SOURCE}
|
||||||
\item \textbf{tag}: message tag zur Unterscheidung verschiedener Nachrichten
|
\item \textbf{tag}: message tag zur Unterscheidung verschiedener Nachrichten
|
||||||
Ein Kommunikationsvorgang wird durch ein Tripel (Sender, Empfänger, tag) eindeutig beschrieben. Um Nachrichten mit beliebigen tags zu empfangen, benutzt man die Konstante \texttt{MPI\_ANY\_TAG}.
|
Ein Kommunikationsvorgang wird durch ein Tripel (Sender, Empfänger, tag) eindeutig beschrieben. Um Nachrichten mit beliebigen tags zu empfangen, benutzt man die Konstante \texttt{MPI\_ANY\_TAG}.
|
||||||
\item \textbf{comm}: Kommunikator (handle)
|
\item \textbf{comm}: Kommunikator (handle)
|
||||||
|
\item \textbf{status}: Status, welcher source und tag angibt (\texttt{MPI\_Status}).
|
||||||
|
Soll dieser Status ignoriert werden, kann \texttt{MPI\_STATUS\_IGNORE}\xindex{MPI\_STATUS\_IGNORE} angegeben werden.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textbf{Beispiel}
|
\textbf{Beispiel}
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-receive-example.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-receive-example.c}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Reduce}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Reduce}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-reduce.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-reduce.c}
|
||||||
Führt eine globale Operation \textbf{op} aus; der Prozeß \enquote{root} erhält das Resultat.
|
Führt eine globale Operation \textbf{op} aus; der Prozeß \enquote{root} erhält das Resultat.
|
||||||
|
@ -93,6 +116,7 @@ Führt eine globale Operation \textbf{op} aus; der Prozeß \enquote{root} erhäl
|
||||||
\item \textbf{comm}: Kommunikator (handle)
|
\item \textbf{comm}: Kommunikator (handle)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Bcast}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Bcast}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-bcast.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-bcast.c}
|
||||||
Sendet eine Nachricht vom Prozess \texttt{root} an alle anderen Prozesse des
|
Sendet eine Nachricht vom Prozess \texttt{root} an alle anderen Prozesse des
|
||||||
|
@ -107,6 +131,7 @@ angegebenen Kommunikators.
|
||||||
\item \textbf{comm}: Kommunikator (handle)
|
\item \textbf{comm}: Kommunikator (handle)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\goodbreak
|
||||||
\rule{\textwidth}{0.4pt}\xindex{MPI\_Scatter}%
|
\rule{\textwidth}{0.4pt}\xindex{MPI\_Scatter}%
|
||||||
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-scatter.c}
|
\inputminted[numbersep=5pt, tabsize=4]{c}{scripts/mpi/mpi-scatter.c}
|
||||||
Verteilt Daten vom Prozess \texttt{root} unter alle anderen Prozesse in der Gruppe, so daß, soweit möglich, alle Prozesse gleich große Anteile erhalten.
|
Verteilt Daten vom Prozess \texttt{root} unter alle anderen Prozesse in der Gruppe, so daß, soweit möglich, alle Prozesse gleich große Anteile erhalten.
|
||||||
|
|
Binary file not shown.
|
@ -1,3 +1,4 @@
|
||||||
int MPI_Recv(void *buf, int count,
|
int MPI_Recv(void *buf, int count,
|
||||||
MPI_Datatype datatype, int source, int tag,
|
MPI_Datatype datatype, int source,
|
||||||
MPI_Comm comm, MPI_Status *status)
|
int tag, MPI_Comm comm,
|
||||||
|
MPI_Status *status)
|
Loading…
Add table
Add a link
Reference in a new issue