# GPGPU-Sim

GPGPU-Sim (von englisch „General Purpose Graphics Processing Unit - Simulator“) ist ein Software-System zur Simulation von neu zu entwickelnden Grafikkarten und Computerprozessoren.
Wie es der Namensbestandteil GPGPU nahelegt, ist das Simulationssystem insbesondere zur Simulation neuerer Graphikprozessoren geeignet, die zur Ausführung von Anwendungen ausgelegt sind, die über graphische Anwendungen hinausgehen und allgemeinerer Art sind. Dazu gehören rechenintensive Programme aus den Bereichen Wissenschaft und Wirtschaft.
GPGPU-Sim ermöglicht es, funktionale und zeitliche Simulationen durchzuführen, bei denen sowohl das Ergebnis einer Berechnung erzeugt wird, als auch die dazu benötigte Zeit ermittelt wird.

## Details

GPGPU-Sim wird daher vor allem zur Forschung und Entwicklung im Bereich der Computerarchitektur eingesetzt. Dabei geht es darum, einzelne Komponenten wie Speicher (RAM/DRAM), Caches, Verbindungsleitungen sowie Prozessoren und deren Komponenten, so auszuwählen, zu konfigurieren und zu verbinden, dass das Gesamtsystem optimiert ist bezüglich Geschwindigkeit der Ausführung, Fehlertoleranz, Energieeffizienz oder Gesamtkosten.
Das Simulationssystem kann verwendet werden zum
* Testen von Varianten existierender Graphikprozessoren ohne den Nachbau in Hardware,
* Forschung im Bereich heterogener oder asymmetrischer Multikernprozessoren, also Prozessoren, die sich selber aus Prozessoren unterschiedlicher Art zusammensetzen.
Simuliert werden insbesondere Architekturen wie Nvidias Fermi und GT200, auf denen Programme, geschrieben in den Programmiersprachen CUDA oder OpenCL, ausgeführt werden können. Da diese Systeme zur aktuellen Spitzengruppe gehören, ist die Erforschung von Varianten für Wissenschaft und Industrie besonders interessant.
GPGPU-Sim läuft auf Linux-Plattformen wie z. B. Ubuntu. Die aktuelle Version ist 3.3.2 von 2014.
GPGPU-Sim ist als Source-Code frei verfügbar unter einer BSD-Lizenz. Die Sourcen sind in C++ programmiert. Die Konfiguration des Systems erfolgt über Konfigurations-Files. Weitere Anpassungen sind möglich über die Änderung des Quellcodes.
Der Simulator hat 3 Hauptkomponenten:
* Komponente für funktionale Simulation. Für die funktionale Simulation wird die auszuführende Applikation intern von OpenCL/Cuda in die Sprache PTX übersetzt.
* Komponente für die zeitliche Simulation. Diese modelliert die folgenden internen Komponenten: Shader Cores, Caches, Verbindungsnetzwerk der Komponenten, Memory Controllers, DRAM, nicht jedoch CPU und graphik-spezifische Hardware.
* Komponente für die Simulation des Netzwerkes, welches die internen Komponenten verbindet.
Bei zeitlicher Simulation ist das Simulationssystem erheblich langsamer als die jeweils simulierte Grafikkarte, erreicht jedoch gute Genauigkeitswerte der Simulation. Aufgrund dieses Geschwindigkeitsunterschiedes ist GPGPU-Sim vor allem zur experimentellen Simulation und nur sehr eingeschränkt zur Virtualisierung einer Grafikkarte geeignet.

## Multi2Sim

Vergleichbar zu GPGPU-Sim ist das Simulations-Framework Multi2Sim, welches die Simulation von CPU und GPU erlaubt. Anders als GPGPU-Sim dient der GPU-Simulator von Multi2Sim speziell der Simulation von Anwendungen, die in der Programmiersprache OpenCL für AMD-Grafikkarten geschrieben wurden.