AA_matrix-balls_123rf-7367002_ArturZebrowski.jpg

© Artur Zebrowski, 123rf.com

Grafisch rechnen

OpenCL-Workshop, Teil 1: Grundlagen

19.06.2011
Grafikkarten können nicht nur bunte Bildchen malen: Beim parallelen Verarbeiten großer Datenmengen laufen die GPUs den CPUs den Rang ab. Dabei dient OpenCL unabhängig von Hardware und Hersteller als Programmierplattform.

In den Top 500 des Supercomputing [1] finden sich immer mehr Hochleistungsrechner, die ihren Spitzenplatz mithilfe von Grafikkarten erkämpften. Das ist eigentlich nicht weiter verwunderlich, übertrifft doch die theoretische Leistungsfähigkeit von Grafikkarten diejenige von CPUs schon seit langem. Wenn GPUs aber schneller als CPUs arbeiten, warum rechnen wir dann nicht alles auf der GPU? Um diese Frage zu beantworten, muss man zunächst einen Blick auf die Architekturen von Grafikkarte und Prozessor werfen.

In aktuellen Rechnern herrschen Quad- und Hexacore-CPUs mit vier respektive sechs Prozessorkernen vor, die parallel unterschiedliche Aufgaben erledigen können. Während etwa Core 1 gerade auf den Hauptspeicher zugreift, addiert Core 2 die Zahlen zweier Register, Core 3 wiederum springt zu einer anderen Instruktion.

GPUs hingegen bestehen aus mehreren dutzend bis mehreren hundert Cores, die sich jedoch nicht so vielfältig einsetzen lassen. So unterliegen die Rechenaufgaben der GPU der sogenannten Datenparallelität (SIMD/SIMT, [2]). Sämtliche gleichzeitig aktiven Cores können nur dieselbe Instruktion ausführen, dies jedoch auf unterschiedlichen Daten. Damit existiert eine grundlegende Einschränkung für GPU-berechenbare Probleme: Sie müssen datenparallelisierbar sein.

Noch vor einigen Jahren waren Grafikkarten konstruktionsbedingt rein der Beschleunigung von Spezialanwendungen vorbehalten. Neben der 2D- und 3D-Beschleunigung waren dies etwa Aufgaben wie Decoding oder Deinterlacing. Um allgemeine, präzise Berechnungen vorzunehmen, musste man tief in die Trickkiste greifen, um auf relativ umständlichem Weg ans Ziel zu kommen.

Wollten Wissenschaftler etwa zwei große Matrizen addieren, so interpretierten sie diese mithilfe von OpenGL als Texturen, ordneten sie hintereinander an und setzten die vordere halb transparent. Das gerenderte Ergebnis, eine Textur, ließ sich als Ergebnismatrix interpretieren. Was bei einer simplen Addition noch recht einfach funktioniert, stößt jedoch schnell an Grenzen, sobald Multiplikationen, Schleifen, Sprünge oder Bedingungen ins Spiel kommen.

Cuda und OpenCL

Anfang 2007 machte Nvidia den ersten Schritt, um ohne die oben genannten Umwege beliebige, datenparallelisierbare Probleme zu lösen. Dazu stellte der Grafikspezialist Programmierern mit Cuda [3] eine entsprechende Schnittstelle zur Verfügung. Mit C for Cuda lassen sich die bereitgestellten Funktionen bequem ansprechen. Allerdings arbeitet Cuda nur auf Grafikkarten von Nvidia und benötigt zudem den speziellen Compiler NVCC, was das Einbetten in bestehende Projekte (etwa mit GCC) erschwert.

Diese Probleme bewogen Apple dazu, die Initiative zu ergreifen und zusammen mit AMD, IBM und Nvidia bei der Khronos Group, die auch die OpenGL-Spezifikation vorantreibt, eine alternative Spezifikation für einen plattformübergreifenden Standard einzureichen. Das Resultat, die Open Computing Language 1.0 (OpenCL), wurde Ende 2008 veröffentlicht [4]. Mit OpenCL lassen sich heterogene, parallele Programme für eine CPU, GPU oder einen DSP erstellen. Damit ermöglicht die Spezifikation, allgemeine Berechnungen auf der GPU auszuführen, unabhängig von Plattform und Hersteller. Da der offene Standard zudem auf ISO C99 aufsetzt, fällt jedem Programmierer zumindest syntaktisch der Einsatz von OpenCL leicht.

Was geht?

Dieser Workshop richtet sich vorwiegend an Programmierer mit Erfahrung in C++, die einen Einblick in die heterogene parallele Programmierung bekommen möchten, und liefert anhand eines konkreten parallelisierbaren Beispiels eine Grundlage zu eigenen Versuchen beim Programmieren für die Grafikkarte. Zur Lösung auf der GPU eignen sich generell solche Probleme besonders, die einen sehr hohen Rechenaufwand verursachen und nicht auf Double-Precision angewiesen sind. Allerdings bringt die Ausführung auf der GPU einen Overhead mit sich, der sich erst ab einer bestimmten Eingabegröße amortisiert. Eine besonders hohe Beschleunigung erhält man, wenn das Verhältnis von Recheninstruktionen zu Speicherzugriffen klar zugunsten der Recheninstruktionen ausfällt.

Systemvoraussetzungen

Durch den offenen Standard eröffnen sich die Möglichkeiten von OpenCL einem recht weitgefächerten Publikum; praktisch jeder aktuelle Rechner erfüllt die notwendigen Voraussetzungen. Grob gesprochen liegt die Grenze des Erscheinungsjahres zwischen den unterstützten und nicht unterstützten Grafikkarten bei 2007/2008. Implementierungen von OpenCL gibt es unter anderem für Linux, Mac OS X ab 10.6 und Microsoft Windows ab XP SP2 (64 Bit) / SP3 (32Bit). Als Compiler können im Prinzip beliebige C-Compiler dienen, unter anderem GCC ab 4.1, ICC ab 11.x oder MSVS 2008/2010.

Bei AMD/ATI unterstützen alle Radeon-HD-Modelle ab der 5000er-Reihe (auch die Mobility-Varianten) sowie einige FirePro-Modelle den Einsatz von OpenCL. Lediglich Beta-Level-Support genießt die 4000er-Serie, wo ungenauere Fließkommaberechnungen oder Instabilitäten auftreten können. Naturgemäß ideal für OpenCL eignen sich die sogenannten GPU Compute Accelerators der Firestream-Reihe. Eine genaue Liste der unterstützten Boards finden Sie auf der AMD-Website [5].

Nvidia gibt als unterstützte Grafikkarten die GeForce-Reihen 8, 9, 100, 200, 400 und 500 an, die dazu mit mindestens 256 MByte Grafikspeicher aufwarten müssen. Daneben kommen auch einige Quadro- und NVS-Modelle sowie die in Netbooks und Nettops verbaute Systemplattform Ion (Intel Atom plus Nvidia Geforce) mit OpenCL zurecht. Daneben gibt es auch von Nvidia spezielle High-Performance-Computing-Modelle ohne Videoausgang, die auf den Namen Tesla hören. Die komplette Liste hält Nvidia auf seiner Website vor [6]. Auch die neuen Sandy-Bridge-Prozessoren von Intel mit eingebauter GPU lassen sich mit OpenCL nutzen.

AMD unterstützt offiziell das Ausführen von OpenCL auf AMD-x86-Prozessoren ab SSE 2.x; inoffiziell lassen sich jedoch auch CPUs anderer Hersteller verwenden. So kann man für erste Experimente auch ohne unterstützte Grafikkarte OpenCL auf der CPU ausprobieren und gegebenenfalls erst später auf einer geeigneten Grafikkarte ausführen. Auch beim Einsatz auf einer CPU erzielt OpenCL bei geeigneter Programmierung eine Beschleunigung, da es die SSE-Register nutzt.

Die hier vorgestellte Liste OpenCL-fähiger Komponenten ist nicht einmal annähernd vollständig: So bieten beispielsweise auch ARM, S3 und Via OpenCL-Implementierungen für ihre Grafikeinheiten an, IBM unterstützt OpenCL auf den Power- und Cell-Prozessoren. Eine Liste voll standardkonformer Produkte führt die Khronos Group [7].

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • OpenCL-Workshop, Teil 2: Praxis
    OpenCL macht die Grafikkarte vom alltäglichen, aber langweiligen Begleiter zum Turbo für anspruchsvolle Rechenoperationen. Wie im richtigen Leben spielt der Lader seine Qualitäten aber erst auf der Autobahn aus – im Stadtverkehr rührt sich wenig.
  • OpenCL ist da - auch für Linux
    Mit Spannung erwartet, hat Nvidia nun die ersten OpenCL-fähigen Treiber vorgestellt. Und nicht nur das: Linux-User bekommen dieses mal direkt bei Veröffentlichung dasselbe Paket wie Windows-User, was dem plattformunabhängigen Konzept von OpenCL Rechnung trägt.
  • Neues SDK für ATI Stream

    Die neue Version der Entwicklungsumgebung für Anwendungen, die sowohl GPU- als auch CPU-Ressourcen verwenden, unterstützt neuere Versionen von OpenCL und Linux-Distributionen.
  • Update für Open Computing Language

    Das Standardisierungsgremium Khronos Group hat nach 1 1/2 Jahren die Programmierspezifikation OpenCL aktualisiert.
  • AMD veröffentlicht erste öffentliche Beta des OpenCL-SDKs
    AMD hat mit dem ATI Stream Software Development Kit 2.0beta Entwicklerwerkzeuge vorgestellt, mit denen sich Anwendungen in der Open Computing Language (OpenCL) schreiben lassen.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.