OpenCL
![]() | |
Originalautor (en) | Apple Inc. |
---|---|
Entwickler (en) | Khronos Gruppe |
Erstveröffentlichung | 28. August 2009 |
Stabile Version | 3.0.11[1] / 6. Mai 2022 |
Geschrieben in | C mit C ++ Bindungen |
Betriebssystem | Android (Lieferantenabhängig),[2] Freebsd,[3] Linux, Mac OS (über pocl), Fenster |
Plattform | ARMV7, ARMV8,[4] Zelle, IA-32, Leistung, x86-64 |
Typ | Heterogenes Computer API |
Lizenz | OpenCL -Spezifikationslizenz |
Webseite | www |
Paradigma | Imperativ (prozedural), strukturiert, (Nur C ++) objektorientierter, generische Programmierung |
---|---|
Familie | C |
Stabile Version | |
Disziplin tippen | Statisch, schwach, Manifest, nominal |
Implementierungssprache | Implementierungspezifisch |
Dateiname -Erweiterungen | .cl .clcpp |
Webseite | www |
Haupt Implementierungen | |
AMD, Gallium Compute, IBM, Intel Neo, Intel SDK, Texas Instruments, Nvidia, POCL, Arm | |
Beeinflusst von | |
C99, CUDA, C ++ 14, C ++ 17 |
OpenCL (Öffnen Sie die Computersprache) ist ein Rahmen Für das Schreiben von Programmen, die ausführen heterogen Plattformen bestehend aus Zentrale Verarbeitungseinheiten (CPUs), Grafikverarbeitungseinheiten (Gpus), Digitale Signalprozessoren (DSPS), Feldprogrammierbare Gate-Arrays (Fpgas) und andere Prozessoren oder Hardware Beschleuniger. Opencl gibt an Programmiersprachen (bezogen auf C99, C ++ 14 und C ++ 17) für die Programmierung dieser Geräte und Anwendungsprogrammierschnittstellen (APIs), um die Plattform zu kontrollieren und Programme auf dem auszuführen Berechnung Geräte. OpenCL bietet eine Standardschnittstelle für Parallele Computing Verwendung Aufgabe- und Datenbasierte Parallelität.
OpenCL ist ein offener Standard, der von der gepflegt wird gemeinnützig Technologiekonsortium Khronos Gruppe. Konformante Implementierungen sind von verfügbar Altera, AMD, ARM, Kreativ, IBM, Vorstellung, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx, und Ziilabs.[8][9]
Überblick
OpenCL betrachtet ein Computersystem als aus einer Reihe von einer Reihe von Berechnung Geräte, was sein könnte Zentrale Verarbeitungseinheiten (CPUs) oder "Beschleuniger" wie Grafikverarbeitungseinheiten (GPUs), an a angehängt Gastgeber Prozessor (eine CPU). Es definiert a C-ähnliche Sprache Für Schreibprogramme. Auf einem OpenCL -Gerät ausgeführte Funktionen werden aufgerufen ""Kerne".[10]: 17 Ein einzelnes Computergerät besteht normalerweise aus mehreren Berechnen Sie Einheiten, was wiederum mehrere umfasst Verarbeitungselemente (PES). Eine einzelne Kernelausführung kann auf allen oder vielen PES parallel ausgeführt werden. Wie ein Rechengerät in Recheneinheiten und PES unterteilt ist, ist dem Verkäufer gewachsen. Eine Recheneinheit kann als "als" betrachtet werden "Ader", aber der Begriff des Kerns ist in allen Arten von Geräten, die von OpenCL (oder sogar innerhalb der Kategorie" CPUs ") unterstützt werden, schwer zu definieren.[11]: 49–50 und die Anzahl der Berechnungseinheiten entspricht möglicherweise nicht der Anzahl der in der Marketingliteratur der Anbieter beanspruchten Kerne (die tatsächlich tatsächlich gezählt werden können Simd Gassen).[12]
Zusätzlich zu seiner C-ähnlichen Programmiersprache definiert OpenCL eine Programmierschnittstelle (API), mit der Programme, die auf dem Host ausgeführt werden, Kernel auf den Rechengeräten starten und Gerätespeicher verwalten, was (zumindest konzeptionell) vom Hostspeicher getrennt ist. Programme in der OpenCL -Sprache sollen sein zur Laufzeit zusammengestellt, damit die Anwendungen der OpenCL-Verwendung zwischen Implementierungen für verschiedene Host-Geräte tragbar sind.[13] Der OpenCL -Standard definiert Host -APIs für C und C ++; APIs von Drittanbietern existieren für andere Programmiersprachen und Plattformen wie z. Python,[14] Java, Perl,[15] D[16] und .NETZ.[11]: fünfzehn Ein Implementierung des OpenCL -Standards besteht aus a Bibliothek Das implementiert die API für C und C ++ und ein Opencl c Compiler Für die rechneren Geräte (en), die gezielt angegriffen werden.
Um das OpenCL -Programmiermodell für andere Sprachen zu öffnen oder die Kernelquelle vor der Inspektion zu schützen, ist die Standard tragbare Zwischendarstellung (Spire)[17] kann als zielunabhängigem Weg verwendet werden, um Kernel zwischen einem Front-End-Compiler und dem Back-End-OpenCL-Back-End zu versenden.
In jüngerer Zeit Khronos Gruppe hat ratifiziert Sycl,[18] Ein höheres Programmiermodell für OpenCL als Single-Source edsl Basierend auf reinem C ++ 17 verbessern Programmierungsproduktivität. Personen, die von C ++-Kernel interessiert sind, aber nicht von Sycl Single-Source-Programmierstil, können C ++-Funktionen mit Rechenkernquellen verwenden, die in "C ++ für OpenCL" -Prok geschrieben wurden.[19]
Speicherhierarchie
OpenCL definiert einen vierstufigen Speicherhierarchie Für das Rechengerät:[13]
- Globaler Speicher: gemeinsam von allen Verarbeitungselementen geteilt, hat jedoch eine hohe Zugriffslatenz ( __global);
- Lese-Nur-Memory: kleiner, niedriger Latenz, von der Host-CPU, nicht aber die Rechengeräte (nicht __Konstante);
- Lokaler Speicher: gemeinsam von einer Gruppe von Verarbeitungselementen ( __lokal);
- privates Gedächtnis pro Element (Register; __Privatgelände).
Nicht jedes Gerät muss jede Ebene dieser Hierarchie in Hardware implementieren. Konsistenz zwischen den verschiedenen Ebenen in der Hierarchie ist entspannt und nur durch explizit durchgesetzt Synchronisation Konstrukte, insbesondere Barrieren.
Geräte können den Speicher an die Host -CPU teilen oder nicht.[13] Die Host -API bietet Griffe Auf Gerätespeicherpuffer und Funktionen, um Daten zwischen Host und Geräten hin und her zu übertragen.
OpenCL -Kernelsprache
Die Programmiersprache, mit der zum Schreiben verwendet wird Kernel berechnen wird als Kernelsprache bezeichnet. Opencl adoptiert C/C ++-Basierte Sprachen, um die auf dem Gerät durchgeführten Kernel -Berechnungen mit einigen Einschränkungen und Ergänzungen zur effizienten Zuordnung der heterogenen Hardware -Ressourcen von Beschleunigern zu erleichtern. Traditionell wurde OpenCL C verwendet, um die Beschleuniger im OpenCL -Standard zu programmieren, später C ++ für OpenCL -Kernelsprache wurde entwickelt, die alle Funktionen von OpenCL C geerbt, aber C ++ - Funktionen in den Kernelquellen verwenden durften.
Openencl c Sprache
Opencl c[20] ist ein C99-Basierendem Sprachdialekt, der an das Gerätemodell in OpenCL angepasst ist. Speicherpuffer befinden sich in bestimmten Ebenen der Speicherhierarchie, und Zeiger werden mit den Region Qualifikanten kommentiert __global, __lokal, __Konstante, und __Privatgeländedas widerspiegeln. Anstelle eines Geräteprogramms mit a hauptsächlich Funktion, OpenCL C -Funktionen sind markiert __kernel zu signalisieren, dass sie sind Einstiegspunkte in das Programm aus dem Host -Programm aufgerufen werden. Funktionszeiger, Bitfelder und Arrays variabler Länge werden weggelassen und Rekursion ist verboten.[21] Das C Standardbibliothek wird durch einen benutzerdefinierten Satz von Standardfunktionen ersetzt, die auf die mathematische Programmierung ausgerichtet sind.
OpenCL C wird erweitert, um die Verwendung von zu erleichtern Parallelität Mit Vektortypen und -Operationen, Synchronisation und Funktionen, um mit Arbeitsgruppen und Arbeitsgruppen zu arbeiten.[21] Insbesondere neben skalaren Typen wie z. schweben und doppelt, die sich ähnlich wie die entsprechenden Typen in C verhalten, liefert OpenCL Vektorentypen mit festen Längen wie z. float4 (4-Vektor von Einzelprezisionsflogen); Solche Vektortypen sind in den Längen zwei, drei, vier, acht und sechzehn für verschiedene Grundtypen erhältlich.[20]: § 6.1.2 Vektorisiert Operationen auf diesen Typen sollen sich auf die Zuordnung bringen Simd Anweisungen setzt, z. B.,, Sse oder VMX, wenn OpenCL -Programme auf CPUs ausgeführt werden.[13] Andere spezialisierte Typen umfassen 2-D- und 3-D-Bildtypen.[20]: 10–11
Beispiel: Matrix -Vektor -Multiplikation

Das Folgende ist a Matrix -Vektor -Multiplikation Algorithmus in OpenCL C.
// multipliziert ein*x und lässt das Ergebnis in y. // a ist eine Zeilenmatrix, was bedeutet, dass sich das Element (i, j) in einem [i*ncols+j] befindet. __kernel Leere Matvec(__global Const schweben *A, __global Const schweben *x, uint NCOLS, __global schweben *y) { size_t i = get_global_id(0); // Globale ID, verwendet als Zeilenindex __global schweben Const *a = &A[i*NCOLS]; // Zeiger auf die I'th Zeile schweben Summe = 0.f; // Akkumulator für das Punktprodukt zum (size_t j = 0; j < NCOLS; j++) { Summe += a[j] * x[j]; } y[i] = Summe; }
Die Kernelfunktion Matvec Berechnet in jedem Aufruf die Skalarprodukt einer einzelnen Zeile einer Matrix A und ein Vektor x:
- .
Um dies in eine vollständige Matrix -Vektor -Multiplikation zu erweitern, die OpenCL -Laufzeit Karten der Kernel über die Reihen der Matrix. Auf der Wirtsseite die Clenqueuendrangekernel Funktion macht dies; Es dauert als Argumente, den der Kernel ausführen, seine Argumente und eine Reihe von Arbeiten, die der Anzahl der Zeilen in der Matrix entsprechen A.
Beispiel: Berechnung der FFT
Dieses Beispiel lädt a Schnelle Fourier-Transformation (FFT) Implementierung und führen sie aus. Die Implementierung ist unten aufgeführt.[22] Der Code fordert die OpenCL -Bibliothek für die erste verfügbare Grafikkarte auf und erstellt Speicherpuffer zum Lesen und Schreiben (aus der Perspektive der Grafikkarte). JIT-COMPILE Der FFT-Kernel und dann leitet schließlich asynchron den Kernel. Das Ergebnis aus der Transformation wird in diesem Beispiel nicht gelesen.
#enthalten #enthalten #enthalten "Cl/opencl.h" #define num_entries 1024 int hauptsächlich() // (int argc, const char* argv []) { // Konstanten // Der Quellcode des Kernels wird als Zeichenfolge dargestellt // befindet sich in der Datei: "fft1d_1024_kernel_src.cl". Die Details finden Sie in der nächsten Liste. Const verkohlen *Kernelsource = #enthalten "fft1d_1024_kernel_src.cl" ; // nach dem verfügbaren GPUs nachschlagen Const cl_uint num = 1; Clgetdeviceids(NULL, CL_DEVICE_TYPE_GPU, 0, NULL, (cl_uint*)&num); cl_device_id Geräte[1]; Clgetdeviceids(NULL, CL_DEVICE_TYPE_GPU, num, Geräte, NULL); // Erstellen Sie einen Rechenkontext mit GPU -Gerät cl_context Kontext = clreateContextfromtype(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, NULL); // Erstellen Sie eine Befehlswarteschlange Clgetdeviceids(NULL, Cl_device_type_default, 1, Geräte, NULL); cl_command_queue Warteschlange = ClreateCommandqueue(Kontext, Geräte[0], 0, NULL); // die Pufferspeicherobjekte zuordnen Cl_Mem Memobjs[] = { ClcreateBuffer(Kontext, Cl_mem_read_only | CL_MEM_COPY_HOST_PTR, Größe von(schweben) * 2 * Num_entries, NULL, NULL), ClcreateBuffer(Kontext, Cl_mem_read_write, Größe von(schweben) * 2 * Num_entries, NULL, NULL) }; // Erstellen Sie das Rechenprogramm // const char* fft1d_1024_kernel_src [1] = {}; Cl_Program Programm = ClreateProgramwithSource(Kontext, 1, (Const verkohlen **)& Kernelsource, NULL, NULL); // Erstellen Sie das ausführbare Rechenprogramm ClBuildProgram(Programm, 0, NULL, NULL, NULL, NULL); // Erstellen Sie den Berechnungskernel cl_kernel Kernel = Clreatekernel(Programm, "FFT1D_1024", NULL); // Setzen Sie die Args -Werte size_t local_work_size[1] = { 256 }; Clsetkernelarg(Kernel, 0, Größe von(Cl_Mem), (Leere *)&Memobjs[0]); Clsetkernelarg(Kernel, 1, Größe von(Cl_Mem), (Leere *)&Memobjs[1]); Clsetkernelarg(Kernel, 2, Größe von(schweben)*(local_work_size[0] + 1) * 16, NULL); Clsetkernelarg(Kernel, 3, Größe von(schweben)*(local_work_size[0] + 1) * 16, NULL); // N-D-Bereichsobjekt mit Work-Item-Dimensionen erstellen und Kernel ausführen size_t global_work_size[1] = { 256 }; global_work_size[0] = Num_entries; local_work_size[0] = 64; // nvidia: 192 oder 256 Clenqueuendrangekernel(Warteschlange, Kernel, 1, NULL, global_work_size, local_work_size, 0, NULL, NULL); }
Die tatsächliche Berechnung in der Datei "fft1d_1024_kernel_src.cl" (basierend auf FFT an die G80 -Architektur anpassen):[23]
R"( // Dieser Kernel berechnet FFT der Länge 1024. Die 1024 -Länge FFT wird in zersetzt // Aufrufe zu einer Radix 16 -Funktion, einer anderen Radix 16 -Funktion und dann einer Radix 4 -Funktion __kernel Leere FFT1D_1024 (__global float2 *in, __global float2 *aus, __lokal schweben *Smemx, __lokal schweben *Smemy) { int tid = get_local_id(0); int Blockidx = get_group_id(0) * 1024 + tid; float2 Daten[16]; // Datenindex für/vom globalen Speicher starten in = in + Blockidx; aus = aus + Blockidx; Globalloads(Daten, in, 64); // Versammlte Global Reads fftradix16pass(Daten); // In-Place-Radix-16-Pass twiddlefactorul(Daten, tid, 1024, 0); // Lokale Shuffle mit lokalem Speicher LOCALSHUFFE(Daten, Smemx, Smemy, tid, ((((tid & 15) * 65) + (tid >> 4))); fftradix16pass(Daten); // In-Place-Radix-16-Pass twiddlefactorul(Daten, tid, 64, 4); // Twiddle -Faktor -Multiplikation LOCALSHUFFE(Daten, Smemx, Smemy, tid, ((((tid >> 4) * 64) + (tid & 15))); // vier Radix-4-Funktionsaufrufe fftradix4pass(Daten); // Radix-4-Funktionsnummer 1 fftradix4pass(Daten + 4); // Radix-4-Funktionsnummer 2 fftradix4pass(Daten + 8); // Radix-4-Funktionsnummer 3 fftradix4pass(Daten + 12); // Radix-4-Funktionsnummer 4 // Koalesced Global schreibt GlobalStores(Daten, aus, 64); } )"
Eine vollständige Open -Source -Implementierung eines OpenCL -FFT finden Sie auf der Apple -Website.[24]
C ++ für OpenCL -Sprache
Im Jahr 2020 kündigte Khronos an[25] Der Übergang zum Community -gesteuerten C ++ für OpenCL -Programmiersprache[26] Das liefert Funktionen von C ++ 17 In Kombination mit den herkömmlichen OpenCL C -Funktionen. Diese Sprache ermöglicht es, eine Vielzahl von Sprachfunktionen aus Standard C ++ zu nutzen, während die Rückwärtskompatibilität zu OpenCL C erhalten kann. Dies eröffnet einen reibungslosen Übergangspfad zu C ++ -Funktionalität für die OpenCL -Kernel -Codentwickler, da sie weiterhin den bekannten Programmierfluss und sogar Tools verwenden können Nutzen Sie vorhandene Erweiterungen und Bibliotheken, die für OpenCL C verfügbar sind.
Die Sprachsemantik wird in der Dokumentation beschrieben, die in den Veröffentlichungen von OpenCL-Docs veröffentlicht wurde[27] Repository wird von der Khronos -Gruppe gehostet, wird jedoch derzeit nicht von der Khronos -Gruppe ratifiziert. Das C ++ für OpenCL-Sprache ist nicht in einem eigenständigen Dokument dokumentiert und basiert auf der Spezifikation von C ++ und OpenCL C. Die Open Source Klang Compiler hat C ++ für OpenCL seit Release 9 unterstützt.[28]
C ++ für OpenCL wurde ursprünglich als Clang -Compiler -Erweiterung entwickelt und erschien in der Release 9.[29] Da es eng mit OpenCL C gekoppelt war und keine klangspezifische Funktionalität enthielt, wurde seine Dokumentation in das OpenCL-Docs-Repository erneut veranstaltet[27] aus der Khronos -Gruppe zusammen mit den Quellen anderer Spezifikationen und Referenzkarten. Die erste offizielle Veröffentlichung dieses Dokuments, in dem C ++ für OpenCL Version 1.0 beschrieben wird, wurde im Dezember 2020 veröffentlicht.[30] C ++ für OpenCL 1.0 enthält Funktionen aus C ++ 17 und ist mit OpenCL C 2.0 rückwärts kompatibel. Auf der Khronos -Website finden Sie eine laufende Arbeit seiner Dokumentation.[31]
Merkmale
C ++ für OpenCL unterstützt die meisten Merkmale (syntaktisch und semantisch) von OpenCL C, mit Ausnahme einer verschachtelten Parallelität und Blöcke.[32] Es gibt jedoch geringfügige Unterschiede in einigen unterstützten Merkmalen, die hauptsächlich mit Unterschieden in der Semantik zwischen C ++ und C zusammenhängen beschränken Geben Sie Qualifikation ein.[32] Die folgenden C ++ - Funktionen werden von C ++ für OpenCL nicht unterstützt: virtuelle Funktionen, Dynamic_cast Operator, Nichtlagerung Neu/löschen Operatoren, Ausnahmen, Zeiger auf Mitgliederfunktionen, Verweise auf Funktionen, C ++ Standardbibliotheken.[32] C ++ für OpenCL erweitert das Konzept separater Speicherregionen (Adressräume) Von OpenCL C bis C ++ Merkmalen - Funktionsabgüsse, Vorlagen, Klassenmitglieder, Referenzen, Lambda -Funktionen, Operatoren. Die meisten C ++ - Funktionen sind für die Kernelfunktionen nicht verfügbar, z. Überladen oder Vorlagen, beliebiges Klassenlayout im Parametertyp.[32]
Beispiel: komplexer Arithmetik
Der folgende Code -Snippet zeigt, wie Kernel mit komplexe Zahl Die Arithmetik kann in C ++ für OpenCL -Sprache mit bequemer Verwendung von C ++ - Funktionen implementiert werden.
// einen Klassenkomplex definieren, der komplexe Zahlenberechnungen mit durchführen kann // verschiedene Genauigkeit, wenn verschiedene Typen für t verwendet werden - doppelt, schwimmen, halb. Schablone<Modellname T> Klasse Komplex_t { T m_re; // echte Komponente. T m_im; // Imaginäre Komponente. Öffentlichkeit: Komplex_t(T betreffend, T ich bin): m_re{betreffend}, m_im{ich bin} {}; // Bediener für die Multiplikation mit komplexen Zahlen definieren. Komplex_t Operator*(Const Komplex_t &Sonstiges) Const { Rückkehr {m_re * Sonstiges.m_re - m_im * Sonstiges.m_im, m_re * Sonstiges.m_im + m_im * Sonstiges.m_re}; } T get_re() Const { Rückkehr m_re; } T get_im() Const { Rückkehr m_im; } }; // Eine Helferfunktion zur Berechnung der Multiplikation über komplexe Zahlen, die aus gelesen wurden // Der Eingangspuffer und zum Speichern des berechneten Ergebniss in den Ausgangspuffer. Schablone<Modellname T> Leere compute_helper(__global T *in, __global T *aus) { Auto IDX = get_global_id(0); // Jedes Work-Item verwendet 4 aufeinanderfolgende Elemente aus dem Eingabepuffer // - zwei für jede komplexe Zahl. Auto Offset = IDX * 4; Auto Num1 = Komplex_t{in[Offset], in[Offset + 1]}; Auto Num2 = Komplex_t{in[Offset + 2], in[Offset + 3]}; // eine komplexe Multiplikation durchführen. Auto res = Num1 * Num2; // Jedes Work-Item schreibt 2 aufeinanderfolgende Elemente in den Ausgangspuffer. aus[IDX * 2] = res.get_re(); aus[IDX * 2 + 1] = res.get_im(); } // Dieser Kernel wird zur Komplexnummer-Multiplikation in einzelnen Präzision verwendet. __kernel Leere compute_sp(__global schweben *in, __global schweben *aus) { compute_helper(in, aus); } #ifdef cl_khr_fp16 // Dieser Kernel wird zur Komplexnummer-Multiplikation in zwei Hälften verwendet, wenn // Es wird vom Gerät unterstützt. #PRAGMA OpenCl -Erweiterung cl_khr_fp16: Aktivieren __kernel Leere compute_hp(__global halb *in, __global halb *aus) { compute_helper(in, aus); } #endif
Werkzeug- und Ausführungsumgebung
C ++ für OpenCL -Sprache kann für dieselben Anwendungen oder Bibliotheken und auf die gleiche Weise wie die OpenCL -C -Sprache verwendet werden. Aufgrund der großen Vielfalt von C ++ - Sprachmerkmalen können Anwendungen, die in C ++ für OpenCL geschrieben wurden generische Programmierung Paradigma von C ++ ist für die Bibliotheksentwickler sehr attraktiv.
C ++ für OpenCL -Quellen kann von OpenCL -Treibern zusammengestellt werden, die unterstützen cl_ext_cxx_for_opencl Verlängerung.[33] Arm hat Unterstützung für diese Erweiterung im Dezember 2020 angekündigt.[34] Aufgrund der zunehmenden Komplexität der Algorithmen, die auf OpenCL -Geräten beschleunigt wurden[35] in ausführbares binäres Format oder tragbares binäres Format, z. Spire-V.[36] Eine solche ausführbare Datei kann während der Ausführung von OpenCL -Anwendungen mit einer dedizierten OpenCL -API geladen werden.[37]
Binärdateien aus Quellen in C ++ für OpenCL 1.0 können auf OpenCL 2.0 -Konformantengeräten ausgeführt werden. Abhängig von den Sprachmerkmalen, die in solchen Kernelquellen verwendet werden, kann es auch auf Geräten ausgeführt werden, die frühere OpenCL -Versionen oder OpenCL 3.0 unterstützen.
Abgesehen von OpenCL -Treiberkernern, die in C ++ für OpenCL geschrieben wurden[38] Compiler und CLVK[39] Laufzeitschicht genauso wie OpenCL -C -Kerne.
Contributions
C ++ für OpenCL ist eine offene Sprache, die von der Community der in ihrer Dokumentation aufgeführten Mitwirkenden entwickelt wurde.[31]Neue Beiträge zur Sprachsemantikdefinition oder zur Unterstützung von Open -Source -Tools werden von allen Interessierten akzeptiert, sobald sie mit der Hauptdesignphilosophie in Einklang stehen und von den erfahrenen Mitwirkenden überprüft und genehmigt werden.[19]
Geschichte
Opencl wurde ursprünglich von entwickelt von Apple Inc., was gilt Warenzeichen Rechte und in einem ersten Vorschlag in Zusammenarbeit mit technischen Teams bei verfeinert AMD, IBM, Qualcomm, Intel, und Nvidia. Apple reichte diesen ersten Vorschlag an die Khronos Gruppe. Am 16. Juni 2008 wurde die Arbeitsgruppe Khronos berechnet[40] mit Vertretern von CPU, GPU, Embedded-Processor und Software-Unternehmen. Diese Gruppe arbeitete fünf Monate lang, um die technischen Details der Spezifikation für OpenCL 1.0 bis zum 18. November 2008 zu beenden.[41] Diese technische Spezifikation wurde von den Khronos -Mitgliedern geprüft und am 8. Dezember 2008 für die Veröffentlichung genehmigt.[42]
Opencl 1.0
Opencl 1.0 veröffentlicht mit Mac OS X Snow Leopard am 28. August 2009. Laut einer Pressemitteilung von Apple:[43]
Snow Leopard erweitert die Unterstützung für moderne Hardware mit OpenCL (Open Computing Language), mit der jede Anwendung die riesigen Gigaflops der GPU -Computerleistung nutzen kann, die zuvor nur für Grafikanwendungen verfügbar sind. OpenCL basiert auf der C -Programmiersprache und wurde als offener Standard vorgeschlagen.
AMD beschloss, OpenCL anstelle der jetzt veralteten zu unterstützen In der Nähe von Metall in seinem Stream -Framework.[44][45] Rapidmind kündigte ihre Einführung von OpenCL unter ihrer Entwicklungsplattform an, um GPUs von mehreren Anbietern mit einer Schnittstelle zu unterstützen.[46] Am 9. Dezember 2008 kündigte NVIDIA seine Absicht an, die Spezifikation von OpenCL 1.0 für das GPU -Computing -Toolkit vollständig zu unterstützen.[47] Am 30. Oktober 2009 veröffentlichte IBM seine erste OpenCL -Implementierung als Teil der XL -Compiler.[48]
Die Beschleunigung von Berechnungen mit Faktor auf 1000 ist mit OpenCL in Grafikkarten gegen normale CPU möglich.[49] Einige wichtige Funktionen der nächsten Version von OpenCL sind in 1.0 optional wie Doppel- oder Halbprezisionsvorgänge.[50]
Opencl 1.1
OpenCL 1.1 wurde am 14. Juni 2010 von der Khronos Group ratifiziert[51] und fügt signifikante Funktionen für verbesserte parallele Programmierflexibilität, Funktionalität und Leistung hinzu, einschließlich:
- Neue Datentypen einschließlich 3-Komponenten-Vektoren und zusätzliche Bildformate;
- Umgang mit Befehlen aus mehreren Host -Threads und Verarbeitungspuffer auf mehreren Geräten;
- Operationen in Regionen eines Puffers einschließlich Lesen, Schreiben und Kopieren von 1D-, 2D- oder 3D -rechteckigen Regionen;
- Verbesserte Verwendung von Ereignissen zur Ausführung des Befehls zur Befehl;
- Zusätzliche OpenCL-integrierte C-Funktionen wie Ganzzahlklemme, Shuffle und asynchrone, gestreifte Kopien;
- Verbesserte OpenGL -Interoperabilität durch effizientes Teilen von Bildern und Puffern durch Verknüpfen von OpenCL- und OpenGL -Ereignissen.
Opencl 1.2
Am 15. November 2011 kündigte die Khronos Group die OpenCL 1.2 -Spezifikation an.[52] Dies führte zu erheblichen Funktionen über die vorherigen Versionen hinsichtlich der Leistung und den Funktionen für die parallele Programmierung. Die meisten bemerkenswerten Funktionen sind:
- Geräte-Partitionierung: Die Fähigkeit, ein Gerät in Unterverhältnisse zu partitionieren, damit Arbeitszuweisungen einzelne Recheneinheiten zugewiesen werden können. Dies ist nützlich, um Bereiche des Geräts zu reservieren, um die Latenz für zeitkritische Aufgaben zu verringern.
- Separate Kompilierung und Verknüpfung von Objekten: Die Funktionalität zum Kompilieren von OpenCL in externe Bibliotheken für die Einbeziehung in andere Programme.
- Verbesserte Bildunterstützung (optional): 1.2 fügt Unterstützung für 1D -Bilder und 1D/2D -Bildarrays hinzu. Darüber hinaus ermöglichen die OpenGL -Varianten -Erweiterungen nun OpenGL 1D -Texturen und 1D/2D -Textur -Arrays, um OpenCL -Bilder zu erstellen.
- Integrierte Kerne: Benutzerdefinierte Geräte, die spezifische eindeutige Funktionen enthalten, werden jetzt enger in das OpenCL-Framework integriert. Kernel können aufgerufen werden, um spezialisierte oder nicht programmierbare Aspekte der zugrunde liegenden Hardware zu verwenden. Beispiele sind Videocodierung/Decodierung und digitale Signalprozessoren.
- DIRECTX -Funktionalität: DX9 Medienoberflächenfreigabe ermöglicht eine effiziente gemeinsame Nutzung zwischen OpenCL und DX9 oder DXVA Medienflächen. Ebenso ist für DX11 die nahtlose Freigabe zwischen OpenCL- und DX11 -Oberflächen aktiviert.
- Die Fähigkeit zu erzwingen IEEE 754 Die Einhaltung der Einsparung für ein Precision Floating-Punkt-Mathematik: OpenCL ermöglicht standardmäßig die Einzelprezisionsversionen der Abteilung, gegenseitiger und quadratischer Wurzelbetrieb weniger genau als die korrekt abgerundeten Werte, die IEEE 754 benötigt.[53] Wenn der Programmierer das Befehlszeilenargument "-cl-fp32-korrektisch abgehalten" an den Compiler übergibt, werden diese drei Vorgänge an die Anforderungen an die IEEE 754 berechnet, wenn die OpenCL-Implementierung dies unterstützt, und wird nicht kompiliert, wenn die kompiliert werden Die OpenCL-Implementierung unterstützt das Berechnen dieser Vorgänge nicht mit ihren korrekt abgerundeten Werten gemäß der IEEE 754-Spezifikation.[53] Diese Fähigkeit wird durch die Fähigkeit ergänzt, die OpenCL -Implementierung abzufragen, um festzustellen, ob diese Operationen an die Genauigkeit von IEEE 754 durchgeführt werden können.[53]
Opencl 2.0
Am 18. November 2013 kündigte die Khronos Group die Ratifizierung und Veröffentlichung der endgültigen OpenCL 2.0 -Spezifikation an.[54] Aktualisierungen und Ergänzungen zu OpenCL 2.0 umfassen:
- Gemeinsamer virtueller Speicher
- Verschachtelte Parallelität
- Generischer Adressraum
- Bilder (optional, 3D-Image)
- C11 Atomik
- Rohre
- Android Installierbarer Client -Treibererweiterung
- Die halbe Präzision erweitert mit optionaler CL_KHR_FP16 -Erweiterung
- cl_double: doppelte Präzision IEEE 754 (optional)
Opencl 2.1
Die Ratifizierung und Veröffentlichung der vorläufigen Spezifikation OpenCL 2.1 wurde am 3. März 2015 auf der Game Developer Conference in San Francisco bekannt gegeben. Es wurde am 16. November 2015 veröffentlicht.[55] Es führte die OpenCL C ++ - Kernel -Sprache ein, basierend auf einer Teilmenge von C ++ 14während die Unterstützung für die bereits bestehende Openencl -Kernel -Sprache. Vulkan und OpenCL 2.1 Aktie Spire-V als an Zwischendarstellung Ermöglichen, dass hochrangige Sprachfront ein gemeinsames Kompilierungsziel teilen. Die Aktualisierungen der OpenCL -API umfassen:
- Zusätzliche Subgruppenfunktionalität
- Kopieren von Kernelobjekten und Zuständen
- Timer-Abfragen mit niedriger Latenzy-Geräte
- Einnahme des Spire-V-Codes nach Laufzeit
- Ausführung Prioritäts Hinweise für Warteschlangen
- Versand von Nullgröße vom Host
AMD, ARM, Intel, HPC und Yetiware haben die Unterstützung für OpenCL 2.1 deklariert.[56][57]
Opencl 2.2
OpenCL 2.2 bringt die OpenCL C ++ - Kernelsprache in die Kernspezifikation für eine signifikant verbesserte parallele Programmierproduktivität.[58][59][60] Es wurde am 16. Mai 2017 veröffentlicht.[61] Wartungs -Update im Mai 2018 mit Bugfixes veröffentlicht.[62]
- Die OpenCL C ++ - Kernel -Sprache ist eine statische Teilmenge der C ++ 14 Standard und umfasst Klassen, Vorlagen, Lambda-Ausdrücke, Funktionsüberladungen und viele andere Konstrukte für generische und meta-programmierende.
- Verwendet das neue Khronos Spire-V 1.1 Zwischensprache, die die OpenCL C ++ - Kernel -Sprache vollständig unterstützt.
- Die OpenCL-Bibliotheksfunktionen können jetzt die C ++-Sprache verwenden, um eine erhöhte Sicherheit und ein reduziertes undefiniertes Verhalten zu gewährleisten und gleichzeitig auf Merkmale wie Atomik, Iteratoren, Bilder, Sampler, Rohre und integrierte Geräte-Warteschlangentypen und Adressräume zugreifen.
- Pipe Storage ist ein neuer Geräte-Seite-Typ in OpenCL 2.2, der für FPGA-Implementierungen nützlich ist, indem sie die Konnektivitätsgröße und -art zum Kompilierungszeit bekannt machen und eine effiziente Kommunikation zwischen Gerätekopien zwischen Kernel ermöglichen.
- OpenCL 2.2 enthält auch Funktionen für eine verbesserte Optimierung des generierten Code zur Programmveröffentlichungszeit.
- Läuft auf einer OpenCL 2.0-fähigen Hardware (es ist nur ein Treiber-Update erforderlich).
Opencl 3.0
Die OpenCL 3.0 -Spezifikation wurde am 30. September 2020 veröffentlicht, nachdem er seit April 2020 in der Vorschau war. OpenCL 1.2 -Funktionalität ist zu einer obligatorischen Grundlinie geworden, während alle Funktionen von OpenCL 2.x und OpenCL 3.0 optional gemacht wurden. Die Spezifikation behält die OpenCL -C -Sprache bei und verwertet die OpenCL C ++ - Kernel -Sprache, wodurch sie durch C ++ für OpenCL -Sprache ersetzt wird[19] based on a Klang/Llvm Compiler, der eine Teilmenge von implementiert C ++ 17 und Spire-V Zwischencode.[63][64][65] Version 3.0.7 von C ++ für OpenCL mit einigen Khronos -Openencl -Erweiterungen wurden bei Iwocl 21 präsentiert.[66] Die tatsächliche ist 3.0.11 mit einigen neuen Erweiterungen und Korrekturen. Nvidia, die eng mit der Khronos OpenCL -Arbeitsgruppe zusammenarbeitet, verbesserte Vulkan Interop mit Semaphoren und Speicherfreigabe.[67]
Roadmap

Bei der Veröffentlichung von OpenCL 2.2 kündigte die Khronos -Gruppe an, dass OpenCL nach Möglichkeit miteinander konvergieren würde Vulkan So aktivieren Sie die Flexibilität der OpenCL -Softwarebereitstellung über beide APIs.[68][69] Dies wurde nun durch Adobe's Premiere -Ansturm mit dem CLSPV demonstriert[38] Open Source -Compiler zum kompilierten Mengen an OpenCL -C -Kernel -Code zum Ausführen einer Vulkan -Laufzeit für die Bereitstellung auf Android.[70] OpenCL hat eine nach vorne aussehende Roadmap unabhängig von Vulkan, wobei "OpenCL Next" im Jahr 2020 in der Entwicklung und Targeting-Veröffentlichung ist Debug-Info von Spire-V erweiterte. OpenCL erwägt auch den vulkanähnlichen Lader und die Schichten sowie ein „flexibles Profil“ für die Flexibilität der Bereitstellung bei mehreren Beschleunigungsarten.[71]
Open Source -Implementierungen

Clinfo
, ein Befehlszeilen-Tool zum Anzeigen von OpenCL-InformationenOpenCL besteht aus einer Reihe von Header und a gemeinsames Objekt Das ist zur Laufzeit geladen. Ein installierbarer Client -Treiber (ICD) muss für jede Klasse von Anbieter auf der Plattform installiert werden, für die die Laufzeit unterstützt werden müsste. Das heißt zum Beispiel, um NVIDIA -Geräte auf einer Linux -Plattform zu unterstützen, müsste der NVIDIA -ICD so installiert werden . Der Standard -OpenCL -Header wird von der Verbraucheranwendung verwendet. Aufrufe für jede Funktion werden dann von der OpenCL -Laufzeit zum entsprechenden Treiber mit dem ICD verfolgt. Jeder Anbieter muss jeden OpenCL -Anruf in seinem Treiber implementieren.[72]
Der Apfel,[73] Nvidia,[74] Rocm, Rapidmind[75] und Gallium3d[76] Implementierungen von OpenCL basieren alle auf dem Llvm Compiler -Technologie und verwenden Sie die Klang Compiler als Frontend.
- Mesa Gallium Compute
- Eine Implementierung von OpenCL (tatsächliche 1.1 unvollständige, meist fertiggestellte Amd Radeon Gcn) Für eine Reihe von Plattformen wird im Rahmen des Gallium Compute -Projekts gepflegt,[77] das baut auf der Arbeit der auf MESA -Projekt Unterstützung mehrerer Plattformen. Früher war dies als Clover bekannt.,[78] Tatsächliche Entwicklung: Hauptsächlich Unterstützung für das Ausführen von unvollständigem Rahmen mit tatsächlichen LLVM und Clang, einige neue Funktionen wie FP16 in 17.3,[79] Target Complete OpenCL 1.0, 1.1 und 1.2 für AMD und NVIDIA. Neue Grundentwicklung erfolgt von roter Hut Mit Spire-V auch für Klee.[80][81] Das neue Ziel ist modular OpenCL 3.0 mit vollständiger Unterstützung von OpenCL 1.2. Der tatsächliche Zustand ist in Mesamatrix erhältlich. Bildunterstützungen stehen hier im Fokus der Entwicklung.
Rusticl ist eine neue Implementierung für Gallium Compute mit Rost anstelle von C für einen besseren Code. In MESA 22.2 wird die experimentelle Implementierung mit OpenCL 3.0-Support- und Bildverlängerungsimplementierung für Programme wie DarkTable verfügbar sein.[82]
- Beignet
- Eine Implementierung von Intel für seine Ivy Bridge + Hardware wurde 2013 veröffentlicht.[83] Diese Software aus dem China -Team von Intel hat Kritik von Entwicklern bei AMD und angezogen roter Hut,[84] ebenso gut wie Michael Larabel von Phoronix.[85] Tatsächliche Version 1.3.2 Support OpenCL 1.2 Complete (Ivy Bridge und höher) und OpenCL 2.0 Optional für Skylake und neuer.[86][87] Die Unterstützung für Android wurde zu Bestet hinzugefügt.[88] Tatsächliche Entwicklungsziele: Nur Unterstützung für 1.2 und 2.0, Straße zu OpenCL 2.1, 2.2, 3.0 ist nach Neo gegangen.
- NEO
- Eine Implementierung von Intel für Gen. 8 Broadwell + Gen. 9 Hardware veröffentlicht im Jahr 2018.[89] Dieser Treiber ersetzt die Implementierung von Beignet für unterstützte Plattformen (nicht älter 6.gen nach Haswell). NEO bietet OpenCL 2.1 -Unterstützung auf Kernplattformen und OpenCL 1.2 auf Atom -Plattformen.[90] Tatsächlich werden im Jahr 2020 auch Grafik Gen 11 Ice Lake und Gen 12 Tiger Lake unterstützt. Neues OpenCL 3.0 ist für Alder Lake, Tiger Lake nach Broadwell mit Version 20.41+ erhältlich. Es enthält jetzt optionale OpenCL 2.0, 2.1 Funktionen und einige von 2.2.
- Rocm
- Im Rahmen von AMDs erstellt Gpuopen, Rocm (Radeon Open Compute) ist ein Open -Source -Linux -Projekt, das auf OpenCL 1.2 mit Sprachunterstützung für 2.0 basiert. Das System ist mit allen modernen AMD -CPUs und APUs (tatsächlich teilweise GFX 7, GFX 8 und 9) sowie mit Intel Gen7.5+ CPUs (nur mit PCI 3.0) kompatibel.[91][92] Mit Version 1.9 ist die Unterstützung in einigen Punkten experimentell an Hardware mit PCIe 2.0 und ohne Atomik erweitert. Ein Überblick über die tatsächlichen Arbeiten erfolgt auf XDC2018.[93][94] ROCM Version 2.0 unterstützt OpenCL 2.0, einige Fehler und Einschränkungen stehen jedoch in der TODO -Liste.[95][96] Version 3.3 verbessert sich im Detail.[97] Version 3.5 unterstützt OpenCL 2.2.[98] Version 3.10 war mit Verbesserungen und neuen APIs.[99] Angekündigt bei SC20 ist ROCM 4.0 mit Unterstützung des AMD -Computerkarteninstinkts MI 100.[100] Die tatsächliche Dokumentation von 5.1.1 und zuvor ist bei GitHub verfügbar.[101][102] OpenCL 3.0 ist verfügbar.
- Pocl
- Eine tragbare Implementierung, die CPUs und einige GPUs unterstützt CUDA und HSA). Aufbauend auf Klang und Llvm.[103] Mit Version 1.0 wurde OpenCL 1.2 zusammen mit einigen 2.x -Funktionen nahezu vollständig implementiert.[104] Version 1.2 ist mit LLVM/Clang 6.0, 7.0 und Full OpenCL 1.2 Support mit allen geschlossenen Tickets in Meilenstein 1.2.[104][105] OpenCL 2.0 ist nahezu voll implementiert.[106] Version 1.3 unterstützt Mac OS X.[107] Version 1.4 beinhaltet Unterstützung für Llvm 8.0 und 9.0.[108] Version 1.5 implementiert LLVM/Clang 10 -Unterstützung.[109] Version 1.6 implementiert LLVM/Clang 11 Unterstützung und Cuda -Beschleunigung.[110] Die tatsächlichen Ziele sind vollständig opencl 2.x, opencl 3.0 und Verbesserung der Leistung. POCL 1.6 ist mit manueller Optimierung auf derselben Ebene der Intel -Rechenzeit.[111] Version 1.7 implementiert LLVM/Clang 12 Support und einige neue OpenCL 3.0 -Funktionen.[112] Version 1.8 implementiert LLVM/Clang 13 Support.[113] Version 3.0 implementiert OpenCL 3.0 auf minimalem Niveau und LLVM/Clang 14.[114]
- Kleeblatt
- Ein Hafen von Mesa Clover für ARM mit voller Unterstützung von OpenCL 1.2,[115][116] Keine tatsächliche Entwicklung für 2.0.
- Freeocl
- Eine CPU -fokussierte Implementierung von OpenCL 1.2, die einen externen Compiler implementiert, um eine zuverlässigere Plattform zu erstellen.[117] Keine tatsächliche Entwicklung.
- Mocl
- Eine OpenCL-Implementierung, die auf POCL durch die NUDT-Forscher für Matrix-2000 basiert, wurde 2018 veröffentlicht. Die Matrix-2000-Architektur soll die Intel Xeon Phi Acceleratoratoren des Tianhe-2-Supercomputers ersetzen. Dieses Programmierrahmen ist auf LLVM V5.0 aufgebaut und wiederholt einige Code -Stücke von POCL wieder. Um das Hardwarepotential zu entsperren, verwendet die Gerätelaufzeit eine Push-basierte Aufgabe-Versandstrategie und die Leistung der Kernelatomik wird erheblich verbessert. Dieser Framework wurde im TH-2A-System eingesetzt und ist für die Öffentlichkeit leicht zur Verfügung.[118] Ein Teil der Software wird als nächstes portiert, um POCL zu verbessern.[104]
- VC4CL
- Eine OpenCL 1.2 -Implementierung für die Videokore IV (BCM2763) -Prozessor, der in der verwendet wird Raspberry Pi Vor seinem Modell 4.[119]
Verkäuferimplementierungen
Zeitleiste der Anbieterimplementierungen
- Juni 2008: Während der WWDC -Konferenz von Apple ist eine frühe Beta von Mac OS X Snow Leopard wurde den Teilnehmern zur Verfügung gestellt. Es enthielt die erste Beta -Implementierung von OpenCL, etwa 6 Monate vor der endgültigen Version 1.0, die Ende 2008 ratifiziert wurde. Sie zeigten auch zwei Demos. Eines war ein Raster mit 8x8 -Bildschirmen, die jeweils den Bildschirm einer emulierten Apple II -Maschine anzeigen - insgesamt 64 unabhängige Instanzen, die jeweils ein berühmtes Karate -Spiel ausführen. Dies zeigte eine Aufgabeparallelität auf der CPU. Die andere Demo war eine N-Body-Simulation, die auf der GPU eines Mac Pro, einer Daten parallele, ausgeführt wurde.
- 10. Dezember 2008: AMD und NVIDIA veranstalteten die erste öffentliche Openencl-Demonstration, eine 75-minütige Präsentation bei Siggraph Asia 2008. AMD zeigte eine CPU-beschleunigte OpenCL-Demo, die die Skalierbarkeit von OpenCL auf einem oder mehreren Kernen erklärte, während Nvidia eine GPU-beschleunigte Demo zeigte.[120][121]
- 16. März 2009: Auf der 4. Multicore Expo kündigten Imagination Technologies die an Powervr SGX543MP, die erste GPU dieses Unternehmens, die OpenCL -Unterstützung bietet.[122]
- 26. März 2009: bei GDC 2009, AMD und Havok zeigte die erste funktionierende Implementierung für OpenCL -Beschleunigung Havok -Stoff auf AMD Radeon HD 4000 -Serie GPU.[123]
- 20. April 2009: Nvidia kündigte die Veröffentlichung seines OpenCL -Treibers an und SDK an Entwickler, die an seinem OpenCL Early Access -Programm teilnehmen.[124]
- 5. August 2009: AMD hat die ersten Entwicklungstools für seine OpenCL -Plattform als Teil seiner vorgestellt Ati Stream SDK V2.0 Beta -Programm.[125]
- 28. August 2009: Apple veröffentlicht Mac OS X Snow Leopard, die eine vollständige Implementierung von OpenCL enthält.[126]
- 28. September 2009: NVIDIA hat seine eigenen OpenCL -Treiber- und SDK -Implementierung veröffentlicht.
- 13. Oktober 2009: AMD hat das vierte Beta des ATI Stream SDK 2.0 veröffentlicht, der eine vollständige OpenCL -Implementierung für beide bietet R700/R800 GPUS und SSE3 fähige CPUs. Das SDK ist sowohl für Linux als auch für Windows verfügbar.[127]
- 26. November 2009: NVIDIA veröffentlichte Treiber für OpenCL 1.0 (Rev. 48).
- 27. Oktober 2009: S3 Veröffentlicht ihr erstes Produkt, das native OpenCL 1.0 unterstützt - den Chrome 5400E eingebetteten Grafikprozessor.[128]
- 10. Dezember 2009: ÜBER Veröffentlicht ihr erstes Produkt unterstützt OpenCL 1.0 - ChromotionHD 2.0 Video -Prozessor im VN1000 -Chipsatz.[129]
- 21. Dezember 2009: AMD veröffentlichte die Produktionsversion des ATI Stream SDK 2.0,[130] Dies bietet opencl 1.0 Unterstützung für R800 GPU- und Beta -Unterstützung für R700 GPUS.
- 1. Juni 2010: Ziilabs Veröffentlicht Details zu ihrer ersten OpenCL -Implementierung für den ZMS -Prozessor für Handheld-, Embedded- und Digital Home Products.[131]
- 30. Juni 2010: IBM veröffentlichte eine vollständig konformante Version von OpenCL 1.0.[4]
- 13. September 2010: Intel Veröffentlichte Details zu ihrer ersten OpenCL -Implementierung für die Sandy Bridge Chip -Architektur. Sandy Bridge wird die neueste Grafik -Chip -Technologie von Intel direkt in die zentrale Verarbeitungseinheit integrieren.[132]
- 15. November 2010: Wolfram -Forschung veröffentlicht Mathematica 8 mit Openclllink Paket.
- 3. März 2011: Khronos Gruppe kündigt die Bildung der an Webcl Arbeitsgruppe zur Untersuchung von a JavaScript Bindung an opencl. Dies schafft das Potenzial, sich zu nutzen GPU und Multi-Core-CPU parallele Verarbeitung von a Webbrowser.[133][134]
- 31. März 2011: IBM veröffentlichte eine vollständig konformante Version von OpenCL 1.1.[4][135]
- 25. April 2011: IBM hat OpenCL Common Runtime V0.1 für Linux auf X86 -Architektur veröffentlicht.[136]
- 4. Mai 2011: Nokia Research veröffentlicht eine Open -Source -Webcl -Erweiterung für die Feuerfuchs Webbrowser, das eine JavaScript -Bindung an OpenCL bietet.[137]
- 1. Juli 2011: Samsung Electronics veröffentlicht eine Open -Source -Prototyp -Implementierung von WebCl für Webkit, die eine JavaScript -Bindung an OpenCL bietet.[138]
- 8. August 2011: AMD veröffentlichte das OpenCL-gesteuerte AMD-Softwareentwicklungskit (SDK) V2.5 (APPCL AMD Accelerated Parallel Processing Ati Stream SDK als Technologie und Konzept.[139]
- 12. Dezember 2011: AMD hat die AMD -App SDK V2.6 veröffentlicht[140] die eine Vorschau von OpenCL 1.2 enthält.
- 27. Februar 2012: Die Portland Group veröffentlichte den PGI OpenCL-Compiler für Multi-Core ARM CPUs.[141]
- 17. April 2012: Khronos veröffentlichte einen Webcl -Arbeitsentwurf.[142]
- 6. Mai 2013: Altera veröffentlichte das Altera SDK für OpenCL, Version 13.0.[143] Es ist mit OpenCL 1.0 konform.[144]
- 18. November 2013: Khronos kündigte an, dass die Spezifikation für OpenCL 2.0 abgeschlossen war.[145]
- 19. März 2014: Khronos veröffentlicht die Webcl 1.0 -Spezifikation.[146][147]
- 29. August 2014: Intel veröffentlicht HD Graphics 5300 Treiber, der OpenCL 2.0 unterstützt.[148]
- 25. September 2014: AMD veröffentlicht Catalyst 14.41 RC1, der einen OpenCL 2.0 -Treiber enthält.[149]
- 14. Januar 2015: Xilinx Inc. kündigt die Sdaccel -Entwicklungsumgebung für OpenCL, C und C ++ an, erreicht die Konformität von Khronos.[150]
- 13. April 2015: NVIDIA veröffentlicht WHQL -Treiber V350.12, das OpenCL 1.2 -Unterstützung für GPUs basierend auf Kepler oder späteren Architekturen enthält.[151] Treiber 340+ Support OpenCL 1.1 für Tesla und Fermi.
- 26. August 2015: AMD hat die AMD -App SDK v3.0 veröffentlicht[152] Dies enthält die vollständige Unterstützung von OpenCL 2.0 und Probencodierung.
- 16. November 2015: Khronos kündigte an, dass die Spezifikation für OpenCL 2.1 abgeschlossen war.[153]
- 18. April 2016: Khronos kündigte an, dass die Spezifikation für OpenCL 2.2 vorläufig abgeschlossen war.[59]
- 3. November 2016 Intel -Unterstützung für Gen7+ von OpenCL 2.1 in SDK 2016 R3.[154]
- 17. Februar 2017: Nvidia beginnt die Bewertung der Unterstützung von OpenCL 2.0 mit Treiber 378.66.[155][156][157]
- 16. Mai 2017: Khronos kündigte an, dass die Spezifikation für OpenCL 2.2 mit SPIR-V 1.2 abgeschlossen war.[158]
- 14. Mai 2018: Khronos kündigte Wartungs -Update für OpenCL 2.2 mit Bugfix und Unified Header an.[62]
- 27. April 2020: Khronos kündigte die provisorische Version von OpenCL 3.0 an.
- 1. Juni 2020: Intel Neo Runtime mit OpenCL 3.0 für New Tiger Lake.
- 3. Juni 2020: AMD kündigte ROCM 3.5 mit OpenCL 2.2 -Unterstützung an.[159]
- 30. September 2020: Khronos kündigte an, dass die Spezifikationen für OpenCL 3.0 abgeschlossen waren (CTS auch verfügbar).
- 16. Oktober 2020: Intel wurde mit NEO 20.41 Support für OpenCL 3.0 angekündigt (umfasst hauptsächlich optional opencl 2.x).
- 6. April 2021: Nvidia unterstützt OpenCL 3.0 für Ampere. Maxwell und später GPUs unterstützt auch OpenCL 3.0 mit NVIDIA -Treiber 465+.[160]
Geräte
Ab 2016 läuft OpenCL weiter Grafikverarbeitungseinheiten (Gpus), CPUs mit Simd Anweisungen, Fpgas, Movidius Myriad 2, Adapteva Epiphany und DSPs.
Khronos Konformitätstestsuite
- Um offiziell konform zu sein, muss eine Implementierung die Khronos Conformance Test Suite (CTS) bestehen, wobei die Ergebnisse beim Khronos Adoptters -Programm vorgelegt werden.[161] Der Khronos CTS -Code für alle OpenCL -Versionen ist seit 2017 in Open Source erhältlich.[162]
Konformante Produkte
Das Khronos Gruppe Unterhält eine erweiterte Liste von OpenCL-Konformantenprodukten.[4]
Synopse von OpenCl -Konformantenprodukten[4] | ||||
---|---|---|---|---|
AMD SDKs (Unterstützt OpenCL Zentralprozessor und Beschleunigte Verarbeitungseinheit Geräte), (GPU: Terascale 1: OpenCL 1.1, Terascale 2: 1.2, GCN 1: 1.2+, GCN 2+: 2.0+) | X86 + SSE2 (oder höher) kompatible CPUs 64-Bit & 32-Bit,[163] Linux 2.6 PC, Windows Vista/7/8.x/10 PC | AMD Fusion E-350, E-240, C-50, C-30 mit HD 6310/HD 6250 | AMD Radeon/Mobilität HD 6800, HD 5x00 -Serie GPU, IGPU HD 6310/HD 6250, HD 7xxx, HD 8xxx, R2XX, R3XX, RX 4xx, RX 5xx, Vega -Serie | AMD Firepro VX800 -Serie GPU und später Radeon Pro |
Intel SDK für OpenCL -Anwendungen 2013[164] (Unterstützt Intel Core Processors und Intel HD Graphics 4000/2500) 2017 R2 mit OpenCL 2.1 (Gen7+), SDK 2019 entfernt OpenCL 2.1,[165] Aktuelles SDK 2020 Update 3 | Intel CPUs mit Sse 4.1, SSE 4.2 oder Avx Unterstützung.[166][167] Microsoft Windows, Linux | Intel Core Prozessor i7, i5, i3; Intel Core I7/5/3 der 2. Generation der 2. Generation Intel Core -Prozessoren mit Intel HD -Grafik 4000/2500 und neuer | Intel Core 2 Solo, Duo Quad, extrem und neuer | Intel Xeon 7x00,5x00,3x00 (kernbasiert) und neuer |
IBM Server mit OpenCL Development Kit Für Linux on Power Laufen weiter Power VSX[168][169] | IBM Power 775 (PERCS), 750 | IBM Bladecenter PS70X Express | IBM Bladecenter JS2X, JS43 | IBM Bladecenter QS22 |
IBM OpenCL Common Runtime (OCR) | X86 + SSE2 (oder höher) kompatible CPUs 64-Bit & 32-Bit;[171] Linux 2.6 PC | AMD Fusion, Nvidia Ion und Intel Core i7, i5, i3; 2. Generation Intel Core i7/5/3 | Amd Radeon, Nvidia Geforce und Intel Core 2 Solo, Duo, Quad, extrem | ATI -Firepro, Nvidia Quadro und Intel Xeon 7x00,5x00,3x00 (basiert) |
NVIDIA OpenCL -Treiber und Tools,[172] Chips: Tesla, Fermi: OpenCL 1.1 (Treiber 340+), Kepler, Maxwell, Pascal, Volta, Turing: OpenCL 1.2 (Fahrer 370+), OpenCl 2.0 Beta (378,66), OpenCl 3.0: Maxwell nach Ampere (Fahrer 465+)) | Nvidia Tesla C/d/s | Nvidia Geforce GTS/GT/GTX, | Nvidia Ion | Nvidia Quadro FX/NVX/Plex, Quadro, Quadro K, Quadro M, Quadro P, Quadro mit Volta, Quadro RTX mit Turing, Ampere |
Alle Standard-Konformanten-Implementierungen können mit einem der Clinfo-Tools abgefragt werden (es gibt mehrere Tools mit demselben Namen und ähnlichen Funktionssatz).[173][174][175]
Versionsunterstützung
Produkte und ihre Version von OpenCL -Unterstützung umfassen:[176]
OpenCL 3.0 -Unterstützung
Alle Hardware mit OpenCL 1.2+ ist möglich, OpenCL 2.x nur optional, Khronos Test Suite seit 2020-10 verfügbar[177][178]
- .[179]
- (2020) Intel 6., 7., 8., 9., 10., 11. Gen -Gen -Prozessoren (ProzessorenSkylake, Kaby Lake, Kaffeesee, Kometsee, Ice Lake, Tigersee) mit dem neuesten Intel Windows Graphics -Treiber
- (2021) Intel 11. Prozessoren der 12. Gen (Rocket Lake, Alder Lake) mit dem neuesten Intel Windows Graphics -Treiber
- (2022) Intel 13. Gen -Gen -Prozessoren (Raptor Lake) mit dem neuesten Intel Windows Graphics -Treiber
- (2022) Intel Arc Diskrete Grafiken mit dem neuesten Intel Arc Windows -Grafik -Treiber
- (2021) Nvidia Maxwell, Pascal, Volta, Turing und Ampere mit NVIDIA Graphics -Treiber 465+.[160]
OpenCL 2.2 Unterstützung
Noch keiner: Khronos Test Suite Ready, mit Treiber -Aktualisierung aller Hardware mit 2.0 und 2.1 Support möglich
- Intel Neo Compute: Arbeit für tatsächliche Produkte in Arbeit[180]
- ROCM: Version 3.5+ meistens
OpenCL 2.1 Unterstützung
- (2018+) Unterstützung auf Intel 5. und 6. Gen -Gen -Prozessoren (ProzessorenBroadwell, Skylake)
- (2017+) Intel 7., 8., 9., 10. Gen -Prozessoren (Prozessoren der 10. Gen (Kaby Lake, Kaffeesee, Kometsee, Ice Lake)
- Khronos: Mit dem Treiber -Update alle Hardware mit 2.0 -Support möglich
OpenCL 2.0 -Unterstützung
- (2011+) AMD GCN GPUs (HD 7700+/HD 8000/RX 200/RX 300/RX 400/RX 500/RX 5000-Serie), einige GCN 1ST-Gen nur 1,2 mit einigen Erweiterungen
- (2013+) AMD GCN APUs (Jaguar, Dampfwalze, Puma, Bagger & Zen-basierend)
- (2014+) Intel 5. und 6. Gen -Gen -Prozessoren (Broadwell, Skylake)
- (2015+) Qualcomm Adreno 5xx -Serie
- (2018+) Qualcomm Adreno 6xx -Serie
- (2017+) Arm Mali (Bifrost) G51 und G71 in Android 7.1 und Linux
- (2018+) Arm Mali (Bifrost) G31, G52, G72 und G76
- (2017+) Unvollständige Unterstützung für Bewertungen: Nvidia Kepler, Maxwell, Pascal, Volta und Turing GPUs (Geforce 600, 700, 800, 900 und 10er, Quadro K-, M- & P-Serie, Tesla K-, M- & P-Serie) mit Treiberversion 378.66+
OpenCL 1.2 Unterstützung
- (2011+) für einige AMD GCN 1stgen einige OpenCL 2.0 -Funktionen, die heute nicht möglich sind, aber viele weitere Erweiterungen als Terascale
- (2009+) AMD Terascale 2 & 3 GPUs (RV8XX, RV9XX in HD 5000, 6000 & 7000 -Serie)
- (2011+) AMD Terascale APUs (K10, Bobcat & Piledriver-basierend)
- (2012+) Nvidia Kepler, Maxwell, Pascal, Volta und Turing GPUs (Geforce 600, 700, 800, 900, 10, 16, 20 Serien, Quadro K-, M- & P-Serie, Tesla K-, M & P-Serie)
- (2012+) Intel 3rd- und 4. Generationsprozessoren (ProzessorenIvy Bridge, Haswell)
- (2013+) Qualcomm Adreno 4xx -Serie
- (2013+) Arm Mali Midgard 3. Gen (T760)
- (2015+) Arm Mali Midgard 4. Gen (T8XX)
OpenCL 1.1 Unterstützung
- (2008+) Einige AMD Terascale 1 GPUs (RV7XX in der HD4000-Serie)
- (2008+) Nvidia Tesla, Fermi GPUs (Geforce 8, 9, 100, 200, 300, 400, 500er, Quadro-Serie oder Tesla-Serie mit Tesla oder Fermi GPU)
- (2011+) Qualcomm Adreno 3xx -Serie
- (2012+) Arm Mali Midgard 1. und 2. Gen (T-6xx, T720)
OpenCL 1.0 -Unterstützung
- Meistens auf 1.1 und 1.2 nach dem ersten Treiber nur für 1.0 aktualisiert
Portabilität, Leistung und Alternativen
Ein wichtiges Merkmal von OpenCL ist die Portabilität, über seinen abstrahierten Speicher und Ausführungsmodellund der Programmierer kann hardwarespezifische Technologien wie Inline nicht direkt verwenden Parallele Thread -Ausführung (PTX) Für NVIDIA -GPUs, es sei denn, sie sind bereit, die direkte Portabilität auf anderen Plattformen aufzugeben. Es ist möglich, einen OpenCL -Kernel für jede konformante Implementierung auszuführen.
Die Leistung des Kernels ist jedoch nicht unbedingt über Plattformen hinweg tragbar. Es wurde gezeigt, dass vorhandene Implementierungen wettbewerbsfähig sind, wenn der Kernelcode ordnungsgemäß abgestimmt ist, und Auto-Tuning wurde als Lösung für das Problem der Leistungsträglichkeit vorgeschlagen,[181] Ergeben "akzeptabler Leistungsniveaus" in experimentellen linearen Algebra -Kerneln.[182] Die Portabilität einer gesamten Anwendung mit mehreren Kerneln mit unterschiedlichem Verhalten wurde ebenfalls untersucht und zeigt, dass die Portabilität nur begrenzte Kompromisse erforderte.[183]
Eine Studie bei Delft University Ab 2011 verglichen das CUDA Die Programme und ihre einfache Übersetzung in OpenCL C stellten fest, dass CUDA OpenCL bei der NVIDIA -Implementierung höchstens 30% übertreffen. Die Forscher stellten fest, dass ihr Vergleich durch die Anwendung manueller Optimierungen auf die OpenCL -Programme gerechter werden könnte. In diesem Fall gab es "keinen Grund für OpenCL, eine schlechtere Leistung als CUDA zu erzielen". Die Leistungsunterschiede könnten hauptsächlich auf Unterschiede im Programmiermodell (insbesondere des Speichermodells) und den Compiler -Optimierungen von NVIDIA für CUDA im Vergleich zu OpenCL zurückgeführt werden.[181]
Eine weitere Studie bei D-Wave Systems Inc. ergab, dass "die Leistung des OpenCL-Kernels zwischen 13% und 63% langsamer liegt und die End-to-End-Zeit zwischen etwa 16% und 67% langsamer liegt als die Leistung von CUDA.[184]
Die Tatsache, dass OpenCL es der Workloads ermöglicht, von CPU und GPU zu teilen, die dieselben Programme ausführen, bedeutet, dass Programmierer beide ausnutzen können, indem sie die Arbeit auf die Geräte teilen.[185] Dies führt zu dem Problem, zu entscheiden, wie die Arbeit aufgeteilt werden soll, da sich die relativen Operationsgeschwindigkeiten zwischen den Geräten unterscheiden. Maschinelles Lernen wurde vorgeschlagen, dieses Problem zu lösen: Grewe und O'Boyle beschreiben ein System von Support-Vektor-Maschinen Ausgebildet auf Kompilierungszeitfunktionen des Programms, mit denen das Problem der Geräte-Partitionierung statisch festgelegt werden kann, ohne die Programme tatsächlich auszuführen, um ihre Leistung zu messen.[186]
In einem Vergleich der tatsächlichen Grafikkarten der AMD-RDNA 2- und NVIDIA-RTX-Serie gibt es ein unentschiedenes Ergebnis von OpenCL-Tests. Mögliche Leistung stieg aus der Verwendung von Nvidia cuda oder Optix wurden nicht getestet.[187]
Siehe auch
Verweise
- ^ "Khronos OpenCl Registry". Khronos Gruppe. 27. April 2020. Abgerufen 27. April, 2020.
- ^ "Android -Geräte mit OpenCL -Unterstützung". Google Dokumente. Arrayfire. Abgerufen 28. April, 2015.
- ^ "FreeBSD Graphics/OpenCL". Freebsd. Abgerufen 23. Dezember, 2015.
- ^ a b c d e "Konformante Produkte". Khronos Gruppe. Abgerufen 9. Mai, 2015.
- ^ Sotschacki, Bartosz (19. Juli 2019). "Die Spezifikation von OpenCL C ++ 1.0" (PDF). Khronos OpenCl Arbeitsgruppe. Abgerufen 19. Juli, 2019.
- ^ Munshi, Aaftab; Howes, Lee; Sotschaki, Barosz (27. April 2020). "Die OpenCL C -Spezifikationsversion: 3.0 Dokumentrevision: v3.0.7" (PDF). Khronos OpenCl Arbeitsgruppe. Archiviert von das Original (PDF) am 20. September 2020. Abgerufen 28. April, 2021.
- ^ "Das C ++ für OpenCL 1.0 Programmiersprache Dokumentation Revision 2". Khronos OpenCl Arbeitsgruppe. 31. März 2021. Abgerufen 18. April, 2021.
- ^ "Konformante Unternehmen". Khronos Gruppe. Abgerufen 8. April, 2015.
- ^ Gianelli, Silvia E. (14. Januar 2015). "Xilinx SDACCEL -Entwicklungsumgebung für OpenCL, C und C ++, erreicht die Khronos -Konformität". PR Newswire. Xilinx. Abgerufen 27. April, 2015.
- ^ Howes, Lee (11. November 2015). "Die OpenCL -Spezifikationsversion: 2.1 Dokumentrevision: 23" (PDF). Khronos OpenCl Arbeitsgruppe. Abgerufen 16. November, 2015.
- ^ a b Gaster, Benedict; Howes, Lee; Kaeli, David R.; Mistry, Perhaad; Schaa, Dana (2012). Heterogenes Computing mit OpenCL: Überarbeitete OpenCL 1.2 Edition. Morgan Kaufmann.
- ^ Tompson, Jonathan; Schlachter, Kristofer (2012). "Eine Einführung in das OpenCL -Programmiermodell" (PDF). New York University Media Research Lab. Archiviert von das Original (PDF) am 6. Juli 2015. Abgerufen 6. Juli, 2015.
- ^ a b c d Stone, John E.; Gohara, David; Shi, Guochin (2010). "OpenCL: Ein paralleler Programmierstandard für heterogene Computersysteme". Computing in Science & Engineering. 12 (3): 66–73. Bibcode:2010cse .... 12c..66s. doi:10.1109/MCSE.2010.69. PMC 2964860. PMID 21037981.
- ^ Klöckner, Andreas; Pinto, Nicolas; Lee, Yunsup; Catanzaro, Bryan; Ivanov, Paul; Fasih, Ahmed (2012). "Pycuda und Pyopenc: Ein skriptbasierter Ansatz zur GPU-Laufzeit-Codegenerierung". Parallele Computing. 38 (3): 157–174. Arxiv:0911.3456. doi:10.1016/j.parco.2011.09.001. S2CID 18928397.
- ^ "OpenCL - Öffnen Sie die Bindungen für Computersprachen". metacpan.org. Abgerufen 18. August, 2018.
- ^ "D Bindung für OpenCl". dlang.org. Abgerufen 29. Juni, 2021.
- ^ "SPIR - Die erste offene Standardsprache für parallele Berechnung und Grafik". Khronos Gruppe. 21. Januar 2014.
- ^ "SYCL - C ++ Single -Source Heterogene Programmierung für OpenCL". Khronos Gruppe. 21. Januar 2014. Archiviert von das Original am 18. Januar 2021. Abgerufen 24. Oktober, 2016.
- ^ a b c "C ++ für OpenCL, OpenCl-Guide". GitHub. Abgerufen 18. April, 2021.
- ^ a b c Aaftab Munshi, hrsg. (2014). "Die OpenCL C -Spezifikation, Version 2.0" (PDF). Abgerufen 24. Juni, 2014.
- ^ a b "Einführung in die OpenCL -Programmierung 201005" (PDF). AMD. S. 89–90. Archiviert von das Original (PDF) am 16. Mai 2011. Abgerufen 8. August, 2017.
- ^ "Opencl" (PDF). Siggraph2008. 14. August 2008. archiviert von das Original (PDF) am 16. Februar 2012. Abgerufen 14. August, 2008.
- ^ "FFT an die G80 -Architektur anpassen" (PDF). Vasily Volkov und Brian Kazian, UC Berkeley CS258 Projektbericht. Mai 2008. Abgerufen 14. November, 2008.
- ^ "Opencl_fft". Apfel. 26. Juni 2012. Abgerufen 18. Juni, 2022.
- ^ Trevett, Neil (28. April 2020). "Khronos Ankündigungen und Podiumsdiskussion" (PDF).
- ^ Stulova, Anastasia; Hickey, Neil; Van Haastregt, Sven; Antognini, Marco; Petit, Kevin (27. April 2020). "Die C ++ für OpenCL -Programmiersprache". Verfahren des internationalen Workshops über OpenCL. Iwocl '20. München, Deutschland: Verband für Computermaschinen: 1–2. doi:10.1145/33888333.3388647. ISBN 978-1-4503-7531-3. S2CID 216554183.
- ^ a b Khronosgroup/OpenCL-Docs, Die Khronos Group, 16. April 2021, abgerufen 18. April, 2021
- ^ "Clang Release 9 Dokumentation, OpenCL -Unterstützung". Releases.llvm.org. September 2019. Abgerufen 18. April, 2021.
- ^ "Klang 9, Spracherweiterungen, OpenCL". Releases.llvm.org. September 2019. Abgerufen 18. April, 2021.
- ^ "Veröffentlichung der Dokumentation von C ++ für OpenCL-Kernel-Sprache, Version 1.0, Revision 1 · Khronosgroup/opencl-docs". GitHub. Dezember 2020. Abgerufen 18. April, 2021.
- ^ a b "Die C ++ für OpenCL 1.0 -Programmiersprache Dokumentation". www.khronos.org. Abgerufen 18. April, 2021.
- ^ a b c d "Veröffentlichung von C ++ für OpenCL-Kernel-Sprachdokumentation, Version 1.0, Revision 2 · Khronosgroup/OpenCL-Docs". GitHub. März 2021. Abgerufen 18. April, 2021.
- ^ "cl_ext_cxx_for_opencl". www.khronos.org. September 2020. Abgerufen 18. April, 2021.
- ^ "Mali SDK unterstützt die Zusammenstellung von Kerneln in C ++ für OpenCL". Community.arm.com. Dezember 2020. Abgerufen 18. April, 2021.
- ^ "CLang Compiler -Benutzerhandbuch - C ++ für OpenCL -Unterstützung". Clang.llvm.org. Abgerufen 18. April, 2021.
- ^ "OpenCl-Guide, Offline-Zusammenstellung von OpenCL-Kernelquellen". GitHub. Abgerufen 18. April, 2021.
- ^ "OpenCl-Guide, Programmierung von OpenCL-Kerneln". GitHub. Abgerufen 18. April, 2021.
- ^ a b CLSPV ist ein Prototyp -Compiler für eine Untergruppe von OpenCl C zu Vulkan Compute Shaders: Google/CLSPV, 17. August 2019, abgerufen 20. August, 2019
- ^ Petit, Kévin (17. April 2021), Experimentelle Implementierung von OpenCL auf Vulkan, abgerufen 18. April, 2021
- ^ "Khronos startet eine heterogene Computerinitiative" (Pressemitteilung). Khronos Gruppe. 16. Juni 2008. archiviert von das Original am 20. Juni 2008. Abgerufen 18. Juni, 2008.
- ^ "OpenCl wird in Texas angepriesen". Macworld. 20. November 2008. Abgerufen 12. Juni, 2009.
- ^ "Die Khronos -Gruppe veröffentlicht OpenCL 1.0 -Spezifikation" (Pressemitteilung). Khronos Gruppe. 8. Dezember 2008. Abgerufen 4. Dezember, 2016.
- ^ "Apple Vorschau auf Mac OS X Snow Leopard zu Entwicklern" (Pressemitteilung). Apple Inc. 9. Juni 2008. Archiviert von das Original am 18. März 2012. Abgerufen 9. Juni, 2008.
- ^ "AMD fördert die Einführung von Branchenstandards in der Entwicklung von GPGPU -Software" (Pressemitteilung). AMD. 6. August 2008. Abgerufen 14. August, 2008.
- ^ "AMD Backs OpenCL, Microsoft DirectX 11". Eweek. 6. August 2008. archiviert von das Original am 19. März 2012. Abgerufen 14. August, 2008.
- ^ "HPCWire: Rapidmind umfasst Open Source- und Standards -Projekte". HPCWire. 10. November 2008. archiviert von das Original am 18. Dezember 2008. Abgerufen 11. November, 2008.
- ^ "Nvidia fügt OpenCL zu seinem branchenführenden GPU -Computing -Toolkit hinzu." (Pressemitteilung). Nvidia. 9. Dezember 2008. Abgerufen 10. Dezember, 2008.
- ^ "OpenCL -Entwicklungskit für Linux on Power". Alphaworks. 30. Oktober 2009. Abgerufen 30. Oktober, 2009.
- ^ "OpenCl Standard - Ein Überblick | ScienceDirect -Themen".
- ^ http://developer.amd.com/wordpress/media/2012/10/opencl-1.0.48.pdf[Bare URL PDF]
- ^ "Khronos treibt die Dynamik des parallelen Computerstandards mit der Veröffentlichung der Spezifikation von OpenCL 1.1 an". Archiviert von das Original am 2. März 2016. Abgerufen 24. Februar, 2016.
- ^ "Khronos veröffentlicht OpenCL 1.2 -Spezifikation". Khronos Gruppe. 15. November 2011. Abgerufen 23. Juni, 2015.
- ^ a b c "OpenCL 1.2 Spezifikation" (PDF). Khronos Gruppe. Abgerufen 23. Juni, 2015.
- ^ "Khronos schließt die OpenCL 2.0 -Spezifikation für heterogenes Computer ab". Khronos Gruppe. 18. November 2013. Abgerufen 10. Februar, 2014.
- ^ "Khronos veröffentlicht OpenCL 2.1- und SPIR-V 1.0-Spezifikationen für heterogene parallele Programmierung". Khronos Gruppe. 16. November 2015. Abgerufen 16. November, 2015.
- ^ "Khronos kündigt OpenCL 2.1 an: C ++ kommt zu OpenCL". Anandtech. 3. März 2015. Abgerufen 8. April, 2015.
- ^ "Khronos veröffentlicht OpenCL 2.1 vorläufige Spezifikation für die öffentliche Überprüfung". Khronos Gruppe. 3. März 2015. Abgerufen 8. April, 2015.
- ^ "OpenCL -Übersicht". Khronos Gruppe. 21. Juli 2013.
- ^ a b "Khronos veröffentlicht OpenCL 2.2 Provisional Specification mit OpenCL C ++ Kernelsprache für parallele Programmierung". Khronos Gruppe. 18. April 2016.
- ^ Trevett, Neil (April 2016). "Opencl - ein Zustand der Gewerkschaft" (PDF). Iwocl. Wien: Khronos Gruppe. Abgerufen 2. Januar, 2017.
- ^ "Khronos veröffentlicht OpenCL 2.2 mit Spire-V 1.2". Khronos Gruppe. 16. Mai 2017.
- ^ a b "OpenCL 2.2 Wartung Update veröffentlicht". Die Khronos -Gruppe. 14. Mai 2018.
- ^ "OpenCL 3.0 bringt größere Flexibilität, asynchrische DMA -Erweiterungen - Phoronix".
- ^ "Khronos Group veröffentlicht OpenCL 3.0". 26. April 2020.
- ^ https://www.khronos.org/registry/opencl/specs/3.0-unified/pdf/opencl_api.pdf[Bare URL PDF]
- ^ https://www.iwocl.org/wp-content/uploads/k03-iwocl-syclcon-2021-trevett-updated.mp4.pdf[Bare URL PDF]
- ^ "Verwenden von Semaphor- und Speicherfreigabeerweiterungen für Vulkan Interop mit Nvidia opencl". 24. Februar 2022.
- ^ "Breaking: OpenCl Fusion Roadmap in Vulkan | PC Perspektive". www.pcper.com. Archiviert von das Original am 1. November 2017. Abgerufen 17. Mai, 2017.
- ^ "Siggraph 2018: OpenCl -Next, der Form übernimmt, entwickelt sich weiterentwickelt - Phoronix". www.phoronix.com.
- ^ "Vulkan Update Siggraph 2019" (PDF).
- ^ Trevett, Neil (23. Mai 2019). "Khronos und OpenCL Übersicht EVS Workshop Mai19" (PDF). Khronos Gruppe.
- ^ "OpenCl ICD -Spezifikation". Abgerufen 23. Juni, 2015.
- ^ "Apple -Eintrag auf LLVM -Benutzerseite". Abgerufen 29. August, 2009.
- ^ "NVIDIA -Eintrag auf LLVM -Benutzerseite". Abgerufen 6. August, 2009.
- ^ "Rapidmind -Eintrag auf LLVM -Benutzerseite". Abgerufen 1. Oktober, 2009.
- ^ "Zack Rusins Blog -Beitrag über die Gallium3D OpenCL -Implementierung". Februar 2009. Abgerufen 1. Oktober, 2009.
- ^ "Galliumcompute". dri.freedesktop.org. Abgerufen 23. Juni, 2015.
- ^ "Clover Status Update" (PDF).
- ^ "Mesa/Mesa - Die Mesa 3D -Grafikbibliothek". cgit.freedesktop.org.
- ^ "Gallium Clover mit Spire -V & NIR Eröffnung neue Berechnungsoptionen in Mesa - Phoronix". www.phoronix.com. Archiviert von das Original am 22. Oktober 2020. Abgerufen 13. Dezember, 2018.
- ^ https://xdc2018.x.org/slides/clover.pdf[Bare URL PDF]
- ^ "Mesas" Rusticl "-implementierung schafft es jetzt, DarkTable OpenCL zu bewältigen".
- ^ Larabel, Michael (10. Januar 2013). "Beignet: OpenCl/GPGPU kommt für die Ivy Bridge unter Linux". Phoronix.
- ^ Larabel, Michael (16. April 2013). "Mehr Kritik kommt an Intels Beignet OpenCL". Phoronix.
- ^ Larabel, Michael (24. Dezember 2013). "Intels Beignet OpenCL backt immer noch langsam". Phoronix.
- ^ "Beignet". freedesktop.org.
- ^ "Beignet - Beignet OpenCL Library für Intel Ivy Bridge und neuere GPUs". cgit.freedesktop.org.
- ^ "Intel bringt Beignet in Android für OpenCL Compute - Phoronix".. www.phoronix.com.
- ^ "01.org Intel Open Source - Runtime berechnen". 7. Februar 2018.
- ^ "Neo Github Readme". GitHub. 21. März 2019.
- ^ "Rocm". GitHub. Archiviert von das Original am 8. Oktober 2016.
- ^ "Radeonopencompute/ROCM: ROCM - Open Source -Plattform für HPC und Ultrascale GPU Computing". Github. 21. März 2019.
- ^ "Ein schöner Überblick über den ROCM Linux Compute Stack - Phoronix". www.phoronix.com.
- ^ "XDC Lightning.pdf". Google Dokumente.
- ^ "Radeon ROCM 2.0 Offiziell mit OpenCL 2.0 -Unterstützung, Tensorflow 1.12, Vega 48 -Bit VA - Phoronix". www.phoronix.com.
- ^ "Radeon ROCM 2.0 OpenCL für eine Benchmarking -Testfahrt - Phoronix" einnehmen ". www.phoronix.com.
- ^ https://github.com/radeonopencompute/rocm/blob/master/amd_rocm_release_notes_v3.3.pdf[Dead Link]
- ^ "Radeon Rocm 3.5 veröffentlicht mit neuen Funktionen, aber immer noch keine NAVI -Unterstützung - Phoronix".
- ^ "Radeon ROCM 3.10 mit Verbesserungen des Rechenzentrums -Tools, neue APIs - Phoronix" veröffentlicht..
- ^ "AMD startet Arcturus als Instinkt MI100, Radeon Rocm 4.0 - Phoronix".
- ^ "Willkommen auf der AMD ROCM ™ -Plattform - ROCM -Dokumentation 1.0.0 Dokumentation".
- ^ https://docs.amd.com/
- ^ Jäskeläinen, Pekka; Sánchez de la Lama, Carlos; Schnetter, Erik; Raiskila, Kalle; Takala, Jarmo; Berg, Heikki (2016). "POCL: Eine leistungsfähige OpenCL-Implementierung". Int'l J. Parallele Programmierung. 43 (5): 752–785. Arxiv:1611.07083. Bibcode:2016ArXIV161107083J. doi:10.1007/s10766-014-0320-y. S2CID 9905244.
- ^ a b c "POCL Homepage". Pocl.
- ^ "Github - POCL/POCL: POCL: Tragbare Computersprache". 14. März 2019 - über Github.
- ^ "HSA-Unterstützung Implementierungsstatus zum 05.05.2016-Tragbare Computersprache (POCL) 1.3-PRE-Dokumentation". portablecl.org.
- ^ "POCL Homepage".
- ^ "POCL Homepage".
- ^ "POCL Homepage".
- ^ "Archivierte Kopie". Archiviert von das Original am 17. Januar 2021. Abgerufen 3. Dezember, 2020.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) - ^ https://www.iwocl.org/wp-content/uploads/30-iwocl-syclcon-2021-baumann-lides.pdf[Bare URL PDF]
- ^ "POCL Homepage".
- ^ "POCL Homepage".
- ^ "POCL Homepage".
- ^ "Um". Git.linaro.org.
- ^ Gall, T.; Pitney, G. (6. März 2014). "LCA14-412: GPGPU auf ARM SOC" (PDF). Amazon Web Services. Archiviert von das Original (PDF) am 26. Juli 2020. Abgerufen 22. Januar, 2017.
- ^ "ZuZuf/Freeocl". GitHub. Abgerufen 13. April, 2017.
- ^ Zhang, Peng; Fang, Jianbin; Yang, Canqun; Tang, Tao; Huang, Chun; Wang, Zheng (2018). MOCL: Eine effiziente OpenCL-Implementierung für die Matrix-2000-Architektur (PDF). Proc. Int'l Conf. an der Berechnung von Grenzen. doi:10.1145/3203217.3203244.
- ^ "Status". GitHub. 16. März 2022.
- ^ "OpenCL Demo, AMD CPU". Youtube. 10. Dezember 2008. Abgerufen 28. März, 2009.
- ^ "OpenCL Demo, Nvidia GPU". Youtube. 10. Dezember 2008. Abgerufen 28. März, 2009.
- ^ "Imagination Technologies startet fortschrittliche, hocheffiziente PowerVR SGX543MP Multi-Processor-Grafik-IP-Familie". Imaginationstechnologien. 19. März 2009. archiviert von das Original am 3. April 2014. Abgerufen 30. Januar, 2011.
- ^ "AMD und Havok Demo Opencl beschleunigten Physik". PC -Perspektive. 26. März 2009. archiviert von das Original am 5. April 2009. Abgerufen 28. März, 2009.
- ^ "Nvidia gibt den OpenCL -Treiber für Entwickler frei.". Nvidia. 20. April 2009. archiviert von das Original am 4. Februar 2012. Abgerufen 27. April, 2009.
- ^ "AMD macht GPGPU um und kündigt OpenCL SDK für x86 an.". ARS Technica. 5. August 2009. Abgerufen 6. August, 2009.[Permanent Dead Link]
- ^ Moren, Dan; Snell, Jason (8. Juni 2009). "Live -Update: WWDC 2009 Keynote". Macworld.com. Macworld. Abgerufen 12. Juni, 2009.
- ^ "ATI Stream Software Development Kit (SDK) V2.0 Beta -Programm". Archiviert von das Original am 9. August 2009. Abgerufen 14. Oktober, 2009.
- ^ "S3 Graphics hat den Chrome 5400E eingebetteten Grafikprozessor gestartet". Archiviert von das Original am 2. Dezember 2009. Abgerufen 27. Oktober, 2009.
- ^ "Via bringt erweiterten VN1000 -Grafikprozessor]". Archiviert von das Original am 15. Dezember 2009. Abgerufen 10. Dezember, 2009.
- ^ "ATI Stream SDK v2.0 mit OpenCL 1.0 -Unterstützung". Archiviert von das Original am 1. November 2009. Abgerufen 23. Oktober, 2009.
- ^ "Opencl". Ziilabs. Abgerufen 23. Juni, 2015.
- ^ "Intel gibt neue technische Details der Sandy Bridge offen". Archiviert von das Original am 31. Oktober 2013. Abgerufen 13. September, 2010.
- ^ "Webcl -verwandte Geschichten". Khronos Gruppe. Abgerufen 23. Juni, 2015.
- ^ "Khronos veröffentlicht die endgültige WebGL 1.0 -Spezifikation". Khronos Gruppe. Archiviert von das Original am 9. Juli 2015. Abgerufen 23. Juni, 2015.
- ^ "Gemeinschaft".
- ^ "Willkommen bei Wikis". www.ibm.com. 20. Oktober 2009.
- ^ "Nokia Research veröffentlicht den Webcl -Prototyp". Khronos Gruppe. 4. Mai 2011. archiviert von das Original am 5. Dezember 2020. Abgerufen 23. Juni, 2015.
- ^ Kamathk, Sharath. "Der Webcl -Prototyp von Samsung für Webkit". Github.com. Archiviert von das Original am 18. Februar 2015. Abgerufen 23. Juni, 2015.
- ^ "AMD eröffnet die APU -Leistung mit aktualisierter OpenCL -Softwareentwicklung.". AMD.com. 8. August 2011. Abgerufen 16. Juni, 2013.
- ^ "AMD App SDK v2.6". Forums.amd.com. 13. März 2015. Abgerufen 23. Juni, 2015.[Dead Link]
- ^ "Die Portland Group kündigt OpenCL Compiler für ST-Ericsson ARM-basierte Novathor Socs an.". Abgerufen 4. Mai, 2012.
- ^ "Webcl neueste Spezifikation". Khronos Gruppe. 7. November 2013. Archiviert von das Original am 1. August 2014. Abgerufen 23. Juni, 2015.
- ^ "Altera öffnet die Welt der FPGAs für Softwareprogrammierer mit einer breiten Verfügbarkeit von SDK- und Off-the-Shelf-Boards für OpenCL.". Altera.com. Archiviert von das Original am 9. Januar 2014. Abgerufen 9. Januar, 2014.
- ^ "Altera SDK für OpenCL ist der erste in der Industrie, um die Khronos -Konformität für FPGAs zu erreichen.". Altera.com. Archiviert von das Original am 9. Januar 2014. Abgerufen 9. Januar, 2014.
- ^ "Khronos schließt die OpenCL 2.0 -Spezifikation für heterogenes Computer ab". Khronos Gruppe. 18. November 2013. Abgerufen 23. Juni, 2015.
- ^ "Webcl 1.0 Pressemitteilung". Khronos Gruppe. 19. März 2014. Abgerufen 23. Juni, 2015.
- ^ "Webcl 1.0 -Spezifikation". Khronos Gruppe. 14. März 2014. Abgerufen 23. Juni, 2015.
- ^ "Intel opencl 2.0 Treiber". Archiviert von das Original am 17. September 2014. Abgerufen 14. Oktober, 2014.
- ^ "AMD Opencl 2.0 Treiber". Support.amd.com. 17. Juni 2015. Abgerufen 23. Juni, 2015.
- ^ "Xilinx SDACCEL -Entwicklungsumgebung für OpenCL, C und C ++, erreicht Khronos Conformance - khronos.org News". Die Khronos -Gruppe. Abgerufen 26. Juni, 2017.
- ^ "Release 349 Grafiktreiber für Windows, Version 350.12" (PDF). 13. April 2015. Abgerufen 4. Februar, 2016.
- ^ "AMD App SDK 3.0 veröffentlicht". Entwickler.amd.com. 26. August 2015. Abgerufen 11. September, 2015.
- ^ "Khronos veröffentlicht OpenCL 2.1- und SPIR-V 1.0-Spezifikationen für heterogene parallele Programmierung". Khronos Gruppe. 16. November 2015.
- ^ "Was ist neu? Intel® SDK für OpenCL ™ Applications 2016, R3". Intel -Software.
- ^ "NVIDIA 378.66 Treiber für Windows bieten OpenCL 2.0 -Bewertungsunterstützung an". Khronos Gruppe. 17. Februar 2017. archiviert von das Original am 6. August 2020. Abgerufen 17. März, 2017.
- ^ SZUCHE, JAKUB (22. Februar 2017). "Nvidia ermöglicht OpenCL 2.0 Beta-Support".
- ^ SZUCHE, JAKUB (6. März 2017). "Nvidia Beta-Support für OpenCL 2.0 funktioniert auch unter Linux".
- ^ "Die Khronos -Gruppe". Die Khronos -Gruppe. 21. März 2019.
- ^ "Github - Radeonopencompute/ROCM bei ROC -3.5.0". GitHub.
- ^ a b "Nvidia ist jetzt openencl 3.0 konformant". 12. April 2021.
- ^ "Die Khronos -Gruppe". Die Khronos -Gruppe. 20. August 2019. Abgerufen 20. August, 2019.
- ^ "Khronosgroup/opencl-CTL: Die OpenCL-Konformitätstests". Github. 21. März 2019.
- ^ "OpenCL und die AMD -App SDK". AMD -Entwickler zentral. Entwickler.amd.com. Archiviert von das Original am 4. August 2011. Abgerufen 11. August, 2011.
- ^ "Über Intel opencl SDK 1.1". Software.intel.com. Intel.com. Abgerufen 11. August, 2011.
- ^ "Intel® SDK für OpenCL ™ -Anwendungen - Versionsnotizen". Software.intel.com. 14. März 2019.
- ^ "Produkt Support". Abgerufen 11. August, 2011.
- ^ "Intel OpenCL SDK - Versionsnotizen". Archiviert von das Original am 17. Juli 2011. Abgerufen 11. August, 2011.
- ^ "Ankündigung von OpenCL -Entwicklungskit für Linux auf Power v0.3". IBM. Abgerufen 11. August, 2011.
- ^ "IBM veröffentlicht OpenCL -Entwicklungskit für Linux auf Power v0.3 - OpenCL 1.1 Konformant Release verfügbar". OpenCL Lounge. ibm.com. Abgerufen 11. August, 2011.
- ^ "IBM veröffentlicht OpenCL Common Runtime für Linux auf x86 Architektur". IBM. 20. Oktober 2009. Abgerufen 10. September, 2011.
- ^ "OpenCL und die AMD -App SDK". AMD -Entwickler zentral. Entwickler.amd.com. Archiviert von das Original am 6. September 2011. Abgerufen 10. September, 2011.
- ^ "Nvidia veröffentlicht OpenCL -Treiber". 22. April 2009. Abgerufen 11. August, 2011.
- ^ "Clinfo von Simon LeBlanc". GitHub. Abgerufen 27. Januar, 2017.
- ^ "Clinfo von Oblomov". GitHub. Abgerufen 27. Januar, 2017.
- ^ "Clinfo: OpenCL -Informationen". Abgerufen 27. Januar, 2017.
- ^ "Khronos Produkte". Die Khronos -Gruppe. Abgerufen 15. Mai, 2017.
- ^ "OpenCl-CTS/test_conformance am Haupt- · khronosgroup/opencl-CTs". GitHub.
- ^ "Ausgaben · Khronosgroup/opencl-CTs". GitHub.
- ^ "Intel Compute-Runtime 20.43.18277 bringt Alder Lake unterstützt".
- ^ "Berechnung Runtime". 01.org. 7. Februar 2018.
- ^ a b Fang, Jianbin; Varbanescu, Ana Lucia; SIPS, Henk (2011). "Ein umfassender Leistungsvergleich von CUDA und OpenCL". 2011 Internationale Konferenz zur parallele Verarbeitung. Proc. Int'l Conf. Bei paralleler Verarbeitung. S. 216–225. doi:10.1109/ICPP.2011.45. ISBN 978-1-4577-1336-1.
- ^ Du, peng; Weber, Rick; Luszczek, Piotr; Tomov, Stanimire; Peterson, Gregory; Dongarra, Jack (2012). "Von CUDA bis OpenCL: Auf dem Weg zu einer leistungsfähigen Lösung für die Multi-Plattform-GPU-Programmierung". Parallele Computing. 38 (8): 391–407. Citeseerx 10.1.1.193.7712. doi:10.1016/j.parco.2011.10.002.
- ^ Dolbeau, Romain; Bodin, François; De Verdière, Guillaume Colin (7. September 2013). "Ein OpenCL, um sie alle zu regieren?". 2013 IEEE 6. Internationaler Workshop zu Multi-/Many-Core-Computersystemen (Mucocos). S. 1–6. doi:10.1109/mucocos.2013.6633603. ISBN 978-1-4799-1010-6. S2CID 225784.
- ^ Karimi, Kamran; Dickson, Neil G.; Hamze, Firas (2011). "Ein Leistungsvergleich von CUDA und OpenCL". Arxiv:1005.2581v3 [cs.pf].
- ^ Eine Übersicht über CPU-GPU-Heterogen-Computertechniken, ACM Computing Surveys, 2015.
- ^ Grewe, Dominik; O'Boyle, Michael F. P. (2011). "Ein statischer Aufgaben -Partitionierungsansatz für heterogene Systeme mit OpenCL". Compiler -Konstruktion. Proc. Int'l Conf. Auf Compiler -Konstruktion. Vorlesungsnotizen in Informatik. Vol. 6601. S. 286–305. doi:10.1007/978-3-642-19861-8_16. ISBN 978-3-642-19860-1.
- ^ "Die Radeon RX 6800-Serie hat eine hervorragende ROCM-basierte OpenCL-Leistung unter Linux".
Externe Links
- Offizielle Website
- Offizielle Website zum Webcl
- Internationaler Workshop über OpenCL Archiviert 26. Januar 2021 bei der Wayback -Maschine (Iwocl) von der Khronos Group gesponsert