OpenCL bei alltäglichen Aufgaben

Kürzlich haben wir über HSA gesprochen und während der Diskussion über die Vorteile des neuen Ansatzes zum Erstellen von PCs ein so interessantes Thema wie GPGPU angesprochen - Allzweck-Computing auf einem Grafikbeschleuniger. Heute bieten AMD-Videobeschleuniger mithilfe von OpenCL, einem Framework, das ein relativ einfaches und intuitives programmierbares hochparalleles System bietet, Zugriff auf ihre Ressourcen .


Heutzutage werden OpenCL-Technologien von allen wichtigen Akteuren auf dem Markt unterstützt: Die Möglichkeit, Programmen Zugang zu „erweiterter“ Beschleunigung zu gewähren (ebenfalls kostenlos, da OpenCL keine Lizenzgebühren oder Lizenzgebühren impliziert), lohnt sich eindeutig, und jeder profitiert von der Vielseitigkeit solcher APIs die OpenCL-Unterstützung in ihren Produkten implementieren.

Lesen Sie mehr darüber, wo Sie OpenCL heute im Alltag kennenlernen können, wie es reguläre Office-Software beschleunigt und welche Möglichkeiten es Entwicklern heute eröffnet, und wir werden darüber sprechen.

GPGPU, OpenCL und ein bisschen Geschichte


Natürlich ist OpenCL nicht die einzige Möglichkeit, allgemeines GPU-Computing zu implementieren. Neben OpenCL gibt es CUDA, OpenACC und C ++ AMP auf dem Markt, aber die ersten beiden Technologien sind sehr beliebt und bekannt.

Dieselben Leute, die der Welt OpenGL- und OpenAM-Technologien zur Verfügung stellten: Khronos Group, entwickelten den OpenCL-Standard. Die OpenCL-Marke selbst gehört Apple, aber zum Glück für Programmierer und Benutzer auf der ganzen Welt ist diese Technologie nicht geschlossen oder an die Produkte des Unternehmens "apple" gebunden. Neben Apple gehören zu Khronos Goup auch Marktriesen wie Activision Blizzard, AMD, IBM, Intel, NVidia und ein Dutzend weitere Unternehmen (hauptsächlich Hersteller von ARM-Lösungen), die später dem Konsortium beigetreten sind.

OpenCL und CUDA sind bis zu einem gewissen Grad ideologisch und syntaktisch ähnlich, wovon die Community nur profitiert hat. Aufgrund der Ähnlichkeit bestimmter Methoden und Ansätze ist es für Programmierer einfacher, beide Technologien zu verwenden, um von "geschlossener" und NVidia CUDA-Hardware gebunden auf universell zu wechseln und überall zu arbeiten (einschließlich gewöhnlicher Mehrkern-CPUs und Supercomputer auf Basis der CELL-Architektur). OpenCL .

OpenCL im täglichen Gebrauch


Jetzt wirst du denken: "Ja, sie werden über Spiele und Photoshop sprechen." Nein, OpenCL kann das Rechnen über die reine Grafik hinaus beschleunigen. Eine der beliebtesten Anwendungen, die die Funktionen von GPGPU nutzen, ist ... eine plattformübergreifende Office-Suite LibreOffice. Die OpenCL-Unterstützung wurde 2014 veröffentlicht und wird verwendet, um die Berechnungen im Calc-Tabellenmanager zu beschleunigen.

Hier ist ein visueller Vergleich der Systemleistung mit dem AMD A10-7850K mit dem R7-Grafikkern und dem Intel Core I5 ​​mit dem HD4600 an Bord:



In synthetischen Tests übertrifft der gleiche AMD A10-7850K im heterogenen Computing mit OpenCL den fast doppelt so teuren i5-4670K / 4690 :


Übrigens gibt es in der Wissenschaft und ihren angewandten Bereichen viele Aufgaben , die sich perfekt auf die Vektorprozessoren von Videobeschleunigern verlagern und es Ihnen ermöglichen, Berechnungen zehn- und hundertmal schneller als auf der CPU durchzuführen.

Zum Beispiel verschiedene Abschnitte der linearen Algebra. Die Multiplikation von Vektoren und Matrizen ist das, was GPUs jeden Tag tun, wenn sie mit Grafiken arbeiten. Bei diesen Aufgaben sind sie praktisch nicht gleich, weil Ihre Architektur wurde jahrelang verfeinert, um solche Probleme zu lösen.

Dazu gehört auch die schnelle Fourier-Transformation und alles, was damit verbunden ist: das Lösen komplexer Differentialgleichungen mit verschiedenen Methoden. Separat können wir die Gravitationsprobleme von N-Körpern unterscheidendie zur Berechnung der Aero- und Hydrodynamik, zur Modellierung von Flüssigkeiten und Plasma verwendet werden. Die Komplexität der Berechnungen liegt in der Tatsache, dass jedes Teilchen mit den anderen interagiert, die Wechselwirkungsgesetze ziemlich kompliziert sind und die Berechnungen parallel durchgeführt werden müssen. Für solche Aufgaben sind OpenCL- und AMD-GPU-Funktionen perfekt geeignet Paralleles Rechnen mit vielen Objekten und so erfolgreich auf Prozessoren dieses Typs jeden Tag gelöst: in Pixel-Shadern .

Strukturierte Gitter werden häufig in Rastergrafiken verwendet. Unstrukturiert - in Berechnungen auf dem Gebiet der Hydrodynamik und in verschiedenen Berechnungen mit Elementen, deren Graphen unterschiedliche Gewichte haben. Unterschiede zwischen strukturierten und unstrukturierten Gittern in der Anzahl der „Nachbarn“ jedes Elements: Strukturierte Gitter weisen den gleichen Unterschied auf, unstrukturierte Gitter weisen unterschiedliche Unterschiede auf, aber beide passen perfekt zur Fähigkeit von OpenCL, Berechnungen zu beschleunigen. Schwierigkeiten bei der Übertragung von Berechnungen sind hauptsächlich mathematischer Natur. Das heißt, die Hauptaufgabe des Programmierers besteht nicht nur darin, die Arbeit des Systems zu "schreiben", sondern auch eine mathematische Beschreibung zu entwickeln, die Daten mit OpenCL an Hardwarefunktionen überträgt.

Kombinatorische Logik (auch hier gilt die Hash-Berechnung), Monte-Carlo- Methoden- das ist gut auf die GPU portiert. Viele Computermodule und eine hohe Leistung beim parallelen Rechnen beschleunigen diese Algorithmen wirklich.

Was kann mit OpenCL und leistungsstarken GPUs noch beschleunigt werden?


Suche den Weg zurück. Diagrammberechnungen und dynamische Programmierung: Sortieren, Kollisionserkennung (Kontakt, Schnittpunkt), Erzeugung regelmäßiger Strukturen, verschiedene Auswahl- und Suchalgorithmen. Mit einigen Einschränkungen, aber sie eignen sich zur Optimierung und Beschleunigung der Arbeit neuronaler Netze und verwandter Strukturen. Hier ist es jedoch wahrscheinlicher, dass die Virtualisierung neuronaler Strukturen einfach „teuer“ ist und die Verwendung von FPGA-Lösungen rentabler ist. Die Arbeit von Finite-State-Maschinen (die bereits bei der Arbeit mit der GPU verwendet werden, beispielsweise bei der Videokomprimierung / -dekomprimierung oder beim Auffinden sich wiederholender Elemente) ist hervorragend.

OpenCL gegen CUDA


Ein direkter Vergleich der Leistung von OpenCL und CUDA ist wenig sinnvoll. Erstens, wenn wir sie auf AMD- und NVidia-Grafikkarten vergleichen, werden AMD-Videoadapter in einem harten Wettlauf der Rechenfähigkeiten gewinnen: Moderne NVidia-Beschleuniger haben eine Reihe von Leistungsbeschränkungen im FP64-Format, die von NVidia selbst eingeführt wurden, um „professionelle“ Grafikkarten für zu verkaufen Computer (Tesla und Titan Z-Serie). Ihr Preis ist unvergleichlich höher als der ihrer FLOPS-Kollegen, die auf AMD-Lösungen und ihren "verwandten" Karten in der NVidia-Nummernreihe basieren, was den Vergleich ziemlich kompliziert macht. Sie können die Produktivität pro Watt oder die Produktivität pro Dollar berücksichtigen, dies hat jedoch fast nichts mit einem reinen Vergleich der Rechenleistung zu tun: „FLOPS um jeden Preis“ sind schwach auf die aktuelle finanzielle Situation abgestimmt.In Bezug auf die Leistung pro Dollar ist die 7970-GHz-Edition der „alten Frau“ (auch bekannt als R9 280X) immer noch eine der profitabelsten Grafikkarten.

Zweitens können Sie versuchen, OpenCL und CUDA auf einer Grafikkarte von NVidia zu vergleichen, aber NVidia selbst implementiert OpenCL über CUDA auf Treiberebene, sodass der Vergleich aus offensichtlichen Gründen etwas unehrlich ist.

Wenn Sie jedoch nicht nur die Leistung berücksichtigen, können noch einige Analysen durchgeführt werden.

OpenCL läuft auf einer viel größeren Hardwareliste als NVidia CUDA. Fast alle CPUs, die den SSE 3-Befehlssatz unterstützen, Videobeschleuniger von Radeon HD5xxx und NVidia GT8600 bis hin zu den neuesten integrierten Grafiken Fury / Fury-X und 980Ti / Titan X, AMD APU und Intel - im Allgemeinen kann fast jede moderne Hardware mit mehreren Kernen Nutzen Sie diese Technologie.

Die Implementierungsfunktionen von CUDA und OpenCL (sowie eine ziemlich komplizierte Dokumentation, da die parallele Programmierung insgesamt weit vom einfachsten Entwicklungsbereich entfernt ist) spiegeln sich eher in spezifischen Entwicklungsfähigkeiten und -tools wider und nicht im Bereich der Produktivität.

Zum Beispiel hat OpenCL einige Speicherzuordnungsprobleme aufgrund von "Die OpenCL-Dokumentation ist hier sehr unklar".

Gleichzeitig ist CUDA OpenCL im Bereich der Synchronisation von Flüssen unterlegen - Daten, Anweisungen, Speicher, alles. Darüber hinaus können Sie mit OpenCL Warteschlangen und Anweisungen außerhalb der Reihenfolge verwenden, und CUDA weiß immer noch nur, wie die Reihenfolge ist. In der Praxis werden so Ausfallzeiten des Prozessors beim Warten auf Daten vermieden. Der Effekt ist umso deutlicher, je länger die Prozessorabdeckung ist und je größer der Unterschied zwischen der Speichergeschwindigkeit und der Geschwindigkeit der Computermodule ist. Kurz gesagt: Je mehr Leistung Sie unter OpenCL zuweisen, desto größer ist die Leistungslücke. CUDA erfordert das Schreiben von viel komplexerem Code, um vergleichbare Ergebnisse zu erzielen.

Entwicklungstools (Debugger, Profiler, Compiler) CUDA ist etwas besser als ähnliche in OpenCL, aber CUDA implementiert API über C und OpenCL über C ++, wodurch die Arbeit mit objektorientierter Programmierung vereinfacht wird, während beide Frameworks reich an „lokal“ sind »Tricks, Einschränkungen und Funktionen.



Der Ansatz von NVidia ist in diesem Fall der Funktionsweise von Apple sehr ähnlich. Eine geschlossene Lösung mit einer Vielzahl von Einschränkungen und strengen Regeln, die jedoch für die Arbeit an einer bestimmten Hardware gut geschärft ist.

OpenCL bietet flexiblere Tools und Funktionen, erfordert jedoch ein höheres Schulungsniveau von Entwicklern. Allgemeiner Code auf einem reinen OpenCL sollte auf jeder Hardware ausgeführt werden, die ihn unterstützt, aber gleichzeitig "optimiert" für bestimmte Lösungen (z. B. AMD-Videobeschleuniger oder CELL-Prozessoren) funktioniert viel schneller.

Source: https://habr.com/ru/post/de388421/


All Articles