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
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