Software Engineering SS04 Paralleles Programmieren FH Aachen, 20.04.2004 Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.

Slides:



Advertisements
Ähnliche Präsentationen
GPU, processing unit?? Ein Projekt, das die Welt hätte verändern sollen, und eine kurze Einführung in einem spannenden Forschungsgebiet.
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Message Passing Interface (MPI)
Matrixmultiplikation
KA – Rechnerarchitektur I ____________________________________________________________________________________________ ____________________________________________________________________________________________.
PC-Cluster.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
1 Energiebewusste Compilierung für digitale Signalprozessoren Markus Lorenz Peter Marwedel Universität Dortmund Lehrstuhl Informatik XII Projekt Prozessorarchitekturen.
0 Energieeffiziente Compilierung für Digitale Signalprozessoren Markus Lorenz Peter Marwedel Rainer Leupers Projekt Prozessorarchitekturen und Compilertechniken.
Prof. Dr. Holger Schlingloff
Threads Richard Göbel.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
OpenMP Präsentation im Rahmen des Seminars
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 14.1.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 12.1.
Studiengang Informatik FHDW
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Einführung.
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Präsentation im Seminar Software Engineering verteilter Systeme im Sommersemester 2013 mit dem Titel.
Präsentation zur Veranstaltung XY mit dem Titel. Software Methodologies for distributed systems Hinweis Die vorgegebene Struktur dient lediglich als Anhaltspunkt.
Was sind Cluster und wie sind sie aufgebaut
Random Heightmap on GPU
Matrix Multiplication on CUDA
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
Rechneraufbau & Rechnerstrukturen, Folie 13.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 13.
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
SS 2005Standard-Software Prof. Dr. Erik Jacobson Blatt 1 Standard-Software Prof. Dr. Erik Jacobson Lehrveranstaltung im SS 2005 Vorlesung Fr.
Mikrocomputertechnik-Labor SS‘04
Duo- und Quad Prozessor-Architektur
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation
Clustering mittels Grafikprozessor
A RBEITEN MIT T HREADS. P ROZESSE UND T HREADS Prozess Eine einzelne CPU kann immer nur einen einzelnen Prozess bearbeiten. Rechenzeit wird an Prozesse.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Die Zählschleife int s = 0 for (int k=1; k
Parallel Matrix Multiplication
Parallel Programming Parallel Matrix Multiplication
Ein Vortrag von Simon Bayer
Eclipse-Entwicklungsumgebung
Multiprozessoren: Herausforderung für die Software
MTS Microsoft Transaction Server Martin Basziszta
Christoph Kessler, IDA, Linköpings universitet, Feb Sprachentwurf und Compiler-Techniken zur explizit-parallelen Programmierung nach dem BSP-Modell.
Serielle Addition H. Malz. Serielle Addition H. Malz Operanden laden.
JOMP
Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Directors Prof. Dr.-Ing. K.D. Müller-Glaser Prof. Dr.-Ing. J. Becker Prof. Dr. rer. nat. W. Stork Institute for Information Processing Technology.
Parallele Algorithmen I Basistechniken
Fakultät Maschinenwesen, Professur für Technische Logistik THEMA DER ARBEIT (DIN Bold 48) Diplomand: Vorname Name Betreuer: Herr X Betreuender HSL: Prof.
Institute for Software Science – University of ViennaP.Brezany Parallele und verteilte Systeme Peter Brezany Institut für Softwarewissenschaften Universität.
prof. dr. dieter steinmann Seite: 1 Vorlesung Unternehmensprozesse IT-Betriebskonzept / IT Governance.
Parallel Programming OpenMP und JOMP
Aktueller Stand der Technik. Auf dem Markt sind heute bereits 64-Bit Mikrocontroller. Die meiste Verwendung finden allerdings noch immer die 8-Bit Modelle.
Dr. Klaus Ruhlig Technology & Product Consulting Sun Microsystems, München Skalierbare Rechnerarchitekturen für ein DWH: Eine vergleichende Analyse.
Parallele Lösung von Differential-Algebraischen Gleichungssystemen und Sensitivitätssystemen Seminarvortrag Daniel Abele
Paralleleles Rechnen auf Grafikkarten Einführung Christian Schwarz.
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo

Inhaltverzeichniss  Einfürung   Ansätze zur Parallelisierung  SISD  SIMD  MIMD  SPMD  Speicher Modelle  Shared Memory  Distributed Memory  SISD + SIMD Program Beispiele  Vektor addition (SISD)  Vektor addition (SIMD)  Shared Memory  Distributed Memory  Glossar  Literatur SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej

Warum Paralleles Programmieren?  Schnell Ergebniss berechnen.  Grossere Daten Mengen bearbeiten. SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej

SWE SS04. Paralleles Programmieren. Ansätze zur Parallelisierung -SIMD Konzept (parallel) -SPMD Konzept (parallel) -MIMD Konzept (parallel) -SISD Konzept (seriel) Was ist Paralleles Programmieren? Perez-Otuno Rodrigo Kühnal Andrej

Was ist Paralleles Programmieren? SWE SS04. Paralleles Programmieren. Speicher Modelle für paralelles Programmieren:  Distributed Memory (Cluster) – MPI – PVM  Shared memory (SMP - Symmetric Multiprocessor Systeme) – OpenMP – Threads++ – Windows API Perez-Otuno Rodrigo Kühnal Andrej

… … … Serielle addition (ein SISD Befehl) int* x=new int[N]; int* y=new int[N]; int* z=new int[N]; … for (I=0; I<N; I++) z[i]=x[i]+y[i]; z[i]=x[i]+y[i]; SWE SS04. Paralleles Programmieren SISD - Single Instruction Single Data x = y = z = Perez-Otuno Rodrigo Kühnal Andrej

… … … Parallele addition (ein SIMD Befehl) include ; // from Processor Pack for MS Visual studio I32vec4* x4=new I32vec4[N/4]; I32vec4* y4=new I32vec4[N/4]; I32vec4* z4=new I32vec4[N/4]; … for (I=0; I<N/4; I++) z4[i]=x4[i]+y4[i]; SWE SS04. Paralleles Programmieren I32vec4 SIMD - Single Instruction Multiplete Data Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Basis konzepte Beim verteiltem Speicher ( distributed memory) ist jedem Prozessor ein Teil des Speichers zugeordnet Beim verteiltem Speicher ( distributed memory) ist jedem Prozessor ein Teil des Speichers zugeordnet Beim Konzept des gemeinsamen Speichers ( shared memory)greifen alle Prozessoren auf denselben Speicher zu Beim Konzept des gemeinsamen Speichers ( shared memory)greifen alle Prozessoren auf denselben Speicher zu Klassischen Shared Memory Parallelisierung versucht das Betriebssystem, mehrere Programmteile auf verschiedenen Prozessoren gleichzeitig abzurabeiten Klassischen Shared Memory Parallelisierung versucht das Betriebssystem, mehrere Programmteile auf verschiedenen Prozessoren gleichzeitig abzurabeiten Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Grundlagen Allerdings verfügt jeder Prozessor zumindest über einen eigenen Cache Allerdings verfügt jeder Prozessor zumindest über einen eigenen Cache Shared Memory ist nur bei Bus--basierten Systemen und bei Cross--Bar anwendbar Shared Memory ist nur bei Bus--basierten Systemen und bei Cross--Bar anwendbar Inter--Prozessor-Kommunikation erfolgt über den Hauptspeicher selber oder spezielle Kommunikationsregister Inter--Prozessor-Kommunikation erfolgt über den Hauptspeicher selber oder spezielle Kommunikationsregister Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Probleme entstehen, Probleme entstehen, wenn Unterprogrammaufrufe nach dem Schema wenn Unterprogrammaufrufe nach dem Schema call sub1(einfeld,ausfelda) call sub1(einfeld,ausfeldb) call sub1(einfeld,ausfeldc) call sub1(einfeld,ausfeldd) call sub1(einfeld,ausfelde) ein Feld wie einfeld in ansonsten unabhängigen Unterprogram- maufrufen verwenden Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Vorteile von SMP: Gesamtsystem erscheint für jeden Prozeß wie ein Einprozessorsystem; Gesamtsystem erscheint für jeden Prozeß wie ein Einprozessorsystem; keine Programmanpassungen vorhandener Software notwendig. Die Vorteile von SMP können durch Anpassung der Software bei Bedarf dennoch genutzt werden; keine Programmanpassungen vorhandener Software notwendig. Die Vorteile von SMP können durch Anpassung der Software bei Bedarf dennoch genutzt werden; durch die gemeinsame Verwendung von Hauptspeicher und Peripheriegeräten sind SMP-Systeme recht preiswert realisierbar. durch die gemeinsame Verwendung von Hauptspeicher und Peripheriegeräten sind SMP-Systeme recht preiswert realisierbar. Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Nachteile von SMP: Relativ großer Overhead bei Betriebssystem und Hardware notwendig, um Einprozessor-Illusion für Applikationen zu erzeugen; Relativ großer Overhead bei Betriebssystem und Hardware notwendig, um Einprozessor-Illusion für Applikationen zu erzeugen; Hohe Auslastung des Busses oder Switches, der die Prozessoren mit gemeinsam benutztem Speicher und Peripheriegeräten verbindet; Hohe Auslastung des Busses oder Switches, der die Prozessoren mit gemeinsam benutztem Speicher und Peripheriegeräten verbindet; Der Zugriff auf von mehreren Prozessoren gemeinsam genutzte Speicherbereiche muß durch sog. Locks geregelt werden, das bedingt einen erhöhten Verwaltungsaufwand für das Betriebssystem. Der Zugriff auf von mehreren Prozessoren gemeinsam genutzte Speicherbereiche muß durch sog. Locks geregelt werden, das bedingt einen erhöhten Verwaltungsaufwand für das Betriebssystem. Perez-Otuno Rodrigo Kühnal Andrej

Shared Memory Open MP Open MP Thread++ Thread++ Java Threads Java Threads Perez-Otuno Rodrigo Kühnal Andrej

Parallelprogrammierung Warum Parallelprogrammierung? Programme, die auf externe Ereignisse reagieren müssen, sind schwierig, sequentiell zu programmieren. Programme, die auf externe Ereignisse reagieren müssen, sind schwierig, sequentiell zu programmieren. In parallelen Programmen wird die Problemstellung in Teilaufgaben zerlegt, die parallel ausgeführt werden können In parallelen Programmen wird die Problemstellung in Teilaufgaben zerlegt, die parallel ausgeführt werden können Perez-Otuno Rodrigo Kühnal Andrej

Thread Was ist Thread? Was ist Thread? Thread = leichtgewichtiger Prozess = Prozess, der sich mit anderen den gleichen Adressbereich(bzw. die gleiche Ausführungsumgebung) teilt = sequentieller "Kontrollflussfaden" innerhalb eines Programms Perez-Otuno Rodrigo Kühnal Andrej

Threads Beispiele „Parallele Programmierung“ mit Java threads mit Java threads Mit Threads++ Mit Threads++ Shared Memory interface Open MP Open MP Windows NT Windows NT Perez-Otuno Rodrigo Kühnal Andrej

Java Threads Für die Anwendung von „Shared Memory“ brauchen wir die grundlegenden Synchronisationskonzepte Für die Anwendung von „Shared Memory“ brauchen wir die grundlegenden Synchronisationskonzepte In Java gibt es eine Basisklasse java.lang.Thread, die einen fertigen Thread darstellt In Java gibt es eine Basisklasse java.lang.Thread, die einen fertigen Thread darstellt Perez-Otuno Rodrigo Kühnal Andrej

Thread ++ A New Solution to the Multi-threading Dilemma Eine C++ Klassenbibliothek, die den Umgang mit den POSIX- Threads durch die Einbettung in Klassen erleichtern soll Aktuelle Fehler hat Entwickler gezwungen zwischen 2 Optionen zu wählen: 1. threads anwenden um die Effizienz und Ausführung zu verbessern 2. versichern dass die Anwendungen betriebssicher sind Perez-Otuno Rodrigo Kühnal Andrej

Threads++ Threads++ löst dieses Dilemma indem es die Entwickler der multithreaded applications erlaubt diese Anwendung gründlich zu testen – ebenso wie die threads- mit einem state-of-the- art automatic runtime error-detection tool. Threads++ löst dieses Dilemma indem es die Entwickler der multithreaded applications erlaubt diese Anwendung gründlich zu testen – ebenso wie die threads- mit einem state-of-the- art automatic runtime error-detection tool. Perez-Otuno Rodrigo Kühnal Andrej

Open MP Application Program Interface(API) OpenMP hat sich kürzlich als ein Industirestandard interface für shared memory Programmierungen über parallele Computeranwendungen OpenMP hat sich kürzlich als ein Industirestandard interface für shared memory Programmierungen über parallele Computeranwendungen unterstützt multi-platform shared-memory parallel programming in C/C++ und Fortran unterstützt multi-platform shared-memory parallel programming in C/C++ und Fortran Perez-Otuno Rodrigo Kühnal Andrej

Open MP In allen Architekturen, einschließlich Unix platforms und Windows NT platforms In allen Architekturen, einschließlich Unix platforms und Windows NT platforms Es ist ein portable, scalable Modell, welches shared- memory-Programmierern ein einfaches und flexibles Interface ermöglicht um parallele Anwendungen für Plattformen (vom Desktop bis zum Supercomputer) zu entwickeln Es ist ein portable, scalable Modell, welches shared- memory-Programmierern ein einfaches und flexibles Interface ermöglicht um parallele Anwendungen für Plattformen (vom Desktop bis zum Supercomputer) zu entwickeln Perez-Otuno Rodrigo Kühnal Andrej

Beispiel #include #include main () { int nthreads, tid; { int nthreads, tid; #pragma omp parallel private(nthreads, tid) {tid = omp_get_thread_num(); {tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); printf("Hello World from thread = %d\n", tid); if (tid == 0) if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } } Perez-Otuno Rodrigo Kühnal Andrej

 Distributed Memory  Einfürung  Aufteilung einer Aufge. (parallelisierung Ansatz)  MPI + PVM (SMPD Programmiermodel)  MPI programmier beispiele:  Bibiiothek initialisieren  Aufruf der MPI Funktionen SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej Distributed Memory Architecture

SWE SS04. Paralleles Programmieren. Memory 1 CPU 1 Rechner 1 Memory 2 CPU 2 Rechner 2 ………….. weitere Rechner ………….. netzwerk Einzelrechnern mit jeweils eigenem Hauptspeicher mit einem Netzwerk für Kommunikation miteinander verbunden  Relativ preiswerte Hardware (im vgl. zu SMP systemen)  Gut skalierbar  Gesamtarbeitspeicher fast beliebig gross - Kein direkter Zugriff auf die Gesamtdaten  zeitaufwendige kommunication - Aufwendig beim programmieren, debugen - speziele bibliotheken notwendig Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

netzwerk SWE SS04. Paralleles Programmieren. ………….. weitere Rechner ………….. Memory 1 CPU 1 Memory 23 CPU 23 Programmierer ist für die Synchronisation und Kommunikation zwischen unterschiedlichen Prozessen zustaendich. Es gibt aber Hilfsbibliotheken und Tools die, das Parralele Programieren für Distributed Memory Systemme erleichtern. Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

SWE SS04. Paralleles Programmieren.  PVM – Parallel Virtual Machine Ist ein Programmpaket, das es erlaubt, ein Netzwerk von heterogenen Rechnern als einen virtuellen parallelen Rechner zu benutzen. -Es ist eine einheitliche, portable Programmierbibliothek die es Programmen erlaubt Nachrichten auszutauschen. -Unterstuetzte sprachen sind C,C++,Fortran und (inofiziel) Java.  MPI – Message passing interface Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

MPI – Message passing interface SWE SS04. Paralleles Programmieren. Das Programm ist in einer gewönliche Sprache geschrieben (C, C++, Fortran) Beteiligte Prozesse benutzen nur lokalen Speicher Datenaustausch zwischen den Prozessen erfolgt über Nachrichtenaustausch (Send/Recv) Das gleiche Programm wird auf jeder Maschine ausgeführt SPMD - Single Program Multiple Data Memory 1 CPU 1 Memory 2 CPU 2 Memory 3 CPU 3 netzwerk hello_mpi.c Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

SWE SS04. Paralleles Programmieren. #include "mpi.h" int main(int argc, char* argv[] ){... // System initialisiert MPI_Init(); // jeder Knoten hat eine eindeutige Nummer // MPI-Funktionen koennen benutzt werden.... MPI_Finalize(); // MPI wurde auf allen Knoten gestoppt } MPI – Message passing interface bash# mpicc hello_mpi.c –o hello_mpi Perez-Otuno Rodrigo Kühnal Andrej Distributed Memory Architecture

SWE SS04. Paralleles Programmieren. #include "mpi.h" int main (int argc, char* argv[]) { // variblen declaration int myID; int numprocs; int myChromosome[1024][1024][1024]; // System initialisiert MPI_Init(); // MPI aufrufe MPI_Comm_rank ( MPI_COMM_WORLD, &myID ); MPI_Comm_size ( MPI_COMM_WORLD, &numprocs ); MPI_Finalize(); // MPI wurde auf allen Knoten gestoppt } MPI – Message passing interface bash# mpirun –np 23 hello_mpi Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

netzwerk SWE SS04. Paralleles Programmieren. ………….. weitere Rechner ………….. Memory 1 myid=0; numprocs=23 CPU 1 Memory 1 myid=22; numprocs=23 CPU 1 Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

SWE SS04. Paralleles Programmieren. Glossar 1 Perez-Otuno Rodrigo Kühnal Andrej SISD (single instruction stream, single data stream ) - Einen Prozessor und bearbeitet damit jeweils nur einen Befehl zur Zeit, erzeugt also auch nur einen Strom von Daten. SIMD (single instruction stream, multiple data stream ) - Mehrere Prozessoren führen jeweils denselben Befehl auf unterschiedlichen Daten aus MIMD (multiple instruction stream, multiple data stream) - mehrere Prozessoren führen unterschiedliche Befehle auf unterschiedlichen Daten aus SPMP (single program, multiple data ) - wobei jeder Prozessor das selbe Programm auf unterschiedlichen Daten ausführt. - Datenaustausch zwischen den Prozessen erfolgt über Nachrichtenaustausch SMP (Symmetric Multi Processing) - Arbeitet ein Rechner mit mehr als einem Prozessor, spricht man von einem Multiprozessor- oder Multiprocessing - System. Solche Systeme benutzen Shared Memory Speicher Model. MPI(Message Passing Interface) PVM(Parralell virtual maschine ) - PVM und MPI sind Softwarebibliotheken, die erlauben Message Passing Parallel programme zu schreiben, die an eim Cluster ausgeführt werden. Das sind hilfsbibliotheken für DIe Cluster programmierung. Die unterstützen als Distributed Memory Model auch Shared Memory Modell.

SWE SS04. Paralleles Programmieren. Glossar 2 Perez-Otuno Rodrigo Kühnal Andrej Thread - leichtgewichtiger Prozess. - erzeugen eines Threads ist schneller als erzeugen eines Process - Nebenläfige Threads von einem Prozess laufen im gleichen Adressraum. - Nebenläfige Prozesse laufen in unterschidlichen Adressräumen. Shared Memory - alle Prozessoren arbeiten mit einem gemeintsammen Speicher - Speicher zugriffe müssen synchronisiert werden Disributed Memory - Distributed Memory Systeme bestehen aus mehreren Einzelrechnern mit jeweils eigenem Hauptspeicher und Betriebssystem. - Jedes CPU kann nur auf eigene Speicher dierkt zugreifen - Zugriff auf Speicer eines anderen CPU erfolgt über das Netzwerk Hybrid Memory (Shared Memory + Disributed Memory) - Shared Memory Systeme werden mit einem netzwerk zu einem Cluser verbunden Cluster - In einem Cluster werden mehrere Rechner parallel zusammengeschaltet und arbeiten zusammen an der gleichen Arbeit. Das ist Disributed Memory System oder Hybrid Memory System.

SWE SS04. Paralleles Programmieren. Literatur Perez-Otuno Rodrigo Kühnal Andrej SIMD MPI Genforschung Glossar