WebCL
Entwickler (en) | Webcl -Arbeitsgruppe |
---|---|
Stabile Version | 1.0 / 19. März 2014[1] |
Betriebssystem | Plattformübergreifend |
Typ | API |
Webseite | www |
Webcl (Web -Computing -Sprache) ist ein JavaScript Bindend an OpenCL zum heterogen Parallele Computing Innerhalb eines jeden kompatiblen Webbrowser ohne die Verwendung von Plugins, erstmals im März 2011 angekündigt. Es wird aus ähnlichen Gründen als OpenCL entwickelt und wird als Browser -Version des letzteren angesehen. In erster Linie ermöglicht Webcl Webanwendungen, die Geschwindigkeit mit Multi-Core zu verwirklichen CPUs und GPUS. Mit der wachsenden Beliebtheit von Anwendungen, die benötigen Parallelverarbeitung wie Bildbearbeitung, erweiterte Realität Anwendungen und ausgefeilte Spiele, es ist wichtiger geworden, die Rechengeschwindigkeit zu verbessern. Mit diesen Hintergrundgründen eine gemeinnützige Khronos-Gruppe[2] Entworfenes und entwickeltes Webcl, ein JavaScript -Bindung an OpenCL mit einer tragbaren Kernel -Programmierung, die auf Webbrowsern auf einer Vielzahl von Geräten paralleles Computing ermöglicht. Kurz gesagt, Webcl besteht aus zwei Teilen, von denen eines Kernel -Programmierung ist, das auf den Prozessoren (Geräten) und dem anderen JavaScript ausführt und die Webanwendung an OpenCL bindet. Die abgeschlossene und ratifizierte Spezifikation für Webcl 1.0 wurde am 19. März 2014 veröffentlicht.[2]
Implementierung
Derzeit unterstützen keine Browser nativ Webcl. Nicht einheimische Add-Ons werden jedoch verwendet, um WebCl zu implementieren. Zum Beispiel, Nokia entwickelte eine Webcl -Erweiterung.[3] Mozilla plant nicht, Webcl zugunsten von zu implementieren Webgl Berechnen Sie Shader, die wiederum zugunsten von verschrottet waren Webgpu.
- Mozilla (Firefox) - Hg
.mozilla .org /Projekte /Webcl /
Webcl Working Draft
- Samsung (Webkit) - Github
.com /Sra-siliconvalley /Webkit-Webcl (nicht verfügbar) - Nokia (Firefox) - Github
.com /toraarnio /Webcl-Firefox (Down Seit November 2014, letzte Version für FF 34) - Intel (Zebrastreifen) - www
.Crosswalk-Project .org[4]
Beispiel c Code
Die Grundeinheit eines parallelen Programms ist Kernel. Ein Kernel ist eine parallelisierbare Aufgabe, die zur Ausführung eines bestimmten Jobs verwendet wird. Häufiger können Funktionen als Kernel realisiert werden. Ein Programm kann aus einem oder mehreren Kerneln bestehen. Um einen Kernel zu verwirklichen, ist es wichtig, dass eine Aufgabe parallelisierbar ist. Datenabhängigkeiten und Reihenfolge der Ausführung spielen eine wichtige Rolle bei der Erzeugung effizienter parallelisierter Algorithmen. Ein einfaches Beispiel kann an den Fall von gedacht werden Schlaufe abrollen durchgeführt von C -Compilern, wo eine Aussage wie:
zum (i = 0; i< 3 ; i++) c[i] = a[i] + b[i];
kann abgerollt werden in:
c[0] = a[0] + b[0]; c[1] = a[1] + b[1]; c[2] = a[2] + b[2];
Die obigen Aussagen können parallelisiert und gleichzeitig ausgeführt werden. Ein Kernel folgt einem ähnlichen Ansatz, bei dem nur der Schnappschuss des ith Die Iteration wird im Kernel erfasst. Schreiben wir den obigen Code mit einem Kernel neu:
__kernel hinzufügen(__global schweben* a, __global schweben* b, __global schweben*c) { int i = get_global_id(0); wenn (i<3) c[i] = a[i] + b[i]; }
Das Ausführen einer Webcl -Anwendung umfasst die folgenden Schritte:
- Ermöglichen Sie Zugriff auf Geräte und geben Sie einen Kontext an
- Übergeben Sie den Kernel an ein Gerät
- Veranlassen das Gerät, den Kernel auszuführen
- Ergebnisse vom Gerät abrufen
- Verwenden Sie die Daten in JavaScript
Weitere Details über dasselbe finden Sie unter[5]
Ausnahmen Liste
Webcl, die eine von JavaScript basierende Implementierung ist, gibt keinen Fehlercode zurück, wenn Fehler auftreten. Stattdessen macht es eine Ausnahme wie wie Out_of_resources
, Out_of_host_memory
, oder das Webcl-spezifisch Webcl_implementation_failure
.[6] Das Ausnahmeobjekt beschreibt den maschinenlesbaren Namen und die menschliche lesbare Nachricht, die den Fehler beschreibt. Die Syntax ist wie folgt:
Ausnahme Webclexception : Domexzeption { Domstring Name; // eine Zeichenfolgendarstellung des numerischen Fehlercodes, z. "UNGÜLTIGER WERT" Domstring? Botschaft; // eine implementierungsspezifische Beschreibung dessen, was die Ausnahme verursacht hat };
Aus dem obigen Code kann beobachtet werden, dass das Nachrichtenfeld ein Nullwert sein kann. Weitere Ausnahmen umfassen:
-
UNGÜLTIGE OPERATION
- Wenn die blockierende Form dieser Funktion aus a aufgerufen wirdWebclcallback
-
UNGÜLTIGER WERT
- wennEventwaitlist
ist leer -
Invalid_context
- Wenn Ereignisse angegeben inEventwaitlist
gehören nicht zum gleichen Kontext -
Invaly_device_type
- wennGerätetyp
wird angegeben, ist aber nicht einer der gültigen aufgezählten Werte -
GERÄT NICHT GEFUNDEN
- Wenn es keine gibtWebcldevice
verfügbar, der dem angegeben entsprichtGerätetyp
Weitere Informationen zu Ausnahmen finden Sie im Spezifikationsdokument.[6]
Es gibt eine weitere Ausnahme, die beim Versuch, ein Objekt zu nennen, das „veröffentlicht“ wird, hervorgerufen wird. Bei der Verwendung der Release -Methode wird das Objekt nicht dauerhaft gelöscht, die mit diesem Objekt verbundenen Ressourcen frei. Um diese Ausnahme zu vermeiden, Releasall
Die Methode kann verwendet werden, wodurch nicht nur die Ressourcen befreit werden, sondern auch alle zugeordneten Objekte löscht.
Sicherheit
Webcl, eine offene Software, die für Webanwendungen entwickelt wurde, gibt es auch viel Umfang für Schwachstellen in den Design- und Entwicklungsfeldern. Dies zwang die Entwickler, die an Webcl arbeiteten, die Sicherheit von größter Bedeutung. Nur wenige Bedenken, die behandelt wurden, sind:
- Speicherzugriff außerhalb des Bounds: Dies geschieht durch den Zugriff auf die Speicherorte außerhalb des zugewiesenen Raums. Ein Angreifer kann alle wichtigen Daten, die an diesen Speicherorten gespeichert sind, umschreiben oder löschen. Wenn ein solcher Fall entsteht, muss ein Fehler zur Kompilierungszeit generiert werden, und Null muss zur Laufzeit zurückgegeben werden, da das Programm den Speicher nicht außer Kraft gesetzt wird. Ein Projekt Webcl Validator,[7] wurde von der Khronos Group (Entwickler) über die Behandlung dieser Sicherheitsanfälligkeit initiiert.
- Speicherinitialisierung: Dies geschieht, um zu verhindern, dass die Anwendungen auf die Speicherorte früherer Anwendungen zugreifen.WebCL stellt sicher, dass dies nicht durch Initialisierung aller Puffer, Variablen, die auf Null initialisiert werden, vor der Ausführung der aktuellen Anwendung initialisiert.OpenCL 1.2 hat eine Erweiterung "cl_khr_initialize_memory", die dies ermöglicht.[6]
- Denial of Service: Der häufigste Angriff auf Webanwendungen kann nicht vollständig von Webcl oder dem Browser beseitigt werden.OpenCL kann mit Watchdog-Timern und präventivem Multitasking versehen werden, die von WebCL verwendet werden können, um die Kontexte zu erkennen und zu beenden, die zu lange dauern oder viele Ressourcen konsumieren.Es gibt eine Erweiterung von OpenCL 1.2 "cl_khr_termate_context" wie für die vorherige, die es ermöglicht, den Prozess zu beenden, der möglicherweise zu einer Denial -of -Service -Angriffsanschlag führt.[6]
Verwandte Browser -Fehler
- Fehler 664147 - [Webcl] Fügen Sie OpenCL in Gecko hinzu, Mozilla
- Fehler 115457: [Meta] Webcl -Unterstützung für Webkit, Webkit Bugzilla
Siehe auch
Verweise
- ^ "Khronos veröffentlicht Webcl 1.0 -Spezifikation".
- ^ a b "Khronos veröffentlicht Webcl 1.0 -Spezifikation". Khronos Gruppe. Abgerufen 19. März, 2014.
- ^ "Webcl". Nokia Research. Abgerufen 6. Mai, 2012.
- ^ "Crosswalk - Webcl -Übersicht".
- ^ "Beschleunigung von Webanwendungen mit OpenCL".
- ^ a b c d "Webcl -Spezifikation". www.khronos.org. Abgerufen 2016-09-14.
- ^ "Khronosgroup/Webcl-Validator". GitHub. Abgerufen 2016-09-14.