next up previous
Next: 4.1.2 Matrix-Vektor Operationen (BLAS2) Up: 4.1.1 Vektor-Vektor Operationen (BLAS1) Previous: 4.1.1.1 Berechnung des Skalarproduktes

4.1.1.2 Berechnung des Skalarproduktes auf einem Parallelrechner mit verteiltem Speicher

Seien die Vektoren \ensuremath{\color{green} {\sf x}}, \ensuremath{\color{green} {\sf y}} disjunkt in jeweils $P$ Teilvektoren der Längen $N_j$ ( $\scriptstyle j=\overline{1,P} \makebox[0pt]{}$) geteilt und auf dem entsprechenden Prozessor $P_j$ verfügbar.

     DO IN PARALLEL $ j \,=\, 1,\, P $

$ s_j \;:=\; 0 $
DO $ i \,=\, 1,\, N_j $
$ s_j \;:=\; x_i \ast y_j $
END DO
END DO
CALL ALL/SMALL>_REDUCE($s_j$) $\longrightarrow$ $s$ ,d.h. $s = \sum\limits_{j=1}^P s_j$



Aufgabe :

Programmieren Sie das globale Skalarprodukt zweier disjunkt verteilter Vektoren auf einem Parallelrechner mit verteiltem Speicher.





Bemerkung : Eigene Bibliothek libvbasmod.a, welche als Untermenge BLAS1-Funktionalität enthält.

1. Realisierungsebene :

Hochsprache C, F77 und Loop unrolling, dh. das Verhältnis Arithmetik zu Schleifenverwaltung wird verbessert. Betrachten das Skalarprodukt mit Stride 1.

\fbox{\begin{minipage}[t]{0.3\textwidth}
$s \;=\; 0$\space \\
DO $i\,=\,1,\,N...
...\\
\hspace*{3em} $ s\;=\;s + x_i \ast y_i $\space \\
END DO
\end{minipage}} $\longrightarrow$ \fbox{\begin{minipage}[t]{0.5\textwidth}
$m \;=\; N \,\mbox{mod}\,4$\space \\
...
...x_{i+2} \ast y_{i+2} + x_{i+3} \ast y_{i+3} $\space \\
END DO
\end{minipage}}

Die Wahl des Moduloparameters (hier 4) ist hardwareabhängig.


2. Realisierungsebene :

Wie 1. mit zusätzlicher Benutzung der BLAS1-Routinen wo dies möglich ist (und die vorhandene BLAS-Bibliothek fehlerfrei ist),
z.B. VDPLUS( $n,X,ix,Y,iy,Z,iz$), d.h. $\underline{{\ensuremath{\color{green} {\sf x}} }} = \underline{{\ensuremath{\color{green} {\sf y}} }}+\underline{{\ensuremath{\color{green} {\sf z}} }}$

    IF (adr($X$)==adr($Y$)
AND $ix==iy$)

THEN CALL DAXPY($n,1d0,X,ix,Z,iz$)
ELSE IF (adr($X$)==adr($Z$) AND $ix==iz$)
THEN CALL DAXPY($n,1d0,X,ix,Z,iz$)
ELSE Loop unrolling wie in 1. Realisierungsebene
END IF
END IF



next up previous
Next: 4.1.2 Matrix-Vektor Operationen (BLAS2) Up: 4.1.1 Vektor-Vektor Operationen (BLAS1) Previous: 4.1.1.1 Berechnung des Skalarproduktes
Gundolf Haase
1998-12-22