OpenCL Performance

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • OpenCL Performance

    Hallo zusammen!

    Ich versuche mich wiedereinmal an einer für mich neuen Technik. Diesmal ist OpenCL dran. Also hab ich mir ein Beispiel aus dem Netz heruntergeladen, das nichts anderes macht als die einzelnen Elemente zweier Vektoren zu addieren. Die Vektoren haben 1 Mio integer und werden 1000 mal addiert. Daraus hab ich ein C-Tool-Project gemacht -> läuft.

    Allerdings ist die Performance unter aller Sau. Soll heißen: das ganze rechnet mit OpenCL wesentlich langsamer als mit reinem C. Sind mit OpenCL fast 8 Sekunden und ohne knapp 2 Sekunden. Hardware ist ein 15" MacBook Pro von 2019 mit i7.

    Hat vielleicht jemand Erfahrung mit OpenCL und kann mir das erklären ?

    Gruß
    Thomas
  • Wenn du ernste Antworten haben willst, solltest du schon ein bisschen die Hosen runterlassen und deinen(!) Code zeigen.

    Ich bin kein OpenGL-Experte, aber die Antwort zu deiner Frage ist doch offensichtlich, wenn du dir überlegst, was beide Programme machen müssen:
    1. Klassisches C-Programm: Über die Vektoren im Hauptspeicher iterieren, Werte in die CPU laden, addieren und Ergebnis wieder in den Hauptspeicher schreiben.
    2. OpenGL: Werte aus dem Hauptspeicher über einen Bus in die Grafikkarte laden, auf der Grafikkarte etwas schneller, die Werte teilparallel aus dem Speicher laden, addieren und in den Speicher schreiben, und schließlich die Werte aus der Grafikkarte wieder in den Hauptspeicher des Rechners laden.
    Das Laden und Herauslesen der Daten in bzw. aus der Grafikkarte dürfte vielmehr Zeit, als die Additionen brauchen, da ja jede Zahl einmal durch den PCIe-Bus muss. Wenn du die Performance von OpenGL bzw. der Grafikkarte sehen willst, musst du also mit deinen Vektoren schon wesentlich aufwändigere Dinge machen.
    „Meine Komplikation hatte eine Komplikation.“
  • @MCDan: Ich wollte eigentlich eine vom System unabhängige Lösung haben. Dafür finde ich OpenCL von der Idee her recht gut. GCD ist wohl rein Apple und Metal muss ich mir erst ansehen. Danke für den Hinweis.

    @macmoonshine, @manoh, @Thallius: Ich rede nicht von OpenGL sondern von OpenCL. Dabei gehts nicht um 3D oder sowas sondern um reinen Parallelisierung von Berechnungen. Und natürlich müssen die schneller sein, wenn ich mit hundert GPUs reche als mit 6 CPUs. Dafür wurde OpenCL ja entwickelt.

    Der Speichertransfer spielt hier kaum eine Rolle. Hab ich getestet. Ich gehe davon aus, dass die Umsetzung vom OpenCL-Code auf die Hardware irgendwie konfiguriert werden muss. Denn angeblich entscheidet das System selber ob es die Berechnung auf die CPU-Kerne, die CPU-GPU, die Grafikkarten-GPUs oder auf die Steckkarten verteilt. Deshalb suche ich nach jemanden, der darüber Bescheid weiß. Kann auch sein, dass es sich so wie beim OMP um eine Apple Eigenheit handelt.

    Na mal sehen. Ich bleib dran. Bis dahin bleibt eben das gute alte Multithreading...