"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Legends never die: GPUPI

mat 06.11.2014 197834 863
GPUPI
Genau zwei Monate ist es her, dass uns die Hiobsbotschaft erreicht hat. Unser Turrican ist von uns gegangen und damit einer der Standpfeiler unserer Community und Österreichs einzige Overclocking Legende. Aus meiner Trauer heraus und um ihm für immer ein virtuelles Denkmal zu setzen, ist in den letzten Wochen dieser Benchmark entstanden. Als Hommage zum beliebten SuperPI, das Turrican abertausende Male mit allen erdenklichen Plattformen durchlaufen hat lassen, berechnet das Programm die Kreiszahl Pi komplett parallelisiert auf eurer Grafikkarte. Bringen wir unsere Hardware für ihn damit zum Glühen!

HWBOT-Version für Weltrekorde und Punkte:
Neueste Version:

CUDA/OpenCL drivers for GPUs: Install the latest graphics card drivers!

OpenCL drivers for CPUs:

English version


Technische Details

GPUPI verwendet die sogenannte "BPP formula", um Pi vollständig parallel auf OpenCl-fähigen Geräten wie Grafikkarten, aber auch Hauptprozessoren berechnen zu können. Es wurde mit C++, STL und der grundlegenden WIN32-API programmiert und hat somit möglichst wenige Abhängigkeiten. Das Ergebnis des Benchmarks sind genau neun Stellen von Pi in hexadezimal. Wenn also Pi in "1B" (1 Milliarde) berechnet wird, werden nicht alle Nachkommastellen von Pi bis zur 1.000.000.000sten ausgegeben - so wie es bei SuperPI zum Beispiel der Fall ist -, sondern wirklich nur die letzten 9. Diese Limitierung entsteht dadurch, dass nicht jedes serielle Problem bzw. jede mathematische Formel sinnvoll parallelisiert werden kann.


Die Berechnung selbst ist in zwei Teile aufgesplittet, die jeweils wieder in kleinere Pakete aufgeteilt sind. Diese Pakete werden "Batches" genannt und bestehen aus einer Anzahl von Teilberechnungen, die über die Einstellung "Batch Size" vor einem Durchlauf konfiguriert werden kann. Nach der reinen Berechnung erfolgt eine Reduktion aller Zwischenergebnisse zu einer einzigen Zahl, die im Laufe des Benchmarks kumuliert wird und als Basis für das finale Ergebnis dient. Diese sogenannte "Memory Reduction" ist ein bekanntes Problem in der parallelen Programmierung und findet deshalb ebenso auf den gewählten Compute-Devices statt.

Der Rechenkern arbeitet prinzipiell mit 64-bit-Integers und doubledouble-Arithmetik für eine einzige Division. Ab einer Milliarde Stellen, also 1B, muss die Präzision der Berechnung um Integers mit 128 bit erweitert werden. Dabei handelt es sich intern um zwei 64-bit-Variablen, die mittels komplexer Algorithmen die grundlegenden mathematischen Funktionen bereitstellen. Diese weit rechenintensiveren Operationen finden nur dann statt, wenn die erhöhte Präzision auch tatsächlich benötigt wird.

Abschließend drei Beispiele der Berechnung von der milliardsten Nachkommastelle von Pi:


Und nun holt euch den Benchmark und macht das, was unser Karl so viele Jahre vorgezeigt hat: Bencht was das Zeug hält!

Archivierte Versionen


FAQ

Was sind die Mindestvoraussetzungen?

Der Benchmark unterstützt sowohl GPU- als auch CPU-Berechnungen. Bei Grafikkarten ist die wichtigste Mindestvoraussetzung die Unterstützung von
Double Precision, also 64-bit-Gleitkommazahlen. Es gibt zwei Versionen von GPUPI, die normale Version für moderne Hardware und die Legacy Version für ältere Hardware.

Die normale Version von GPUPI unterstützt alle NVIDIA-Grafikkarten ab GeForce 600-Serie und OpenCL-GPUs und -CPUs, die mit OpenCL 1.2 aufwärts kompatibel sind. Außerdem benötigt sie Windows Vista aufwärts in der 64-bit-Variante.

Die Legacy Version unterstützt NVIDIA-Grafikkarten von der GeForce 200-Serie bis zur GeForce 500-Serie, sowie CPUs, die nur mit OpenCL 1.1 kompatibel sind. Weiters könnt ihr die Legacy-Variante auf Windows XP mit 32 bit laufen lassen.

Ob eure Grafikkarte OpenCL und Double Precision unterstützt, könnt ihr in folgenden (leider unvollständigen) Listen auf Wikipedia herausfinden: AMD | NVIDIA

Welche Driver brauche ich für OpenCL?


GPUPI meldet, dass die Datei MSVCP120.dll oder MSVCP140.dll fehlt?

GPUPI 3.x wurde mit Visual Studio 2015 kompiliert und benötigt daher die Visual C++ Redistributable Packages for Visual Studio 2015. Es muss nur die 64-bit-Variante installiert werden: vc_redist.x64.exe

Die "Legacy Version" von GPUPI 3.x wurde aufgrund der notwendigen Abwärtskompatibilität mit Visual Studio 2013 kompiliert. Deshalb benötigt ihr dafür die Visual C++ Redistributable Packages for Visual Studio 2013. Es muss nur die 32-bit-Variante installiert werden: vcredist_x86.exe

Was ist die Batch Size?

Die Batch Size ist quasi die Problemgröße, mit der die Berechnung angegangen wird. Bei 1M werden 1.000.000 Teilberechnung von Pi gemacht und diese dann per Reduktion aufsummiert. Dann geht es weiter mit dem nächsten Batch. Die Summe aller Batches ist dann quasi das Endergebnis.

Übrigens sind die Batches, die während des Benchmarks angezeigt werden, nur Pseudo-Batches, um den Fortschritt besser zu zeigen. Es werden maximal 20 Zwischenschritte gezeigt, ein Pseudo-Batch besteht daher meistens aus mehreren Einzel-Batches mit der Problemgröße, die über Batch Size gewählt wurde.

Wie setze ich die Einstellungen des Benchmarks zurück?

Im selben Verzeichnis wie GPUPI.exe wird nach dem ersten Benchmark-Run eine Konfigurationsdatei mit dem Namen GPUPI.cfg erstellt. Diese Datei muss (ohne gestartetem) Benchmark gelöscht werden. Beim nächsten Start wird automatisch die Default-Konfiguration geladen.

Unterstützt GPU die Verwendung von mehreren Grafikkarten im SLI-/Crossfire-Modus?

Ja! Ab GPUPI 2.0 und höher unterstützt der Benchmark mehrere Grafikkarten oder sogar CPUs im System.

Wie werden die Ergebnisse validiert?

Der hexadezimale Output wurde insofern möglich über die Ergebnis-Tabellen von Fabrice Bellard validiert. Für 32M musste zu y-Cruncher gegriffen werden. Diese fixierten Werte befinden sich in heruntergerechneter Form in der Executable und dienen zum Vergleich mit dem Endergebnis des Benchmarks.

"Der Anzeigetreiber musste nach einem Fehler wiederhergestellt werden" - die Grafikkarte ist aber gar nicht übertaktet ...

Der Driver hat einen Schutzmechanismus eingebaut, um die Grafikkarte vor einer Endlosschleife zu bewahren. Dieser Watchdog Timer greift nach ungefähr 5 Sekunden ein und stellt den Driver wieder her. Meist flackert der Bildschirm kurz schwarz auf, danach kommt die genannte Fehlermeldung. Das Problem entsteht dadurch, dass die Batch Size zu groß ist und die Grafikkarte dieses Paket nicht innerhalb von 5 Sekunden bewältigen kann. Am besten die Batch Size Stück für Stück verringern und es noch einmal versuchen.

Ich bekomme immer "Invalid result", obwohl ich nicht übertaktet habe!

Ältere Anzeigetreiber haben gewisse Bugs bei Double Precision-Berechnungen, die zu leichten Variationen im Ergebnis führen kann. Unbedingt immer den neusten Driver verwenden!

Läuft GPUPI auf Windows XP?

Ja, aber nur die "Legacy Version" (siehe Downloads am Beginn des Artikels).

Ich bekomme die Fehlermeldungen "Could not create context!" und "Could not start worker thread" wenn ich GPUPI auf einem Intel Core2Duo oder Core2Quad laufen lassen will.

Das ist ein Bug im Intel OpenCL Driver. Diese funktionieren nicht mehr mit alten Intel-CPUs. Es gibt allerdings eine einfache Lösung: Der AMD OpenCL Driver, der beim AMD Catalyst dabei ist, läuft problemlos. Es wird jedoch eine AMD-Grafikkarte benötigt, um ihn installieren zu können. Wer keine hat, kann das APP SDK 2.9-1 installieren. Der AMD OpenCL Driver ist derzeit (Stand GPUPI 3) ohnehin die schnellste Variante, um Pi zu berechnen.

Ich möchte eine neue oder alte Intel OpenCL Driver-Version installieren, bekomme aber bei der Installation immer den Fehler, dass bereits "eine höhere Version des Drivers installiert" ist.

Es müssen die folgenden Registry-Keys händisch gelöscht werden, um die Intel OpenCL-Version installieren zu können:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Intel\OpenCL\cpu_version
  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Intel\OpenCL\cpu_version

Die Installation sollte sich nun problemlos starten lassen.

Ich habe eine NVIDIA-Grafikkarte, die den Mindestvoraussetzungen entspricht, es wird aber kein CUDA Driver in GPUPI erkannt.

GPUPI 3 setzt in der normalen Variante auf CUDA 9 und braucht daher den aktuellsten Grafikkarten-Treiber, der im Netz zu finden ist. Sollte das nicht funktionieren, muss die "Legacy Version" von GPUPI installiert werden.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz