Evaluation: OpenMP, OpenCL, CUDA, Microsoft AMP

By | 8. Mai 2016

High Performance Projekt zur statistischen Auswertung

Es wurden OpenCL, OpenMP, CUDA und AMP als Technologien und Programmierumgebung für ein „High Performance Projekt zur statistischen Auswertung“ untersucht.

Anforderung

Für das aktuelle Projekt werden statistische Auswertungen über Zahlenreihen unter Ausnutzung der Prozessorkerne und GPUs durchgeführt.

Für die Implementierung der Logik ist bereits die Entscheidung zu Gunsten der Intel Threading Building Blocks TBB gefallen.

Für die Programmierung der GPUs sollte in kleinen Tests Erfahrung gesammelt werden und eine Entscheidung für die Programmierung getroffen werden.

Kandidaten

Für die Programmierung habe ich OpenMP®, OpenCL der Khronos Group, CUDA von Nvidia und AMP von Microsoft angesehen bzw. in kleinen Beispielen getestet.

Die Entscheidung ist für OpenCL gefallen.

  • Unabhängigkeit der verwendeten Hardware (gegenüber CUDA und AMP)
  • Unabhängigkeit der verwendeten  Betriebssysteme
  • Unabhängigkeit der verwendeten Compiler
  • Besser zu steuern gegenüber OpenMP
  • Microsoft unterstützt nur OpenMP 2.0 zur Zeit und ich musste im Testcode wieder #ifdefs verwenden
  • AMP habe ich nur angelesen aber nicht getestet.

Verwendete Bibliothek

Nach einer kurzen Testphase verwende ich den „OpenCL C++ Wrapper“ der Khronos Group. Das Projekt Boost.Compute (kein Boost Projekt) habe ich mir ebenfalls angesehen und es ist als Kandidat noch im Rennen.

Testumgebung

Getestet wurde auf Mac Pro unter OSX mit CLion und CLang.