Heterogenes GP-Computing ... was tun ?

Illoran

Newbie
Registriert
Sep. 2012
Beiträge
4
Moin zusammen,

ich habe mich in letzter Zeit ein wenig mit heterogenem GP-Computing befasst. Dabei bin ich nun auf eine gewisse Schwierigkeit gestoßen, es geht mehr oder minder um die Wahl der Sprache. Zunächst ein Gedankenexperiment.

Ein Hypothetischer Rechencluster für heterogenes CP-Computing soll gebaut und für Scientific-Computing Anwendungen programmiert werden. Geld spielt keine Rolle, allerdings ist ökonomisch denken durchaus erwünscht.

Es stellen sich folglich zwei Fragen. Zum einen die nach der Hardware. Verwendet man nVidia- oder AMD-Karten und wenn welche Karten, die aus dem Gamer- oder dem CAD-Segment. Oder verzichtet man, mit Blick auf die neuen Xeon-Phi Koprozessoren komplett auf GPU's ?

Zum anderen fragt man sich wie man seine Hardware für die Lösung der Aufgaben programmiert. Verwendet man CUDA-C oder Open CL oder vielleicht C++ AMP, oder verwendet man altgediegene MPI-Bibliotheken weil die Xeon-Phi Karten stinknormalen x86-Code fressen ?

Es gibt verschiedene Möglichkeiten der Kombination:

AMD-Hardware mit OpenCL oder C++APM
nVidia-Hardwre mit CUDA, OpenCL oder C++APM
Intel-Xeon-Phi mit x86-Code, OpenCL oder C++APM ( Wobei die OpenCL Variante etwas unsinnig
erscheint, da der Hauptvorteil des Koprozessors darin besteht keinen komischen GPU-Code schreiben. )

Hier verschiedene Argumente:
Hardware:
1. nVidia ist teuer! Im GTX-Segment bekommt man für 1€ etwa 5,5 GFlops SP-Leistung und lediglich 0,25 GFlops DP-Leistung. Ziemlich mies wenn man bedenkt das im Wissenschaftlichen Bereich hauptsächlich DP-Leistung interessiert. Allerdings gibt es ja die CAD-Karten der Tesla Reihe, die haben eine SP/DP-Ratio von 2. Die sind jedoch so teuer das man hier pro Euro 0,4 GFlops SP- und 0,2 GFlops DP-Leistung.

2. AMD ist günstig. Die FirePro-Karten aus dem CAD-Segment kann man zwar von der Preis-Leistung getrost an die Wand schmeissen, aber die Radeon-7xxx-Reihe bietet etwa 10 GFlops/€ SP-Leistung und 2,5 GFlops/€ DP-Leistung (Faktor 10 gegenüber GTX und Tesla).

3. AMD baut große Speicher, wer mal ein wenig Chemie oder Physikkram gerechnet hat weiß mehr Speicher ist meist besser als weniger Speicher =)

4. Der Strombedarf ist bei der letzten Generation von Karten bei allen Varianten etwa gleich. Aktuelle Präsentationen von Intel sagen das der Xeon-Phi in Leistung/Watt leicht vor den anderen heterogenen Systemen liegt.

5. Leider sind genaue Leistungsdetails zum Xeon-Phi und Preise noch nicht bekannt. Daher ist noch keine Abschätzung darüber möglich wie die Koprozessoren ökonomisch abschneiden.

6. AMD setzt auf viele Recheneinheiten. die Radeon 7970 hat 2048 Stream-Prozessoren auf denen gerechnet werden kann, bei der GTX-680 sind es 1536. Der Xeon-Phi wird über bis zu 64 Ivy-Bridge-Kerne verfügen. Hierbei handelt es sich allerdings nicht um Stream-Prozessoren die auf Grafikchips gewissen Limitierungen unterliegen sondern um voll Leistungsfähige CPU-Kerne.


Software:

1. CUDA ist schnell. In Direktvergleichen ist CUDA-Software meist 10-40% schneller als Vergleichbare OpenCL-Software.

2. CUDA ist unflexibel. CUDA läuft ausschließlich auf nVidia-Hardware, was nicht gerade ein Vorteil ist wenn man an die Preis/Leistung denkt.

3. CUDA und nVidia sind verbreiteter. Gegenüber AMD und OpenCL ist die Zahl der nVidia-Nutzer, Quellen zu CUDA und Veröffentlichungen die auf CUDA basieren zwischen einem Faktor von 1-3 höher.

4. CUDA ist angeblich simpler. CUDA Code soll einfacher zu lesen schreiben und warten sein als OpenCL-Code. Um das zu beurteilen bin ich aber noch nicht tief genug im Thema.

5. OpenCL läuft überall. Mit jeder GPU und CPU sollten OpenCL-Programme lauffähig sein.

6. OpenCL und C++AMP scheinen Grundsätzlich etwa die gleiche Performanz bei Berechnungen zu haben.

7. C++AMP ist nativer C++Code. Daher muss man nicht viel neues lernen oder sich lange einarbeiten.


Meine Fragen wären jetzt folgende, hab ich in meiner Argumentation irgendwelche Fakten vergessen und zu welchem Schluss würden euch die Ergebnisse bringen ?

CUDA ist zwar schneller als OpenCL, allerdings ist der Preis/Leistungsfaktor von 10 gegenüber AMD Karten nicht zu vernachlässigen. Xeon-Phi scheint reizvoll, kann ich aber noch nicht richtig einordnen.

Ich würde daher zu heterogenen Systemen mit AMD-Hardware unter Verwendung von OpenCL tendieren. Aber ich lass mich da sehr gerne belehren =)

mfg Illoran
 
Illoran schrieb:
7. C++AMP ist nativer C++Code. Daher muss man nicht viel neues lernen oder sich lange einarbeiten.
Du wirst so oder so den Code ganz speziell schreiben müssen, damit die GPU dies besonders effizient ausnutzen kann. Wie sieht es da in Punkto Tooling bei allen Parteien aus? Gibt es Debugger oder ähnliches um ungenutztes Performance-Potential entdecken zu können?

Du hast ATI Stream vergessen, also ein weiterer im Boot ;)
Dein Fazit ist aber kein heterogenes System sondern ein homogenes System: nur ATI Karten, nur OpenCL.
 
Zuletzt bearbeitet:
ice-breaker schrieb:
Du wirst so oder so den Code ganz speziell schreiben müssen, damit die GPU dies besonders effizient ausnutzen kann. Wie sieht es da in Punkto Tooling bei allen Parteien aus? Gibt es Debugger oder ähnliches um ungenutztes Performance-Potential entdecken zu können?

Hmm ja sowas dachte ich mir schon. Die GPU ist halt ein wenig zu eigen mit den Rastern die alle jeweils die selbe Operation ausführen müssen ...
Über das Debugging hab ich mir noch nicht viele Gedanken gemacht, bisher lediglich gelesen das OpenCL debuggen die Hölle sein soll. Werd mich da aber mal weiter informieren.

ice-breaker schrieb:
Du hast ATI Stream vergessen, also ein weiterer im Boot ;)
Dein Fazit ist aber kein heterogenes System sondern ein homogenes System: nur ATI Karten, nur OpenCL.

Yeah ... noch mehr Auswahl =).
Das mit heterogen würde man dann ja sehen... ganz spitzfindig könnte man sagen der Host der den Context definiert und die Devices ansteuert wird garantiert eine CPU sein =). Ne Scherz beiseite, das würde man ja entsprechend abhängig von der speziellen Anwendung bauen, denke mal fü n paar Xeons ist in dem Hypothetischen System noch Platz =).

mfg Illo
 
Was auch noch berücksichtigt werden sollte: Wo gibt es welche tools? Die meisten Cluster laufen mit Linux....C++ AMP ist MS. Das sollte berücksichtigt werden. Nicht das ich etwas gegen C++ AMP hätte, nur wenn ein Windows laufen soll brauchst du wahrscheinlich die HPC Version um MPI laufen zu lassen (was im Clusterbereich weit verbreitet ist). MPI wird zur Kommunikation zwischen den Nodes verwendet. Das wirst du immerhin auch brauchen, da C++ AMP / CUDA / OpenCL eher Shared Memory Ansätze sind.
 
kelox schrieb:
Was auch noch berücksichtigt werden sollte: Wo gibt es welche tools? Die meisten Cluster laufen mit Linux....C++ AMP ist MS. Das sollte berücksichtigt werden. Nicht das ich etwas gegen C++ AMP hätte, nur wenn ein Windows laufen soll brauchst du wahrscheinlich die HPC Version um MPI laufen zu lassen (was im Clusterbereich weit verbreitet ist). MPI wird zur Kommunikation zwischen den Nodes verwendet. Das wirst du immerhin auch brauchen, da C++ AMP / CUDA / OpenCL eher Shared Memory Ansätze sind.

Das ist natürlich eine Sache ... ein hypothetischer Windows-Cluster ist nicht vorgesehen. Also -1 =)

mfg Illo
 
Harzerkas schrieb:
Gamerkarten haben oftmals kein ECC, oder? Also sollten die auch rausfallen!

Hmm ECC scheint tatsächlich ein kritisches Problem dazustellen, müsste mich mal nachschauen wie es auf unseren Clustern derzeit ausschaut mit dem Memory. Die Tesla und die FirePro haben anscheinend beide ECC, aber in den Datenblättern wird zugunsten der Speicherbandbreite gelegentlich auch gerne die Deaktivierung von ECC empfohlen.

Kennst du evtl. Breitenmodelle die ECC-Speicher verbaut haben ?

mfg Illo

PS: Hab erst garnicht an ECC gedacht, gibt ja schöne Publikationen in denen für MD-Simulationen nVidia-Karten in nem gemischten SP/DP-Mode genutzt wurden. Da ist die 580 GTX den Teslas und auch den CPUs um Faktor 10-80 weggezogen. Müsste man vielleicht mal sehen wie sich das mit den Speicherfehlern verhält.
 
Zurück
Oben