Optimierungen für ein CUDA-basiertes JavaScript-System

Student:Eugen Meissner
Title:Optimierungen für ein CUDA-basiertes JavaScript-System
Type:masters thesis
Advisors:Veldema, R.; Philippsen, M.
State:submitted on November 1, 2014
Prerequisits:
Topic:

Voraussetzungen

JavaScript (standardisiert in EcmaScript) ist eine populäre objektorientierte Sprache zum Browser-basierten Programmieren. Momentan wird JavaScript aufgrund seiner Bekanntheit sowohl außerhalb von Browsern (siehe Node.js) als auch in Browsern eingesetzt, um kompliziertere, rechenintensive Aufgaben zu verarbeiten. Viele Forscher suchen daher nach Wegen, um JavaScript-Anwendungen zu beschleunigen. Unser Ansatz besteht darin, JavaScript-Anwendungen auf einer GPU auszuführen.
Während manche Forscher daran arbeiten, datenparallele Aufgaben aus JavaScript heraus auf der GPU auszuführen, versuchen wir stattdessen, mehrere unabhängige Anwendungen effizient auf die GPU zu portieren. Der Vorteil unseres Ansatzes ist, dass keine Änderungen an JavaScript notwendig sind, um die GPU zu nutzen. Der Nachteil ist, dass für unser System viele Optimierungen notwendig sind, um mehrere JavaScript-Anwendungen effizient parallel auf der GPU auszuführen.
Beispielsweise müssen die unterschiedlichen JS-Anwendungen so weit wie möglich "im Gleichschritt" (lock-step) ausgeführt werden, damit die GPU den existierenden Parallelismus effizient ausnutzen kann. Weiterhin muss z.B. die Speicherbereinigung anwendungsübergreifend synchronisiert werden.
GPUs verwenden auch unterschiedlich schnelle Speicherarten. Beispielsweise gibt es in CUDA gemeinsamen Speicher, globalen Speicher, konstanten Speicher und Texturspeicher. Um die beste Leistung zu erzielen, muss für die JavaScript-Objekte die am besten geeignete Speicherart verwendet werden.

Thema

Am Lehrstuhl wurde ein Prototyp einer virtuellen Maschine (VM) für JavaScript entwickelt, die sowohl JavaScript interpretieren als auch CUDA-Code generieren kann. Dabei führt jede VM jeweils ein JavaScript-Programm aus. Das Ziel ist die parallele Ausführung mehrerer VMs auf der GPU.
Die VM unterstützt die Benutzung von EcmaScript- und Node.js-Schnittstelle wie z.B. String, Math, Object, Function, usw. Allerdings existieren innerhalb der VM noch keine Optimierungen, um die Ausführung des JavaScript-Codes zu beschleunigen. Daher sollen im Rahmen dieser Arbeit Optimierungen untersucht und implementiert werden, um JavaScript-Programme auf der GPU effizienter auszuführen.

Mögliche Optimierungen sind beispielsweise:

  • Objekt-Layout fixieren
  • Verwendung von gemeinsamen und konstantem Speicher für ausgewählte JavaScript-Objekte.
  • Migration von JavaScript-Programme zwischen dem Interpreter und der GPU (und zurück) für rechenintensive Programme.
  • Scheduling von JavaScript-VMs zur Erhöhung der Parallelität.
  • Synchronisation der Speicherbereinigung über mehrere auf der GPU laufende VMs hinweg.
  • Effizientere Methodenaufrufe z.B. durch Inline-Caches oder verbesserte Typ-Inferenz.
  • Instantiierung von temporären Objekten auf dem Laufzeitstapel oder im Register anstatt auf dem Heap. Die Optimierungen sollen anhand der Spider-Benchmark-Sammlung evaluiert werden.

Meilensteine

  • Einarbeiten in CUDA, JavaScript/EcmaScript, Prototyp der VM
  • Implementierung von Optimierungen
  • Performance Messungen mit der Spider-Benchmark-Suite
  • Ausarbeitung

Literatur

watermark seal