Top Banner
Multiprozessorsysteme SMP DSM Bemerkungen OpenMP Amdahl Parallel Blocking Literatur Page 1 of 41 Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing in Computer Science Prof. Dr. H.-J. Bungartz Dipl.-Geophys. Markus Brenk, [email protected] Dr. Ralf Mundani [email protected] 15. November 2006 (Foliensatz II)
41

Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Oct 29, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 1 of 41

PraktikumWissenschaftliches Rechnen

Praktikum Wissenschaftliches Rechnen

Performance-optimized Programming

Scientific Computing in Computer ScienceProf. Dr. H.-J. Bungartz

Dipl.-Geophys. Markus Brenk,[email protected]. Ralf [email protected]

15. November 2006 (Foliensatz II)

Page 2: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 2 of 41

PraktikumWissenschaftliches Rechnen

1. Einordnung von Multiprozessorsysteme

• Einteilung nach Adressraum und Speicherkonfiguration

Konfiguration von Multiprozessoren

quick and dirty

Page 3: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 3 of 41

PraktikumWissenschaftliches Rechnen

• Einteilung nach Zugriffszeit und Übertragungszeit

– Uniform-memory-access-Model (UMA)

– Non-uniform-memory-access-Model (NUMA)

– Uniform-communication-architecture-Model (UCA)

– Non-uniform-communication-architecture-Model (NUCA)

Page 4: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 4 of 41

PraktikumWissenschaftliches Rechnen

2. „Symmetric Multiprocessor“ SMP

2.1. Bus gekoppelte SMP’s

• Datentransfer in „cache lines“

• Speicherzugriffskonflikte sind sehr wahrscheinlich

• Mehrfachbussystem mit parallel angeordnetem Mehrfachbus

Page 5: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 5 of 41

PraktikumWissenschaftliches Rechnen

2.2. „Crossbar“ gekoppelte SMP’s

• blockierungsfreie Kommunikation (disjunkte Paare)

• hohe Bandbreite

• hoher Hardwareaufwand (n2)

Page 6: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 6 of 41

PraktikumWissenschaftliches Rechnen

2.3. Cache-Kohärenz bei SMP’s

Parallele Ausführung eines Programms:

• Das Programm wird in mehrere Threads aufgeteilt.

• Die Threads werden auf unterschiedlichen Prozessoren parallelausgeführt.

Problem:

• Alle Prozessoren greifen auf den gemeinsamen Speicher zuund legen Kopien in ihrem Cache an.

• Wird ein Datum im Cache verändert, so ist das System nichtmehr konsistent.

Durch eine „write-through“ Strategie, bei der eine Änderung im Ca-che zu einer Änderung im Hauptspeicher führt, kann das Systemkonsistent gehalten werden. Ein solch hoher Aufwand führt zu Leis-tungseinbußen!Deutlich weniger Aufwand hat die „write-back“ Strategie, die inkon-sistente Zustände erlaubt.Liefert ein Lesezugriff immer den Wert des zeitlich letzten Schreib-zugriffs auf das entsprechende Datum, so wird das Speichersystemals cache-kohärent bezeichnet.

Page 7: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 7 of 41

PraktikumWissenschaftliches Rechnen

Das Cache-Kohärenzprotokoll legt den Umfang der Inkonsistenz festund sichert die Kohärenz.Es gibt zwei prinzipielle Ansätze für Cache-Kohärenzprotokolle:

• write-update: Beim Verändern einer Kopie in einem Cache müs-sen alle Kopien in anderen Caches ebenfalls verändert werden.

• write-invalidate: Vor dem Verändern einer Kopie in einem Cachemüssen alle Kopien für ungültig erklärt werden.

Üblicherweise wird bei SMP’s „bus-snooping“ mit Write-invalidate-Cache-Kohärenzprotokoll im Write-back-Verfahren angewandt.Beispiel: MESI-Protokoll

Exclusive modified Die Cache-line wurde geändert und befindet sichausschließlich in diesem Cache.

Exclusive unmodified Die Cache-line wird nur gelesen und befindetsich ausschließlich in diesem Cache.

Shared unmodified Kopien der Cache-line befinden sich für Lesezu-griffe im mehr als einem Cache.

Invalid Die Cache-line ist ungültig.

Nomenklatur: CC-UMA, CC-NUMA

Page 8: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 8 of 41

PraktikumWissenschaftliches Rechnen

Erweiterung des MESI-Protokolls: MOESI (z.B. AMD Opteron)

Page 9: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 9 of 41

PraktikumWissenschaftliches Rechnen

3. Bemerkungen zu Distributed-Shared-Memory (DSM)

• Die Prozessoren besitzen einen gemeinsamem Adressraum aberlokalen Speicher.

• Die Cache-Kohärenz wird über directory tables gesichert. Da-ten: write-back, write-invalidate; Directory: write-through, write-update.

• Leichte Portierbarkeit von SMP’s auf DSM’s.

• Der gemeinsame virtuelle Speicher wird in Seiten aufgeteilt.Diese Seiten können ihren physikalischen Speicherort wech-seln.

• Problem: Programmierer hat kaum Kontrolle über die Kommu-nikation.

• Problem: Das „Wandern“ der Seiten kann zu Seitenflattern (thra-shing) führen.

• Eine Variante ist Software basiertes DSM-System (z. B. Rthreads).

Page 10: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 10 of 41

PraktikumWissenschaftliches Rechnen

4. Shared-Memory Programmierung mit OpenMP

4.1. OpenMP - Einführung

http://www.openmp.org

Page 11: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 11 of 41

PraktikumWissenschaftliches Rechnen

4.2. OpenMP - Fine Grained Parallelism

program main...!$OMP PARALLEL DOdo i=1,n

!parallel workend do!$OMP END PARALLEL DO...!$OMP PARALLEL SECTIONS!$OMP SECTION...!$OMP SECTION...!$OMP END PARALLEL SECTIONS...end program main

Page 12: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 12 of 41

PraktikumWissenschaftliches Rechnen

4.3. OpenMP - Coarse Grained Parallelism

#include <stdio.h>#include <omp.h>main()

{int iam=0;int num_thr=1;

...#pragma omp parallel

{#ifdef _OPENMP

iam=omp_get_thread_num();team_size=omp_get_num_threads();

#endifpara_work(data,team_size,iam);

#pragma omp barrierfor (i=0; i<n/num_thr; i++)

{...

}...

}}

Page 13: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 13 of 41

PraktikumWissenschaftliches Rechnen

4.4. OpenMP - Überblick

• Directives#pragma omp ... bzw. !$OMP ...

• Parallel regions construct#pragma omp parallel

• Work sharing constructs#pragma omp for , #... sections , #... single

• Master and Synchronization constructs#pragma omp master , #... critical , #... barrier ,...

• Variable scoping clauses and directives#pragma omp threadprivat(...) , #... privat(...) ,#... shared(...) , ...

• Runtime libraryomp_get_thread_num() , omp_get_num_threads() , ...

• Environment variablesOMP_NUM_THREADS, ...

Page 14: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 14 of 41

PraktikumWissenschaftliches Rechnen

4.5. OpenMP - Typische Anwendung

Beispiel: Gradient Φ(x, y) = x2 + y; Calculate: ∇Φprogram grad

implicit noneinteger,parameter :: n=500real,dimension(0:n,0:n) :: potentialreal,dimension(1:n,1:n,1:2) :: fieldinteger :: i,j,kdo i=0,n

do j=0,npotential(i,j)=(real(i)/real(n)) ** 2+&

real(j)/real(n)end do

end dodo i=1,n

do j=1,nfield(i,j,1)=(potential(i,j)-&

potential(i-1,j)) * real(n)field(i,j,2)=(potential(i,j)-&

potential(i,j-1)) * real(n)end do

end doend program grad

Page 15: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 15 of 41

PraktikumWissenschaftliches Rechnen

program grad...head ...!$OMP PARALLEL PRIVATE(i,j)&

!$OMP SHARED(potential,field,n)!$OMP DO

do j=0,ndo i=0,n

potential(i,j)=(real(i)/real(n)) ** 2+&real(j)/real(n)

end doend do

!$OMP END PARALLEL DO!$OMP DO

do j=1,ndo i=1,n

field(i,j,1)=(potential(i,j)-&potential(i-1,j)) * real(n)

field(i,j,2)=(potential(i,j)-&potential(i,j-1)) * real(n)

end doend do

!$OMP END PARALLEL DO!$OMP END PARALLELend program grad

Grundregel: Parallelisiere die äußerste Schleife!

Page 16: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 16 of 41

PraktikumWissenschaftliches Rechnen

4.6. OpenMP - smooth.c

Beispiel: Smoothing Glätten eines Datensatzes

for (i=1; i<m; i++){

for (j=1; j<n-1; j++){

a[i][j]=(a[i-1][j-1]+a[i-1][j] \+a[i-1][j+1])/3.0;

}}

for (i=1; i<m; i++){

#pragma omp parallel for private(j)for (j=1; j<n-1; j++)

{a[i][j]=(a[i-1][j-1]+a[i-1][j] \

+a[i-1][j+1])/3.0;}

}

Page 17: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 17 of 41

PraktikumWissenschaftliches Rechnen

4.7. OpenMP - Directive Format

#pragma omp directive [clause[[,]clause]...] newline

4.8. OpenMP - Parallel regions construct

#pragma omp parallel [clause[[,]clause]...] newlinestructured-block

4.9. OpenMP - Work sharing constructs

• for Construct#pragma omp for [clause[[,]clause]...] newlinefor-loop

• Die Iterationen der Loops werden auf die Threads verteilt.• Dabei finden die folgenden Scheduling Strategien Anwendung:

static , dynamic , guided und runtime

• Das for-Statement muss eine „einfache“ Gestalt besitzen.• Der Geltungsbereich der Variablen wird durch private ,

firstprivate , lastprivat und reduction festgelegt.• Die Klausel nowait unterdrückt die Synchronisation am Ende

der Loop.

Page 18: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 18 of 41

PraktikumWissenschaftliches Rechnen

• sections Construct#pragma omp sections [clause[[,]clause]...] newline

{[ #pragma omp section new-line]

structured-block[ #pragma omp section new-line

structured-block]...}

• workshare Construct (nur Fortran!)!$OMP WORKSHAREblock

!$OMP END WORKSHARE [NOWAIT]z. B. array assignment, intrinsic funktions, where statenent

• Kurzformenz.B. #pragma omp parallel forMöglich, wenn nur eine „paralleles Objekt“ in der parallelen Regionenthalten ist.

Page 19: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 19 of 41

PraktikumWissenschaftliches Rechnen

4.10. OpenMP - schedule Clause

• schedule (static[,chunk])Die Iterationen werden gleichmäßig in Blöcken (chunks) derGröße chunk reihum auf die Threads aufgeteilt. Default-Wertfür chunk ist die Anzahl der Iterationen dividiert durch die An-zahl der Threads.

• schedule (dynamic [,chunk])Die Iterationen werden in Blöcken (chunks) der Größe chunkauf die Threads aufgeteilt. Der Thread, der seinen Block abge-arbeitet hat, bekommt einen neuen zugewiesen. Default-Wertfür chunk ist 1.

• schedule (guided [,chunk])Die Iterationen werden in Blöcken (chunks) auf die Threads auf-geteilt, deren Größe exponentiell abnimmt. Mit chunk wird dieminimale Blockgröße angegeben. Default-Wert für chunk ist 1.

• schedule (runtime)Das Schleifen-Scheduling kann zur Laufzeit durch die Umge-bungsvariable OMP_SCHEDULEfestgelegt werden.

• Die Voreinstellungen sind implementationsabhängig. Meist istschedule (static) voreingestellt

Page 20: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 20 of 41

PraktikumWissenschaftliches Rechnen

4.11. OpenMP - single /master and Synchronization Constructs

Zuerst zwei Work Sharing Constructs:

• single Construct#pragma omp single [clause[[,]clause]...] newlinestructured-blockSynchronisation am Ende des Blocks!

• master Construct#pragma omp master newlinestructured-blockKeine Synchronisation am Ende des Blocks!

Synchronization Constructs:

• barrier Construct#pragma omp barrier newline

• critical Construct#pragma omp critical (name)] newlinestructured-block

• atomic Construct#pragma omp atomic newlinestructured-stmt

Page 21: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 21 of 41

PraktikumWissenschaftliches Rechnen

Beispiel: Minimum

#pragma omp parallel for shared(a, cur_min)for (i=0; i<n; i++)

{if (a[i] < cur_min)

{#pragma omp critical(minlock)

if (a[i] < cur_min)cur_min=a[i];

}}

Beispiel: Atomic Update

#pragma omp parallel for shared(x, y, index, n)for (i=0; i<n; i++)

{#pragma omp atomic

x[index[i]]+=work1(i);y[i]+=work2(i);

}

Mehrere Threads können parallel auf unterschiedliche Elementeschreiben.

Page 22: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 22 of 41

PraktikumWissenschaftliches Rechnen

Beispiel: Summe

#pragma omp parallel privat(i, s_local){

s_local=0.0;#pragma omp for

for (i=0; i<n; i++)s_local+=a[i];

#pragma omp atomics+=s_local;

}

• reduction Clause

s=0.0;#pragma omp parallel for reduction(+:s)for (i=0; i<n; i++)

s+=a[i];

• ordered Construct#pragma omp ordered newlinestructured-block

• flush Directive#pragma omp flush [(variable-list)]newline

Page 23: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 23 of 41

PraktikumWissenschaftliches Rechnen

Beispiel: spin lock

#include <stdio.h>#include <omp.h>main()

{int me=0;int ticket;

#pragma omp parallel private(me) shared(ticket){

#ifdef _OPENMPme=omp_get_thread_num();

#endif#pragma omp single

{ ticket=0;}do {

#pragma omp flush(ticket)} while (ticket < me);work(me);ticket++;

#pragma omp flush(ticket)fprint("%d \n",me);

}}

Page 24: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 24 of 41

PraktikumWissenschaftliches Rechnen

4.12. OpenMP - Variable scoping clauses and directives

• Normalerweise sind alle Variablen shared.

• Globale Variablen sind shared (Fortran: Common-Blöcke, Va-riable mit dem save-Attribut, Modul-Variable; C: Variable, derenGeltungsbereich sich auf die ganze Quelldatei erstreckt, Varia-ble mit dem static oder extern Attribut), falls sie nicht als thread-private vereinbart sind.

• Ausnahme: Die Schleifenindizes von parallelisierten Zählschlei-fen sind private.

• threadprivat DirectiveGlobale Variablen werden durch threadprivat privatisiert. Siekönnen durch die copyin Klausel initialisiert werden.

Data-Sharing Attribute Clauses

• privates. Beispiele

• shareds. Beispiele

• reduktions. Beispiele

Page 25: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 25 of 41

PraktikumWissenschaftliches Rechnen

• defaultVerändert die Standardeinstellungen.

• firstprivate

init=10.2;#pragma omp parallel for privat(init, value)for (i=0; i<n; i++)

{value=get_val( init ,i);. . .

}

init=10.2;#pragma omp parallel for firstprivat(init) \

privat(value)for (i=0; i<n; i++)

{value=get_val(init,i);. . .

}

Page 26: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 26 of 41

PraktikumWissenschaftliches Rechnen

init=10.2;#pragma omp parallel for firstprivat(init) \

privat(value)for (i=0; i<n; i++)

{value=get_val(init,i);. . .

}printf("%f",value);

• lastprivate

init=10.2;#pragma omp parallel for firstprivat(init) \

lastprivat(value)for (i=0; i<n; i++)

{value=get_val(init,i);. . .

}printf("%f",value);

Page 27: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 27 of 41

PraktikumWissenschaftliches Rechnen

4.13. OpenMP - Runtime library

In OpenMPstehen einige Funktionen zur Verfügung, mit denen dieparallele Programmausführung zur Laufzeit gesteuert werden kann.Diese Funktionen werden nicht als Pragma angegeben, daher sollte#ifdef verwendet werden um eine fehlerfreie sequenzielle Über-setzung zu gewährleisten. Beispiele sind:

• omp_set_num_threads(int num_threads )

• omp_get_num_threads()

• . . .

• omp_set_num_dynamic()

• . . .

• Lock FunctionsMutex Operationen zum Steuerung kritischer Abschnitte im Ei-genbau.

Page 28: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 28 of 41

PraktikumWissenschaftliches Rechnen

4.14. OpenMP - Environment variables

• OMP_NUM_THREADS

• OMP_SCHEDULE

• OMP_DYNAMIC

• OMP_NESTED

Page 29: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 29 of 41

PraktikumWissenschaftliches Rechnen

4.15. OpenMP - Links

www http://www.rz.rwth-aachen.de/hpc/talks/SunHPC_2002/OpenMP-Dateien/v3_document.htm

www http://www.compunity.org/

www http://www.openmp.org/drupal/node/view/8

www http://docs.sun.com/

www PortlandGroup Dokumentation

Page 30: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 30 of 41

PraktikumWissenschaftliches Rechnen

5. Amdahl’sches Gesetz für Parallelisierung

Der Anteil q der m Operationen eines Problems wird auf p Prozes-soren gelöst. Die restlichen Operationen werden sequenziell gelöst.Damit ergibt ich der Speedup nach Amdahl zu

sp(p, q) =t1tp

=mR1

m·qp·R1

+ m(1−q)R1

=1

q 1p

+ (1− q)−−−→p→∞

1

1− q, (1)

wenn t1 die sequenzielle Ausführungszeit, tp parallele Ausführungs-zeit und R1 die Performance des einzelnen Prozessors ist.Was macht Amdahl falsch?

• Parallele Programme besitzen andere Datenstrukturen und Al-gorithmen.

• Es existiert ein paralleler Overhead (Synchronisation, Kommu-nikation, . . . )

• Die Vektorlänge sinkt mit 1/p.

In [1] finden sich dazu ausführliche Betrachtungen.

Page 31: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 31 of 41

PraktikumWissenschaftliches Rechnen

6. „Cache Bocking“ Algorithmen

6.1. Loop Unrolling

for(i=0;i<n;i++){for(j=0;j<m;j++){

a[i][j]=b[i][j]+c[i][j] * d;}

}for(i=0;i<n;i+=3){

for(j=0;j<m;j++){a[i][j]=b[i][j]+c[i][j] * d;a[i+1][j]=b[i+1][j]+c[i+1][j] * d;a[i+2][j]=b[i+2][j]+c[i+2][j] * d;

}}

PC: Speicherzugriff mit Stride (wenn m klein kein Problem s. u.)

Daumenregeln:

• Unrolling „dicker“ Schleifen zahlt sich nicht aus!

• Kurze Schleifen ⇒ „full unrolling“!

• Lange Schleifen; dünner Körper ⇒ unrolling!

Page 32: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 32 of 41

PraktikumWissenschaftliches Rechnen

for(j=0;j<n;j++){

for(i=0;i<m;i++){

a[i]+=b[j][i];}

}

for(j=0;j<n;j+=2){

for(i=0;i<m;i++){

a[i]+=b[j][i]+b[j+1][i];}

}

• Grundsätzlich sollte der Compiler die Scheifen optimieren!

• „Handarbeit“ ist nur bei komplexeren Problemen gefragt!

Page 33: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 33 of 41

PraktikumWissenschaftliches Rechnen

6.2. Speicherzugriff mit „Stride“

for(i=0;i<n;i++){

for(j=0;j<m;j++){

a[i][j]+=b[j][i];}

}

Skizzen der Arrays a und b mit Cache-lines

Page 34: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 34 of 41

PraktikumWissenschaftliches Rechnen

Skizzen der Arrays a und b - Zugriff auf den Speicher

Wie oft muss b in den Cache geladen werden?for(j=0;j<n;j+=3)

{for(i=0;i<m;i+=3)

{a[i][j]+=b[j][i];a[i+1][j]+=b[j+1][i];a[i+2][j]+=b[j+2][i];a[i][j+1]+=b[j][i+1];. . .

}}

Page 35: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 35 of 41

PraktikumWissenschaftliches Rechnen

Skizzen der Arrays a und b mit Cache-Blocking

for(j=0;j<n;j+=3){

for(i=0;i<m;i+=3){

a[i][j]+=b[j][i];a[i+1][j]+=b[j+1][i];a[i+2][j]+=b[j+2][i];a[i][j+1]+=b[j][i+1];. . .

}}

Page 36: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 36 of 41

PraktikumWissenschaftliches Rechnen

6.3. Matrix-Matrix-Multiplikation mit Cache-Blocking

cij =n∑

k=1

aik · bkj , i, j = 1 . . . n.

���������������������������������������������������������������������������������������������������������

���������������������������������������������������������������������������������������������������������

����������������������������

����������������������������

i

k

k

j

A

B

C

Skizze der Matrix-Matrix-Multiplikation -Bearbeitung in Spalten (Fortran)

Page 37: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 37 of 41

PraktikumWissenschaftliches Rechnen

����������������������������

����������������������������

������������������������������������������

������������������������������������������

k

k

j

A

B

C

i

Skizze der Matrix-Matrix-Multiplikation mit „Section Striping“

Wie oft wird die matrix a in den Cache geladen?

Page 38: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 38 of 41

PraktikumWissenschaftliches Rechnen

• a muß für jede Spalte von c neu geladen werden

⇒ lade einen Teil von a und benutze ihn für alle Spalten von c

������������������������������������������

������������������������������������������

������������������������������������������������������������������

������������������������������������������������������

����������������������������

����������������������������

��������������������������������������������

����������������

�����������������������������������������������������������������������������������������

A

B

C

i

j

k

k

Skizze der Matrix-Matrix-Multiplikation mit „Cache Blocking“

⇒ c muß nun für jeden „Cache-fill“ geladen werden

Page 39: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 39 of 41

PraktikumWissenschaftliches Rechnen

Einschub Cache-Organisation:

• Direct-Mapped-Cache

– Hauptspeicher ist in Blöcke von der Größe des Caches auf-geteilt.

– Die Reihenfolge der Cache-lines im Cache entspricht derim HS.

– Damit ist die Position einer Cache-line durch die Blocknum-mer gegeben.

• full-associative-Cache

– Jede Cache-line kann beliebig im Cache abgelegt werden.

– Um eine Cache-line zu finden, müssen gleichzeitig alle Po-sitionen (voll assoziative) in einem Takt verglichen werden.

• n-way-associative-Cache

– n-facher Direct-Mapped-Cache.

Wie muss ein Cache-Blockling-Algorithmus bei einem Direct-Mapped-Cache bzw. einem n-way-associative-Cache verändertwerden?

Details zur Cache-Optimierung finden sich in [2] und [1].

Page 40: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 40 of 41

PraktikumWissenschaftliches Rechnen

Literatur

[1] SCHÖNAUER, W.: Scientific Supercomputing. Karlsruhe : Schö-nauer, 2000. – Bem: Anwendungs bezogenes Vorlesungsskript,das lange Zeit handschriftlich (?!) im Web zufinden war. Sehrempfehlenswert! . – ISBN 3–00–005484–7

[2] DOWD, Kevin ; SEVERANCE, Charles: High Performance Compu-ting. O’Reilly, 1998. – Bem: Ein Buch für Praktiker! OptimierterSpeicherzugriff, Schleifen-Optimierung und Benchmarking sindnur einige Themen aus dem breiten Vorrat, den dieses Buch be-reit hällt. – ISBN 3–931216–76–4

[3] CHANDRA, R. ; DAGUM, L. ; KOHR, D. ; MAYDAN, D. ; MCDONALD,J. ; R.MENON: Parallel Programming in OpenMP. Morgan Kauf-mann Publishers, 2001. – Bem: Einziges Lehrbuch und überallerwähntes Standardwerk.. – ISBN 1–55860–671–8

[4] UNGERER, Th.: Parallelrechner und parallele Programmierung.Berlin : Spektrum, 1997. – Bem: Das Buch gibt einen weitreich-nenden Überblick. Es schliest die Lücke zwischen theoretischenKonzepten einerseits und einer Handware bezogenen Betrach-tung andererseits hin zur praktischen Anwendung. Es handeltsich um ein klassisches Lehrbuch. – ISBN 3–8274–0231–X

Page 41: Praktikum Wissenschaftliches Rechnen - in.tum.de · Praktikum Wissenschaftliches Rechnen Praktikum Wissenschaftliches Rechnen Performance-optimized Programming Scientific Computing

Multiprozessorsysteme

SMP

DSM Bemerkungen

OpenMP

Amdahl Parallel

Blocking

Literatur

Page 41 of 41

PraktikumWissenschaftliches Rechnen

[5] MÄRTIN, Ch.: Rechnerachitekturen. Leibzig : Fachbuchverlag,2001. – Bem: Wer über die Inhalte des Praktikums hinaus anRechnerarchitektur interresiert ist, findet hier ein Lehrbuch, dassich auch sehr gut als Nachschlagewerk eignet. – ISBN 3–446–21475–5