Revision history for ParallelRechner


Revision [14910]

Last edited on 2013-01-15 19:42:58 by ToBo
Additions:
[[HPC2008]]


Revision [14807]

Edited on 2013-01-07 11:17:36 by ToBo
Additions:
Rechnezentrumder Uni-Erlangen
http://www.rrze.fau.de/dienste/arbeiten-rechnen/hpc/


Revision [14117]

Edited on 2012-09-21 18:04:05 by ToBo
Additions:
Ergänzung 2012: Octave kann bis zu 2 Kerne standardmäßig bie Matrizenoperationen verwenden. Auf dem 4-Kerne-Prozessor laufen nur 2 CPUs auf vollast, aber immerhin!
Deletions:
Ergänzung 2012: Octave kann bis zu 2 Kerne standardmäßig bie Matrizenoperationen verwenden. Auf dem 4-Kerne prozessor laufen nur 2 CPUs auf vollast, aber immerhin!


Revision [14116]

Edited on 2012-09-21 18:02:50 by ToBo
Additions:
**[[Octave]]** soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und lernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: //This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM.// Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]. Das nur am Rande.
Ergänzung 2012: Octave kann bis zu 2 Kerne standardmäßig bie Matrizenoperationen verwenden. Auf dem 4-Kerne prozessor laufen nur 2 CPUs auf vollast, aber immerhin!
**MATLAB**-Implicit-Multiprocessing verwendet z.B. für die Sinus-Funktion, Logarithmus-Funktion oder die BLAS-Bibliothek (Basic Linear Algebra Subroutines) mehrere Threads um Rechnersysteme mit mehreren CPUs ohne Änderungen am Code auszunutzen! Wer mehr Beschleunigung aus MATLAB herausholen möchte, benötigt die Paralell-Toolbox und muss sich expliziter Anweisungen zur Parallelisierung von Rechenaufgaben bedienen.
Ergänzung 2012: MATLAB rechnet meine Matrizenoperation mitlerweile ohne spezieller Programmierung standardmäßig auf 4 Kernen meines i5. Danke!
**PelicanHPC**: Faszinierend: Während ich noch mein MPI-Cluster müshsam auf mehreren Rechnern von Null auf Basis von Debian installieren dürfte, kann man jetzt einfach eine PelicanHPC-CD in einen Recher schieben und dann über Netzwerk alle anderen Knoten booten und schon hat man einen Superrechner. Nichteinmal eine Stunde Einrichtungszeit, wenn man weiß was man tut und schon kann man Parallelrechen. Wahrscheinlich der schnellste Weg in den Genuß von Computerclustern zu kommen.
Deletions:
**Manchmal geht es auch etwas hausgebacken!** [[Octave]] soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und lernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: //This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM.// Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]. Das nur am Rande.
**MATLAB**-Implicit-Multiprocessing verwendet z.B. für die Sinus-Funktion, Logarithmus-Funktion oder die BLAS-Bibliothek (Basic Linear Algebra Subroutines) mehrere Threads um Rechnersysteme mit mehreren CPUs ohne Änderungen am Code auszunutzen! Wer mehr Beschleunigung aus MATLAB herausholen möchte, benötigt die Paralell-Toolbox und muss sich expliziter Anweisungen zur Parallelisierung von Rechenaufgaben bedienen.


Revision [13703]

Edited on 2012-05-02 12:15:13 by ToBo
Additions:
**[[MPI]]**, wenn es ein Cluster sein soll. Wenn die Rechenleistung dann noch nicht ausreicht, dann werden mehrere einfache Workstations oder spezielle Leistungsrechner (andere [[Mikroprozessor Prozessorarchitekturen]], Erweiterungen von oben) über ein Netzwerk zusammengeschaltet. Und los gehts! Nein leider nicht so schnell, dann ist MPI das Mittel der Wahl und quasi Standard.
Deletions:
**MPI**, wenn es ein Cluster sein soll. Wenn die Rechenleistung dann noch nicht ausreicht, dann werden mehrere einfache Workstations oder spezielle Leistungsrechner (andere [[Mikroprozessor Prozessorarchitekturen]], Erweiterungen von oben) über ein Netzwerk zusammengeschaltet. Und los gehts! Nein leider nicht so schnell, dann ist MPI das Mittel der Wahl und quasi Standard.


Revision [12351]

Edited on 2011-08-02 17:58:25 by ToBo
Additions:
**[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]]** (GPU) sind im Prinzip die neuen Grafikkarten, die eigentlich inzwischen ganze System zum Rechnen darstellen. Eigentlich auf spezielle Probleme ausgelegt, neigen Entwickler diese Leitungspakete für Lineare Algebra, numerische Simulationen in allen Bereichen etc. zu verwenden. Beispielanwendung: Optische Tomografie mit GPUs bei der Suche nach Tumoren: Auswertung in Minuten, anstatt in Stunden ([[ZeitschriftMedizinElektronik MEDIZIN+elektronik]], Heft xx/2011, S. 24).
[[http://en.wikipedia.org/wiki/GPGPU GPGPU]] steht für General-purpose computing on graphics processing units. Die große Tendenz, GPUs für diese Zwecke zu verwenden, wird wohl den Herstellern hoffentlich bereits als Marktlücke einleuchten.
Deletions:
**[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]]** (GPU) sind im Prinzip die neuen Grafikkarten, die eigentlich inzwischen ganze System zum Rechnen darstellen. Eigentlich auf spezielle Probleme ausgelegt, neigen Entwickler diese Leitungspakete für Lineare Algebra, numerische Simulationen in allen Bereichen etc. zu verwenden. [[http://en.wikipedia.org/wiki/GPGPU GPGPU]] steht für General-purpose computing on graphics processing units. Die große Tendenz, GPUs für diese Zwecke zu verwenden, wird wohl den Herstellern hoffentlich bereits als Marktlücke einleuchten.


Revision [12099]

Edited on 2011-06-16 03:43:54 by ToBo
Additions:
[[VortragParallelrechner Vortrag]]


Revision [11304]

Edited on 2010-12-30 17:05:22 by ToBo
Additions:
In die Vorlesung Parallelrechner bin ich mit der Vorstellung reingegangen, meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten zu können.
==a==Vorwort==a==
**Die Illusion** hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein System, so dass wir unsere Programme beschleunigt in einem Cluster oder Multiprozessor-Rechner laufen lassen können. Eine Ausnahme bietet hier das unten beschriebene MATLAB-Implicit-Multiprocessing. Generell, und vor allem dann, wenn es um rechnerische Höchstleistungen geht, müssen Programme mit einer ordentlichen Portion Sorgfalt und viel Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden.
**Der Standard** der sich in der Klasse der des High-End-Parallelrechnens durchgesetzt hat, ist die Parallelrechner-Bibliothek [[Mpi MPI]]. Es wird in der [[C Programmiersprache C]] programmiert und es wird das Betriebssystem [[OsLinux]] oder allgemein etwas Unix-basierendes verwendet. Mehrere Rechner sind über ein schnelles Netzwerk verbunden.
==a==Parallelrechentechnologien im Überblick==a==
MPI ist nicht automatisch das beste! Nicht immer müssen es mehrere Rechner sein. Mehrere CPUs sind Standard. GPUs und FPGA-Karten erobern den Markt. SSE gibt es schon länger. Und am schönsten macht es, meiner meinung nach, Mathworks mit dem MATLAB-Implicit-Multiprocessing. Nachfolgend ein kurzer Überblick der Technologien.
**Die Kombination** dieser Technologien ist bereits Verbreitet und es liegt nahe sich darüber Gedanken zu machen. Am besten versucht man auf einem Cluster aus vernetzten Multiprozessorrechnern mit jeweils mehreren CPUs, FPGA-Karten und mehreren GPUs, unter Verwendung der SSE zu Rechnen und verwendet dafür die Bibliotheken OpenMP und [[Mpi MPI]], um das letzte Teraflop herauszukitzeln. Aber wie sieht dann der Code aus? Ist er noch gut lesbar und gut zu pflegen. Wie ist die Fehlersuche? Wie schnell ist die Entwicklung?
Deletions:
==a==Technologien im Überblick==a==
In die Vorlesung Parallelrechner bin ich mit der Vorstellung reingegangen, meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten zu können. Beispielsweise könnte der [[ProjektOrbit Simulator der Himmelskörperdynamik]] einen kleinen Schub bekommen.
**Die Illusion** hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, so dass wir unsere Programme beschleunigt in einem Cluster oder Multiprozessor-Rechner laufen lassen können. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden meist Linux-Systeme oder allgemein auf Unix basierende Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
Fazit: Am besten versucht man auf einem Cluster aus vernetzten Multiprozessorrechnern mit jeweils mehreren FPGA-Karten und mehreren GPUs, unter Verwendung der SSE zu Rechnen und verwendet dafür die Bibliotheken OpenMP und [[Mpi MPI]], um das letzte Teraflop herauszukitzeln. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;) Aber wie sieht dann der Code aus? Wie ist die Entwicklung und die Feherquote?
Anspruchsvolle Kompiler müssen her, aber bis dahin lautet das Gesetz OpenMP und [[Mpi MPI]].


Revision [11303]

Edited on 2010-12-30 16:00:40 by ToBo
Additions:
**MATLAB**-Implicit-Multiprocessing verwendet z.B. für die Sinus-Funktion, Logarithmus-Funktion oder die BLAS-Bibliothek (Basic Linear Algebra Subroutines) mehrere Threads um Rechnersysteme mit mehreren CPUs ohne Änderungen am Code auszunutzen! Wer mehr Beschleunigung aus MATLAB herausholen möchte, benötigt die Paralell-Toolbox und muss sich expliziter Anweisungen zur Parallelisierung von Rechenaufgaben bedienen.


Revision [11255]

Edited on 2010-11-25 18:09:23 by ToBo
Additions:
[[ParallelrechnerBeispielkonfigurationen Beispielkonfigurationen für Parallelrechner]]


Revision [9131]

Edited on 2009-06-30 16:33:08 by ToBo
Additions:
==a==Inhalt der besuchten Vorlesung==a==
Prof. Nowak
Das Gesetz von Amdahl und [[http://en.wikipedia.org/wiki/Gustafson%27s_law Gustavson-Barsis]] (Mehr dazu lesen in [Queen] oder
Deletions:
==a==Inhalt der Vorlesung==a==
==a==Prüfung==a==
Praxisorientiert mit Fokus auf MPI
~- Grundbegriffe von Parallelrechnern
~~- Nachrichtengekoppelt
~~- Speichergekoppelt
~- Statische Verbindungsnetzwerke
~~- Metriken
~~- Fragen zu Topologien: Eine Topologie wird gezeigt und es sollen Metriken über Formeln berechnet werden
~~-Herleitung von Metriken anhand neuer einfacher Topologie
~- Codeabschnitte
~- Beispiele aus dem Online Learning System
~- Leistungsbewertung
~~- Das Gesetz von Amdahl und [[http://en.wikipedia.org/wiki/Gustafson%27s_law Gustavson-Barsis]] (Mehr dazu lesen in [Queen] oder Internet)
~- MPI
~~- Mit dem Standard auseinadersetzen
~~- MPI_Send und MPI_Recv verstanden
~~- MPI-Code verstehen/erklären/ergänzen/verifizieren
~~- Wann ist es sinnvoll MPI enizusätzen
~- OpenMP
~~- Wann ist es sinnvoll OpenMP enzusätzen
~- Allgemeine Fragen zu Bibliotheken für Parallelrechner (drei Sätze)

Hilfsmittel: Lehrbrief (MPI-Funktionsaufrufe korrigieren, teilweise fehlerhaft)


Revision [9130]

Edited on 2009-06-30 16:29:52 by ToBo
Additions:
[[http://www.bmbf.de/press/2558.php Schavan: "Europas schnellster Rechner sorgt für Innovation"]] (Pressemitteilung, 26.05.2009)


Revision [9090]

Edited on 2009-06-30 04:47:16 by ToBo
Additions:
**[[distcc]]** erlaubt verteiltes Compilieren auf mehreren Rechnern.


Revision [8019]

Edited on 2009-03-05 00:33:24 by ToBo
Additions:
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **[[SIMD SSE]]** von Intel oder das aus meiner Sicht schwächere **3DNow!** von AMD lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So kann Beispielsweise mit SSE eine Operation (Addition, Multiplikation, Quadratwurzeln etc.) auf vier Gleitkommazahlen (einfacher Genauigkeit, in C "float") gleichzeitig mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von Faktor 2.5 (wie in einem meiner [[GccMitSsePerformanceTest Beispiele]] gezeigt) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++. Der Intel-Kompiler sollte hier natürlich noch mehr rausholen.
Deletions:
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **[[SIMDIntels SSE]]** oder das aus meiner Sicht schwächere **3DNow!** von AMD lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So kann Beispielsweise mit SSE eine Operation (Addition, Multiplikation, Quadratwurzeln etc.) auf vier Gleitkommazahlen gleichzeitig mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von Faktor 2.5 (wie im [[GccMitSsePerformanceTest Beispiel]] gezeigt) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++. Der Intel-Kompiler sollte hier natürlich noch mehr rausholen.


Revision [7903]

Edited on 2009-02-22 00:30:51 by ToBo
Additions:
Artikel //Parallel-Programmierung mit bekannten Mitteln// auf [[http://www.elektroniknet.de/home/embeddedsystems/fachwissen/uebersicht/software/entwicklungssoftware/parallel-programmierung-mit-bekannten-mitteln/ elektroniknet.de]].


Revision [7816]

Edited on 2009-02-12 02:53:57 by ToBo
Additions:
==a==Technologien im Überblick==a==
Es gibt natürlich auch Nachrichten-gekoppelte Architekturen, also mehrere Workstations im Cluster, die wiederum aus Rechnern mit Speicher-gekoppelt Architekturen bestehen, also mit mehreren CPUs. Eigentlich gibt es viele davon.
Deletions:
==a==Vorwort==a==
Es gibt natürlich auch Nachrichten-gekoppelte Architekturen, also mehrere Workstations im Cluster, die wiederum aus Rechner mit Speicher-gekoppelt Architekturen bestehen, also mit mehreren CPUs. Eigentlich gibt es viele davon.


Revision [7815]

Edited on 2009-02-12 02:51:24 by ToBo
Additions:
In die Vorlesung Parallelrechner bin ich mit der Vorstellung reingegangen, meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten zu können. Beispielsweise könnte der [[ProjektOrbit Simulator der Himmelskörperdynamik]] einen kleinen Schub bekommen.
**Die Illusion** hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, so dass wir unsere Programme beschleunigt in einem Cluster oder Multiprozessor-Rechner laufen lassen können. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden meist Linux-Systeme oder allgemein auf Unix basierende Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
**Threads** sind nichts ungewöhnliches. Neben dem eigentlichen Gedanke ganze Programme in kleinen Scheibchen auf einen Prozessor laufen zu lassen, spielen Threads freilich eine neue Rolle seit dem die Mulitiprozessor-Rechner mit speichergekoppelten Architekturen auf dem Markt sind. Mehrere CPUs in einem System sind zwar gut, aber ein altes Programm läuft i.d.R. auf einer CPU. Klar läuft nicht nur ein Programm auf einem PC, aber was tun, wenn ein bestimmtes Programm möglichst die volle Rechenleistung ausschöpfen soll. Können die rechenintensiven Programmteile auf Threads aufgeteilt werden, so können diese jeweils einer CPU zugeordnet werden. Und schon wird die Last verteilt. Das ist der Anfang, aber selten ist das optimal. Viel besser und effizient in Hinblick auf die Entiwcklungszeit geht das mit OpenMP. Aber nur bei speichergekoppelten Rechnern (Multiprozessor-Rechner) - auf Clustern (über Netzwerk gekoppelt) nicht möglich.
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **[[SIMDIntels SSE]]** oder das aus meiner Sicht schwächere **3DNow!** von AMD lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So kann Beispielsweise mit SSE eine Operation (Addition, Multiplikation, Quadratwurzeln etc.) auf vier Gleitkommazahlen gleichzeitig mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von Faktor 2.5 (wie im [[GccMitSsePerformanceTest Beispiel]] gezeigt) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++. Der Intel-Kompiler sollte hier natürlich noch mehr rausholen.
Deletions:
In die Vorlesung Parallelrechner bin ich mit der Vorstellung reingegangen, meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten zu können. Beispielsweise mein [[ProjektOrbit Simulator der Himmelskörperdynamik]] könnte einen kleinen Schub in der Simulation bekommen.
**Die Illusion** hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, so dass wir unsere Programme beschleunigt in einem Cluster oder Multiprozessor-Rechner laufen lassen können. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden miest Linux oder Unix-ähnliche Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
**Threads** sind nichts ungewöhnliches. Neben einigen Aspekten, die ein gutes Programmkonzept erlauben, spielen Threads freilich eine Rolle seit dem die speichergekoppelten Rechner auf dem Markt sind. Mehrere CPUs in einem System sind zwar gut, aber ein Programm läuft auf einer CPU. Klar läuft nicht nur ein Programm auf einem PC, aber was tun, wenn ein bestimmtes Programm möglichst die volle Rechenleistung ausschöpfen soll. Können die rechenintensiven Programmteile auf Threads aufgeteilt werden, so können diese jeweils einer CPU zugeordnet werden. Und schon wird die Last verteilt. Das ist der selten Anfang, aber selten ist das optimal und besser geht das mit OpenMP. Aber nur bei speichergekoppelten Rechnern (Multiprozessor-Rechner) - auf Clustern (über Netzwerk gekoppelt) nicht möglich.
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **[[SIMDIntels SSE]]** oder das aus meiner Sicht schwächere **3DNow!** von AMD lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So kann Beispielsweise mit SSE eine Operation (Addition, Multiplikation, Quadratwurzeln etc.) auf vier Gleitkommazahlen gleichzeitig mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von Faktor 2.5 (wie im [[GccMitSsePerformanceTest Beispiel]] gezeigt) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++. Der Intel-Kompiler sollte hier natürlich trumpfen.


Revision [7793]

Edited on 2009-02-07 01:59:39 by ToBo
Additions:
Parallel Computing
http://cnx.org/content/m18099/latest/


Revision [7746]

Edited on 2009-02-04 03:05:29 by ToBo
Additions:
**[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]]** (GPU) sind im Prinzip die neuen Grafikkarten, die eigentlich inzwischen ganze System zum Rechnen darstellen. Eigentlich auf spezielle Probleme ausgelegt, neigen Entwickler diese Leitungspakete für Lineare Algebra, numerische Simulationen in allen Bereichen etc. zu verwenden. [[http://en.wikipedia.org/wiki/GPGPU GPGPU]] steht für General-purpose computing on graphics processing units. Die große Tendenz, GPUs für diese Zwecke zu verwenden, wird wohl den Herstellern hoffentlich bereits als Marktlücke einleuchten.
Deletions:
[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]] (GPU) sind im Prinzip die neuen Grafikkarten, die eigentlich inzwischen ganze System zum Rechnen darstellen. Eigentlich auf spezielle Probleme ausgelegt, neigen Entwickler diese Leitungspakete für Lineare Algebra, numerische Simulationen in allen Bereichen etc. zu verwenden. [[http://en.wikipedia.org/wiki/GPGPU GPGPU]] steht für General-purpose computing on graphics processing units. Die große Tendenz, GPUs für diese Zwecke zu verwenden, wird wohl den Herstellern hoffentlich bereits als Marktlücke einleuchten.


Revision [7745]

Edited on 2009-02-03 23:58:36 by ToBo
Additions:
**MPI**, wenn es ein Cluster sein soll. Wenn die Rechenleistung dann noch nicht ausreicht, dann werden mehrere einfache Workstations oder spezielle Leistungsrechner (andere [[Mikroprozessor Prozessorarchitekturen]], Erweiterungen von oben) über ein Netzwerk zusammengeschaltet. Und los gehts! Nein leider nicht so schnell, dann ist MPI das Mittel der Wahl und quasi Standard.
Deletions:
**MPI**, wenn es ein Cluster sein soll. Wenn die Rechenleistung dann noch nicht ausreicht, dann werden mehrere einfache Workstations oder spezielle Leistungsrechner (andere [[ProzessorArchitektur Prozessorarchitekturen]], Erweiterungen von oben) über ein Netzwerk zusammengeschaltet. Und los gehts! Nein leider nicht so schnell, dann ist MPI das Mittel der Wahl und quasi Standard.


Revision [7744]

Edited on 2009-02-03 23:57:40 by ToBo
Additions:
**Threads** sind nichts ungewöhnliches. Neben einigen Aspekten, die ein gutes Programmkonzept erlauben, spielen Threads freilich eine Rolle seit dem die speichergekoppelten Rechner auf dem Markt sind. Mehrere CPUs in einem System sind zwar gut, aber ein Programm läuft auf einer CPU. Klar läuft nicht nur ein Programm auf einem PC, aber was tun, wenn ein bestimmtes Programm möglichst die volle Rechenleistung ausschöpfen soll. Können die rechenintensiven Programmteile auf Threads aufgeteilt werden, so können diese jeweils einer CPU zugeordnet werden. Und schon wird die Last verteilt. Das ist der selten Anfang, aber selten ist das optimal und besser geht das mit OpenMP. Aber nur bei speichergekoppelten Rechnern (Multiprozessor-Rechner) - auf Clustern (über Netzwerk gekoppelt) nicht möglich.
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **[[SIMDIntels SSE]]** oder das aus meiner Sicht schwächere **3DNow!** von AMD lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So kann Beispielsweise mit SSE eine Operation (Addition, Multiplikation, Quadratwurzeln etc.) auf vier Gleitkommazahlen gleichzeitig mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von Faktor 2.5 (wie im [[GccMitSsePerformanceTest Beispiel]] gezeigt) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++. Der Intel-Kompiler sollte hier natürlich trumpfen.
**FPGA-basierte Co-Prozessorkarten** entlasten den Hauptprozessor und lassen sich individuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC, Quadratwurzeln etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des FPGA-basierten Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Den die Befehle werden selbst entworfen. Die Hardware wird sozusagen mit Software beschrieben. Und das ist wie bei Assembler und Java. Langwierig zu entwickeln resp. nicht besonders Effektiv. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
AMD stellt eine Plattform "onboard", die gleich mehrere Möglichkeiten für die Einbindung des FPGA bietet. Zur Auswahl steht das direkte Auflöten des FPGA, der Anschluss über einen HTx-Steckplatz oder die Nutzung eines der CPU-Sockel auf einer der Multiprozessor-Platinen. [[http://www.elektroniknet.de/home/bauelemente/fachwissen/uebersicht/aktive-bauelemente/programmierbare-logikasics/fpga-coprozessoren-in-amd64-systemen/ FPGA-Coprozessoren in AMD64-Systemen]]. Was macht die CPU in Zukunft dann noch? Leerlaufprozess auf 99 %? Immerhin etwas!
**MPI**, wenn es ein Cluster sein soll. Wenn die Rechenleistung dann noch nicht ausreicht, dann werden mehrere einfache Workstations oder spezielle Leistungsrechner (andere [[ProzessorArchitektur Prozessorarchitekturen]], Erweiterungen von oben) über ein Netzwerk zusammengeschaltet. Und los gehts! Nein leider nicht so schnell, dann ist MPI das Mittel der Wahl und quasi Standard.
**Manchmal geht es auch etwas hausgebacken!** [[Octave]] soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und lernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: //This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM.// Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]. Das nur am Rande.
Fazit: Am besten versucht man auf einem Cluster aus vernetzten Multiprozessorrechnern mit jeweils mehreren FPGA-Karten und mehreren GPUs, unter Verwendung der SSE zu Rechnen und verwendet dafür die Bibliotheken OpenMP und [[Mpi MPI]], um das letzte Teraflop herauszukitzeln. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;) Aber wie sieht dann der Code aus? Wie ist die Entwicklung und die Feherquote?
Anspruchsvolle Kompiler müssen her, aber bis dahin lautet das Gesetz OpenMP und [[Mpi MPI]].
Deletions:
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So können Beispielsweise mit SSE vier Operationen (Addition, Multiplikation, Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++.
**FPGA-basierte Co-Prozessorkarten** entlasten den Hauptprozessor und lassen sich individuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
AMD stellt eine Plattform die gleich mehrere Möglichkeiten für die Einbindung des FPGA bietet. Zur Auswahl steht das direkte Auflöten des FPGA, der Anschluss über einen HTx-Steckplatz oder die Nutzung eines der CPU-Sockel auf einer der Multiprozessor-Platinen.
[[http://www.elektroniknet.de/home/bauelemente/fachwissen/uebersicht/aktive-bauelemente/programmierbare-logikasics/fpga-coprozessoren-in-amd64-systemen/ FPGA-Coprozessoren in AMD64-Systemen]]
**Manchmal geht es einfacher!** [[Octave]] soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und lernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM. Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]
Fazit:
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils mehreren FPGA-Karten, jeweils mehreren GPUs, unter Verwendung der SSE zu Rechnen und verwendet dafür die Bibliotheken OpenMP und [[Mpi MPI]], um das letzte Teraflop herauszukitzeln. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)


Revision [7743]

Edited on 2009-02-03 23:14:52 by ToBo
Additions:
**SIMD** vergessen? Wenn es um Leistungssteigerung geht, sollte das nicht unerwähnt bleiben. Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor seit Pentium III möglich. So können Beispielsweise mit SSE vier Operationen (Addition, Multiplikation, Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon schnell eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]) ohne in Assembler abtauchen zu müssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++.
**FPGA-basierte Co-Prozessorkarten** entlasten den Hauptprozessor und lassen sich individuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]] (GPU) sind im Prinzip die neuen Grafikkarten, die eigentlich inzwischen ganze System zum Rechnen darstellen. Eigentlich auf spezielle Probleme ausgelegt, neigen Entwickler diese Leitungspakete für Lineare Algebra, numerische Simulationen in allen Bereichen etc. zu verwenden. [[http://en.wikipedia.org/wiki/GPGPU GPGPU]] steht für General-purpose computing on graphics processing units. Die große Tendenz, GPUs für diese Zwecke zu verwenden, wird wohl den Herstellern hoffentlich bereits als Marktlücke einleuchten.
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils mehreren FPGA-Karten, jeweils mehreren GPUs, unter Verwendung der SSE zu Rechnen und verwendet dafür die Bibliotheken OpenMP und [[Mpi MPI]], um das letzte Teraflop herauszukitzeln. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)
Deletions:
**SIMD** vergessen? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]) ohne in Assembler abtauchen zu m[ssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++.
**FPGA-basierte Co-Prozessorkarten** entlasten den Hauptprozessor und lassen sich idividuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]] (GPU)
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils FPGA-Karten und SSE zu Rechnen und verwendet dabei die Bibliotheken OpenMP und [[Mpi MPI]]. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)


Revision [7742]

Edited on 2009-02-03 22:55:41 by ToBo
Additions:
**SIMD** vergessen? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]) ohne in Assembler abtauchen zu m[ssen. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet hierfür spezielle Befehle in C und C++.
Deletions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]). Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!


Revision [7709]

Edited on 2009-02-01 21:26:46 by ToBo
Additions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest Beispiel]]). Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
[[http://en.wikipedia.org/wiki/Graphics_processing_unit Graphics processing unit]] (GPU)
==a==Parallelrechner gestern und heute==a==
Die ersten Parallelrechner gab es schon ein Jahrzehnt nach Einführung der Mikroprozessoren.
1983: [[http://de.wikipedia.org/wiki/Connection_Machine Connection Machine 1]] mit System mit bis zu 65536 1-Bit Prozessoren, speichergekoppelte Architektur, Hypercube-Verbindungsnetzwerk, Lösung von Problemen aus dem Bereich der Künstlichen Intelligenz
1987: [[http://de.wikipedia.org/wiki/Connection_Machine Connection Machine 2]] zusätzlich mit mit 2048 Koprozessoren Weitek 3132, für numerische Verfahren verwendet
1987: [[http://en.wikipedia.org/wiki/Intel_iPSC/2 Intel iPSC/2]] mit 16 Intel 80386-Prozessoren
Die Supercomputer heute:
Deletions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest
Beispiel]]). Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Die Supercomputer


Revision [7686]

Edited on 2009-01-31 01:52:16 by ToBo
Additions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Das bring schon eine Beschleunigung von 2,5 ([[GccMitSsePerformanceTest
Beispiel]]). Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils FPGA-Karten und SSE zu Rechnen und verwendet dabei die Bibliotheken OpenMP und [[Mpi MPI]]. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)
Deletions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils SSE und FPGA-Karten zu Rechnen. Mit Programmen, die extra dafür geschrieben sind. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)


Revision [7638]

Edited on 2009-01-29 00:02:37 by ToBo
Additions:
[[http://apps.lumii.lv/prolog-mpi/docs.html MPI and Prolog]]


Revision [7633]

Edited on 2009-01-28 23:56:30 by ToBo
Additions:
**SIMD** vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Deletions:
SIMD vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!


Revision [7632]

Edited on 2009-01-28 23:56:18 by ToBo
Additions:
In die Vorlesung Parallelrechner bin ich mit der Vorstellung reingegangen, meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten zu können. Beispielsweise mein [[ProjektOrbit Simulator der Himmelskörperdynamik]] könnte einen kleinen Schub in der Simulation bekommen.
**Die Illusion** hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, so dass wir unsere Programme beschleunigt in einem Cluster oder Multiprozessor-Rechner laufen lassen können. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden miest Linux oder Unix-ähnliche Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
SIMD vergessen oder bringt es nicht? Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie **Intels SSE** oder **AMDs 3DNow!** lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] schon auf einem Prozessor möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
**FPGA-basierte Co-Prozessorkarten** entlasten den Hauptprozessor und lassen sich idividuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
**Manchmal geht es einfacher!** [[Octave]] soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und lernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM. Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]
Fazit:
Am besten versucht man auf einem Cluster aus Multiprozessorrechnern mit jeweils SSE und FPGA-Karten zu Rechnen. Mit Programmen, die extra dafür geschrieben sind. Dann werden die Algorithmen so schnell, dass das Ergebnis schon vor der Eingabe verfügbar wird. Vielleicht nicht ganz so schnell. ;)
==a==Parllelrechnerarchitekturen==a==
Nachrichten-gekoppelt: Mehrere CPUs besitzen jeweils einen eigenen Speicher und kommunizieren über ein Verbindungsnetzwerk (z.B. Ethernet). --> Cluster aus Workstations.
Speicher-gekoppelt: Mehrere CPUs haben einen gemeinsamen Speicher un kommunizieren über ein sehr schnelles Verbindungsnetzwerk (Datenbus). --> Multiprozessorrechner
Es gibt natürlich auch Nachrichten-gekoppelte Architekturen, also mehrere Workstations im Cluster, die wiederum aus Rechner mit Speicher-gekoppelt Architekturen bestehen, also mit mehreren CPUs. Eigentlich gibt es viele davon.
Die Supercomputer
Zwei Bibliotheken im Fokus:
~-[[Mpi MPI]] ist ein Standard, der beschreibt, wie Nachrichten und Daten zwischen Rechnern oder Prozessoren zur Parallelverarbeitung ausgetauscht werden können. Es gibt verschiedene Implementierungen (MPICH2, LAM/MPI, OpenMPI). Läuft auf Nachrichten-gekoppelten und Speicher-gekoppelten Parllelrechnerarchitekturen. Umständiger in der Programmierung als OpenMP. Für ein Cluster aus mehreren Rechnern wohl das Beste.
~-OpenMP ist nicht nur eine Bibliothek, es erweitert die Funktionalität des Compilers so, dass ein Programm in mehrere Threads aufgeteilt werden kann. Läuft nur auf Speicher-gekoppelten Parllelrechnerarchitekturen! Also nichts für Cluster. Hauptsächlich nur auf Schleifen aufwendbar. Meiner Ansicht nach die beste Alternative um aus einem __Multiprozessorrechner__ mit __möglichst wenig Aufwand__ viel herauszuholen. Effizient! Die gleichen Programme laufen übrigens auch auf Rechner mit einer CPU.
Deletions:
In die Vorlesung Parallelrechner bin ich mit der Vorstellung gegangen, dass ich schließlich meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten kann. Beispielsweise mein [[ProjektOrbit Simulator der Himmelskörperdynamik]] könnte einen kleinen Schub bekommen.
Die Illusion hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, die unsere Programme beschleunigt laufen lassen. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden miest Linux oder Unix-ähnliche Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Octave soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und duzulernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM. Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]
FPGA-basierte Co-Prozessorkarten entlasten den Hauptprozessor und lassen sich idividuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
==a==Links zum Thema Parallelrechner==a==
~-[[Mpi MPI]] ist ein Standard, der beschreibt, wie Nachrichten und Daten zwischen Rechnern oder Prozessoren zur Parallelverarbeitung ausgetauscht werden können. Es gibt verschiedene Implementierungen (MPICH2, LAM/MPI, OpenMPI)
~-OpenMP erweitert die Funktionalität des Compilers so, dass ein Programm in mehrere Threads aufgeteilt werden kann.
Speichergekoppelte Parallerechner (Voraussetzung für OpenMP)
Nachrichtengekoppelte Parallerechner (Prinzip von [[Mpi MPI]])


Revision [7631]

Edited on 2009-01-28 23:25:21 by ToBo
Additions:
FPGA-basierte Co-Prozessorkarten entlasten den Hauptprozessor und lassen sich idividuell Konfigurieren. Warum nicht eigene Prozessor-Befehle entwerfen? Die einfachen Befehle (ADD, MUL, MAC etc.), die Befehle des Koprozessor, selbst die SSE oder 3DNow! und sogar neue Grafikkarten stehen im Schatten, wenn ein Befehl des Coprozessors ganze 3D-Szenen berechnet oder einen ganzen Text im Speicher entschlüsselt, ohne die CPU zu belasten. Die Möglichkeiten FPGA-basierter Co-Prozessorkarten sind gewaltig! Aber die Programmierer werden hier vorerst noch eine Menge dazulernen müssen. Das kann dauern, bis es so richtig los geht. Die Technologie ist jetzt schon da.
http://www.elektroniknet.de/home/bauelemente/fachwissen/uebersicht/aktive-bauelemente/programmierbare-logikasics/aufbau-einer-fpga-basierten-co-prozessorkarte/
AMD stellt eine Plattform die gleich mehrere Möglichkeiten für die Einbindung des FPGA bietet. Zur Auswahl steht das direkte Auflöten des FPGA, der Anschluss über einen HTx-Steckplatz oder die Nutzung eines der CPU-Sockel auf einer der Multiprozessor-Platinen.
[[http://www.elektroniknet.de/home/bauelemente/fachwissen/uebersicht/aktive-bauelemente/programmierbare-logikasics/fpga-coprozessoren-in-amd64-systemen/ FPGA-Coprozessoren in AMD64-Systemen]]


Revision [7585]

Edited on 2009-01-23 00:17:58 by ToBo
Additions:
[[http://www.bsc.es/plantillaA.php?cat_id=492 Trace generation]]


Revision [7584]

Edited on 2009-01-23 00:05:34 by ToBo
Additions:
MPI und OpenMP - [[http://www.dartmouth.edu/~rc/classes/intro_mpi/parallel_prog_compare.html Pro und Contra]]


Revision [7552]

Edited on 2009-01-21 16:34:03 by ToBo
Additions:
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen (soweit ich mich erinnern kann Addition, Multiplikation, sogar Quadratwurzeln etc.) auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[SseMitGcc SEE mit GCC]]) - der GNU-Compiler bietet spezielle Befehle dafür!
Octave soll auch ohne Bibliotheken wie MPI und PVM auskommen, der Programmierer muss aber auch hier mehr tun und duzulernen. Debian Paket [[http://packages.debian.org/de/sid/octave-parallel octave-parallel]]: This is a package to add parallel computing functions to Octave. The parallel computing functions are supported __without__ any additional parallel computing libraries such as MPI and PVM. Siehe auch [[http://octave.sourceforge.net/doc/funref_parallel.htm Octave-Forge - Package parallel]]
Deletions:
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[http://www.linux-magazin.de/heft_abo/ausgaben/2003/08/vier_auf_einen_streich SSE mit GCC und Intel-Compiler]])!


Revision [7516]

Edited on 2009-01-18 23:23:51 by ToBo
Additions:
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze auch mit den gebräuchlichen Compilern unterstützt ([[http://www.linux-magazin.de/heft_abo/ausgaben/2003/08/vier_auf_einen_streich SSE mit GCC und Intel-Compiler]])!
Deletions:
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze von den gebräuchlichen Compilern nicht einmal genutzt!


Revision [7494]

Edited on 2009-01-18 02:33:51 by ToBo
Additions:
==a==Notizen zum Thema==a==
Software Paket PVM: [[http://www.csm.ornl.gov/pvm/ Parallel Virtual Machine]]
SISD: Single Instruction Single Data
MISD: Multiple Instruction Single Data
SIMD: [[SIMD Single Instruction Multiple Data]]
MIMD: Multiple Instruction Multiple Data
Speichergekoppelte Parallerechner (Voraussetzung für OpenMP)
Nachrichtengekoppelte Parallerechner (Prinzip von [[Mpi MPI]])
MPMD: Multiple Programm Multile Data, Jeder Prozessor führt ein anderes Programm aus.
SPMD: Single Programm Multile Data, Alle Prozessoren führen das gleiche Programm aus, das evtl. Abschnitte für verschiedene Aufgaben enthält. (Wird hier ausschließlich verwendet)
Deletions:
==a==Mehr zum Thema==a==
Parallel Virtual Machine (PVM)
http://en.wikipedia.org/wiki/Parallel_Virtual_Machine


Revision [7485]

Edited on 2009-01-17 23:12:24 by ToBo
Additions:
Die Illusion hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, die unsere Programme beschleunigt laufen lassen. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Dabei werden miest Linux oder Unix-ähnliche Systeme verwendet. Wie man in meinem einfachem Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
Deletions:
Die Illusion hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, die unsere Programme beschleunigt laufen lassen. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Wie man in Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.


Revision [7484]

Edited on 2009-01-17 22:39:49 by ToBo
Additions:
==a==Vorwort==a==
In die Vorlesung Parallelrechner bin ich mit der Vorstellung gegangen, dass ich schließlich meine Programme auf einem Cluster aus Linux-Rechnern beschleunigt starten kann. Beispielsweise mein [[ProjektOrbit Simulator der Himmelskörperdynamik]] könnte einen kleinen Schub bekommen.
Die Illusion hat uns Prof. Nowak gleich genommen. Es gebe kein Compiler-Flag oder ein virtuelles System, die unsere Programme beschleunigt laufen lassen. Die Programme müssen also mit gewisser Sorgfalt und etwas Kenntnis von dem verwendeten Standard (z.B. MPI oder OpenMP) und seiner Eigenarten umgeschrieben werden. Wie man in Beispiel MpiBeispielBalancing sehen kann, wird ein einfaches Programm komplizierter, aber schneller. Aber die Hoffnung stirbt zuletzt. Und solange die Hoffnung noch lebt, müssen wir unsere Programme gekonnt und mit feinster Sorgfalt in kleine verdauliche Scheibchen zerlegen und den Prozessoren servieren.
Ganz am Rande habe ich festgestellt, dass sich die Welt im Rahmen der Beschleunigung von rechenintensiven Programmen viel Gedanken um das Rechnen auf mehreren Prozessoren macht, aber von Technologien, wie Intels SSE oder AMDs 3DNow! lassen die Entwickler immer noch die Finger oder wissen nichts darüber. Dabei sind hier beachtliche Beschleunigungen durch Parallelverarbeitung mit [[SIMD]] möglich. So können Beispielsweise mit SSE vier Operationen auf Gleitkommazahlen mit einer Prozessoranweisung erschlagen werden. Unter Linux werden diese Befehlssätze von den gebräuchlichen Compilern nicht einmal genutzt!
~-[[Mpi MPI]] ist ein Standard, der beschreibt, wie Nachrichten und Daten zwischen Rechnern oder Prozessoren zur Parallelverarbeitung ausgetauscht werden können. Es gibt verschiedene Implementierungen (MPICH2, LAM/MPI, OpenMPI)
~-OpenMP erweitert die Funktionalität des Compilers so, dass ein Programm in mehrere Threads aufgeteilt werden kann.
Deletions:
Single Instruction Single Data (SISD)
Multiple Instruction Single Data (MISD)
Single Instruction Multiple Data (SIMD)
Multiple Instruction Multiple Data (MIMD)
~-[[Mpi MPI]]
~-OpenMP


Revision [7397]

Edited on 2009-01-11 13:28:41 by ToBo
Additions:
~~- Das Gesetz von Amdahl und [[http://en.wikipedia.org/wiki/Gustafson%27s_law Gustavson-Barsis]] (Mehr dazu lesen in [Queen] oder Internet)
Deletions:
~~- Das Gesetz von Amdahl und Gustavson-Barsis (Mehr dazu lesen in [Queen] oder Internet)


Revision [7396]

Edited on 2009-01-11 13:28:09 by ToBo
Additions:
==a==Bibliotheken==a==
==a==Mehr zum Thema==a==
Parallel Virtual Machine (PVM)
http://en.wikipedia.org/wiki/Parallel_Virtual_Machine
http://www.sorgonet.com/supercomputing/yourownsupercomputer/pvm.html
Deabin: aptitude search pvm
Deletions:
==a==MP und MPI==a==


Revision [7123]

Edited on 2008-12-19 02:08:29 by ToBo
Additions:
~~- Fragen zu Topologien: Eine Topologie wird gezeigt und es sollen Metriken über Formeln berechnet werden
~~-Herleitung von Metriken anhand neuer einfacher Topologie
~~- MPI_Send und MPI_Recv verstanden
~~- MPI-Code verstehen/erklären/ergänzen/verifizieren
~~- Wann ist es sinnvoll MPI enizusätzen
~~- Wann ist es sinnvoll OpenMP enzusätzen
Hilfsmittel: Lehrbrief (MPI-Funktionsaufrufe korrigieren, teilweise fehlerhaft)
Deletions:
~~- Topologie wird gezeigt und wir berechnen die Metriken [ber die Formeln
~~- MPI_Send und MPI_Recv verstanden
~- Wann wäre es sinnvoll OpenMP
Skript in Prüfung erlaubt


Revision [7106]

Edited on 2008-12-18 02:26:20 by ToBo
Additions:
==a==Links zum Thema Parallelrechner==a==
~-http://www.top500.org/
~-http://de.wikipedia.org/wiki/Supercomputer
Deletions:
==a==Sonstiges==a==
http://www.mcs.anl.gov/research/projects/mpich2/
http://www.top500.org/
http://de.wikipedia.org/wiki/Supercomputer
http://de.wikipedia.org/wiki/Message_Passing_Interface
[[http://ci-tutor.ncsa.uiuc.edu/login.php Übungen]] für MPI und OpenMP


Revision [7105]

Edited on 2008-12-18 02:22:04 by ToBo
Additions:
[[http://ci-tutor.ncsa.uiuc.edu/login.php Übungen]] für MPI und OpenMP


Revision [7022]

Edited on 2008-12-11 01:49:01 by ToBo
Additions:
Single Instruction Single Data (SISD)
Multiple Instruction Single Data (MISD)
Single Instruction Multiple Data (SIMD)
Multiple Instruction Multiple Data (MIMD)


Revision [6942]

Edited on 2008-12-08 01:45:23 by ToBo
Additions:
~-[[Mpi MPI]]
~-OpenMP
Deletions:
[[Mpi]]
OpenMP


Revision [6881]

Edited on 2008-12-07 17:16:09 by ToBo
Additions:
Praxisorientiert mit Fokus auf MPI
Deletions:
Praxisorientiert mit Fokus auf OpenMPI


Revision [6877]

Edited on 2008-12-07 17:13:22 by ToBo
Additions:
==a==MP und MPI==a==
Deletions:
==a==Implementierungen==a==
~-[[http://www.mcs.anl.gov/research/projects/mpich2/ MPICH2]] ist eine MPI-1- und MPI-2-Implementierung
~-[[http://www.open-mpi.org/ OpenMPI]] ist eine MPI-2-Implementierung eines Konsortiums von Partnern aus der akademischen Einrichtungen, Forschungseinrichtungen und der Industrie.
~-[[http://de.wikipedia.org/wiki/OpenMP OpenMP]] anders als der MPI-Standard. Mit Compiler-Anweisungen (pragma) wird Parallelverarbeitung realisiert. Am Anfang leichter, aber nicht ganz Problemfrei.


Revision [6864]

Edited on 2008-12-06 16:00:06 by ToBo
Additions:
~~- Nachrichtengekoppelt
~~- Speichergekoppelt
~~- Metriken
~~- Topologie wird gezeigt und wir berechnen die Metriken [ber die Formeln
~~- Das Gesetz von Amdahl und Gustavson-Barsis (Mehr dazu lesen in [Queen] oder Internet)
~~- Mit dem Standard auseinadersetzen
~~- MPI_Send und MPI_Recv verstanden
Deletions:
~~- Nachrichtengekoppelt
~~- Speichergekoppelt
~~- Metriken
~~- Topologie wird gezeigt und wir berechnen die Metriken [ber die Formeln
~~- Das Gesetz von Amdahl und Gustavson-Barsis (Mehr dazu lesen in [Queen] oder Internet)
~~- Mit dem Standard auseinadersetzen
~~- MPI_Send und MPI_Recv verstanden


Revision [6863]

Edited on 2008-12-06 15:59:51 by ToBo
Additions:
==a==Prüfung==a==
Praxisorientiert mit Fokus auf OpenMPI
~- Grundbegriffe von Parallelrechnern
~~- Nachrichtengekoppelt
~~- Speichergekoppelt
~- Statische Verbindungsnetzwerke
~~- Metriken
~~- Topologie wird gezeigt und wir berechnen die Metriken [ber die Formeln
~- Codeabschnitte
~- Beispiele aus dem Online Learning System
~- Leistungsbewertung
~~- Das Gesetz von Amdahl und Gustavson-Barsis (Mehr dazu lesen in [Queen] oder Internet)
~- MPI
~~- Mit dem Standard auseinadersetzen
~~- MPI_Send und MPI_Recv verstanden
~- OpenMP
~- Wann wäre es sinnvoll OpenMP
~- Allgemeine Fragen zu Bibliotheken für Parallelrechner (drei Sätze)

Skript in Prüfung erlaubt


Revision [6859]

Edited on 2008-12-06 15:07:51 by ToBo
Additions:
[[Mpi]]
OpenMP


Revision [6852]

Edited on 2008-12-06 14:47:05 by ToBo
Additions:
==a==Implementierungen==a==
Deletions:
==a==Erster Test==a==
Code test.c:
%%(c)
#include <stdio.h>
#include <mpi.h>
int main (int argc, char **argv)
{
int rank, size;
MPI_Init (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf ("Hello world from process %d, of %d\n.", rank, size);
MPI_Finalize();
return 0;
}
%%
Kompilieren
%%(bash)
gcc test.c -lmpi -o test
%%
Test:
%%
mpiexec -n 4 test
%%
%%
mpiexec -n 3 test.out
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,0]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,1]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,2]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
Hello world from process 1, of 3
Hello world from process 2, of 3
Hello world from process 0, of 3
%%
==a==Implementierung==a==
==a==Installation==a==
=a=unter Linux=a=
unter Linux
Quellen herunterladen
./com
make
make install
smpd -install
oder speziell unter Debian
für OpenMPI
aptitude install openmpi-dev openmpi-dbg
und MPICH2
aptitude install mpich-bin libmpich1.0-dev
aptitude install mpi-doc
=a= unter Windows=a=
unter Windows
MPI 1.0.8
.NET 2.0. SP1
gcc MINGW 32
A) .Net framework 2.0 installieren, falls nicht vorhanden (der MPICh installer startet nicht, wenn .net 2.0 fehlt):
dotnetfx.exe herunterladen und ausführen
B) .Net 2.0 Service pack 1 installieren:
NetFx20_SP1_x86 herunterladen und ausführen
C) MPICH2 installieren
MPICH2 für Windows 32bit herunterladen, ausführen
D) Gcc aus MingW installieren, falls kein anderer C-Compiler vorhanden. Die Installation der neuen Version 1.08 habe ich nur mit Gcc getestet. VisualC++ oder Borland sollten auch funktionieren
E) SMPD als Dienst installieren (smpd -h listet die Optionen):
smpd -install
smpd -register_spn
F) Suchpfad ergänzen (<MINGW_ROOT>/bin und <MPICH2_ROOT>/bin hinzufügen)
G) Das fertige Beispiel testen:
cd <MPICH2_ROOT>/examples
mpirun -n 4 cpi
==a==Vorbereitung==a==
~/.mpich2
%%
export PATH=/local/mpich2/bin:$PATH
export LD_LIBRARY_PATH=/local/mpich2/lib:$LD_LIBRARY_PATH
%%
%%(bash)
source ~/.mpich2
%%
Kompiliren
%%
mpicc cpi.c
%%
~/.mpd.conf
%%
MPD_SECRETWORD=...
%%
Rechte setzen
%%
chmod 600 ~/.mpd.conf
%%
HPC-Server
%%
mpd &
%%
%%
mpiexec -n 4 ~/mpi_ex/simple/spi
%%


Revision [6849]

Edited on 2008-12-06 14:41:19 by ToBo
Additions:
~-[[http://de.wikipedia.org/wiki/OpenMP OpenMP]] anders als der MPI-Standard. Mit Compiler-Anweisungen (pragma) wird Parallelverarbeitung realisiert. Am Anfang leichter, aber nicht ganz Problemfrei.


Revision [6845]

Edited on 2008-12-06 11:26:12 by ToBo
Additions:
aptitude install mpi-doc


Revision [6844]

Edited on 2008-12-06 10:55:48 by ToBo
Additions:
und MPICH2
Deletions:
alternativ für MPICH2


Revision [6843]

Edited on 2008-12-06 10:36:49 by ToBo
Additions:
~/.mpd.conf
MPD_SECRETWORD=...
Rechte setzen
chmod 600 ~/.mpd.conf


Revision [6842]

Edited on 2008-12-06 09:01:17 by ToBo
Additions:
~/.mpich2
source ~/.mpich2
Kompiliren
mpicc cpi.c
HPC-Server
mpd &
mpiexec -n 4 ~/mpi_ex/simple/spi


Revision [6841]

Edited on 2008-12-06 03:01:58 by ToBo
Additions:
aptitude install mpich-bin libmpich1.0-dev
Deletions:
aptitude install mpich-bin


Revision [6830]

Edited on 2008-12-06 02:34:04 by ToBo
Additions:
mpiexec -n 3 test.out
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,0]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,1]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
libibverbs: Fatal: couldn't read uverbs ABI version.
--------------------------------------------------------------------------
[0,1,2]: OpenIB on host localhost was unable to find any HCAs.
Another transport will be used instead, although this may result in
lower performance.
--------------------------------------------------------------------------
Hello world from process 1, of 3
Hello world from process 2, of 3
Hello world from process 0, of 3


Revision [6829]

Edited on 2008-12-06 02:13:32 by ToBo
Additions:
oder speziell unter Debian
für OpenMPI
alternativ für MPICH2
aptitude install mpich-bin
Deletions:
oder Debian


Revision [6828]

Edited on 2008-12-06 02:06:23 by ToBo
Additions:
==a==Implementierung==a==
~-[[http://www.mcs.anl.gov/research/projects/mpich2/ MPICH2]] ist eine MPI-1- und MPI-2-Implementierung
~-[[http://www.open-mpi.org/ OpenMPI]] ist eine MPI-2-Implementierung eines Konsortiums von Partnern aus der akademischen Einrichtungen, Forschungseinrichtungen und der Industrie.
==a==Installation==a==
=a=unter Linux=a=
=a= unter Windows=a=
Deletions:
==a==Platform==a==
Plattform für Übungen: Linux (weitere Unixderivate und Windows möglich)
==a==Installation unter Wndows==a==


Revision [6825]

Edited on 2008-12-05 14:23:14 by ToBo
Additions:
==a==Vorbereitung==a==
export PATH=/local/mpich2/bin:$PATH
export LD_LIBRARY_PATH=/local/mpich2/lib:$LD_LIBRARY_PATH


Revision [6824]

Edited on 2008-12-05 12:41:38 by ToBo
Additions:
http://www.top500.org/
http://de.wikipedia.org/wiki/Supercomputer
==a==Installation unter Wndows==a==
A) .Net framework 2.0 installieren, falls nicht vorhanden (der MPICh installer startet nicht, wenn .net 2.0 fehlt):
dotnetfx.exe herunterladen und ausführen
B) .Net 2.0 Service pack 1 installieren:
NetFx20_SP1_x86 herunterladen und ausführen
C) MPICH2 installieren
MPICH2 für Windows 32bit herunterladen, ausführen
D) Gcc aus MingW installieren, falls kein anderer C-Compiler vorhanden. Die Installation der neuen Version 1.08 habe ich nur mit Gcc getestet. VisualC++ oder Borland sollten auch funktionieren
E) SMPD als Dienst installieren (smpd -h listet die Optionen):
smpd -register_spn
F) Suchpfad ergänzen (<MINGW_ROOT>/bin und <MPICH2_ROOT>/bin hinzufügen)
G) Das fertige Beispiel testen:
cd <MPICH2_ROOT>/examples
mpirun -n 4 cpi


Revision [6823]

Edited on 2008-12-05 12:28:23 by ToBo
Additions:
http://www.mcs.anl.gov/research/projects/mpich2/
Deletions:
Übungen in Raum E115


Revision [6763]

Edited on 2008-12-04 00:51:31 by ToBo
Additions:
==a==Erster Test==a==
Code test.c:
%%(c)
#include <stdio.h>
#include <mpi.h>
int main (int argc, char **argv)
{
int rank, size;
MPI_Init (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf ("Hello world from process %d, of %d\n.", rank, size);
MPI_Finalize();
return 0;
}
%%
Kompilieren
%%(bash)
gcc test.c -lmpi -o test
%%
Test:
%%
mpiexec -n 4 test
%%
==a==Sonstiges==a==
Deletions:
==a==Test==a==
mpiexec -n 4 mpihello


Revision [6762]

Edited on 2008-12-04 00:43:34 by ToBo
Additions:
http://de.wikipedia.org/wiki/Message_Passing_Interface


Revision [6761]

Edited on 2008-12-04 00:01:04 by ToBo
Additions:
==a==Inhalt der Vorlesung==a==
==a==Platform==a==
Quellen herunterladen
oder Debian
aptitude install openmpi-dev openmpi-dbg
==a==Test==a==
==a==Literatur==a==
Deletions:
Themen:
Quuellen herunterladen


Revision [6469]

Edited on 2008-11-16 01:59:59 by ToBo
Additions:
CategoryStudiumSE


Revision [5788]

Edited on 2008-10-25 16:57:51 by ToBo
Additions:
Using MPI-2. Advanced Features of the Message-Passing Interface
Übungen in Raum E115
Deletions:
Raum E115


Revision [5787]

Edited on 2008-10-25 16:56:05 by ToBo
Additions:
Michael J. Quinn, Parallel Programmin in C with MPI and OpenMP (gut)
Chandra, Parallele Programmierung in OpenMP
Deletions:
Michael J. Quinn, Parallel Programmin in C with MPI and OpenMP
Chandra, Parallele Programmierung in OpenMPI


Revision [5786]

Edited on 2008-10-25 16:55:36 by ToBo
Additions:
Michael J. Quinn, Parallel Programmin in C with MPI and OpenMP
Sanders, Parallele Programmierung mit MPI
Chandra, Parallele Programmierung in OpenMPI
Raum E115
Deletions:
MPI and OpenMP


Revision [5785]

Edited on 2008-10-25 16:50:22 by ToBo
Additions:
Themen:
~-Architektur der Parallelrechner. Klassifizierungen
~-Statische und dynamische Verbindungsnetzwerke
~-Grundbegriffe der Leistungsbewertung
~-Message Passing: Kommunikationsmuster
~-Parallelprogrammierung mit der Standardbibliothek MPI
~-Parallelisierung durch Daten- und Funktionszerlegung
~-Abschätzung der Parallelprogramme; Zeitkomplexität
~-Numerische Algorithmen: Matrizenrechnung
~-Bibliotheken für Parallelrechner (Scalapack, PETSc, ...)
~- Programmieren in C (Grundkenntnisse)
unter Windows
MPI 1.0.8
.NET 2.0. SP1
gcc MINGW 32
unter Linux
Quuellen herunterladen
./com
make
make install
smpd -install
mpiexec -n 4 mpihello
MPI and OpenMP
Deletions:
-Architektur der Parallelrechner. Klassifizierungen
-Statische und dynamische Verbindungsnetzwerke
-Grundbegriffe der Leistungsbewertung
-Message Passing: Kommunikationsmuster
-Parallelprogrammierung mit der Standardbibliothek MPI
-Parallelisierung durch Daten- und Funktionszerlegung
-Abschätzung der Parallelprogramme; Zeitkomplexität
-Numerische Algorithmen: Matrizenrechnung
-Bibliotheken für Parallelrechner (Scalapack, PETSc, ...)
- Programmieren in C (Grundkenntnisse)


Revision [5452]

The oldest known version of this page was created on 2008-09-16 13:36:10 by ToBo
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki