Computerressource U SM. Wohin Cuda führt: Praktische Anwendung der GPGPU-Technologie – die besten Geräteanwendungen, die auf Cuda laufen

Seit Jahrzehnten gilt das Mooresche Gesetz, das besagt, dass sich die Anzahl der Transistoren auf einem Chip alle zwei Jahre verdoppelt. Dies geschah jedoch bereits im Jahr 1965, und in den letzten fünf Jahren begann sich die Idee physischer Multikerne in Prozessoren der Verbraucherklasse rasant zu entwickeln: 2005 stellte Intel den Pentium D und AMD den Athlon X2 vor. Damals ließen sich Anwendungen mit 2 Kernen an einer Hand abzählen. Die nächste Generation der Intel-Prozessoren, die eine Revolution darstellte, verfügte jedoch über genau zwei physische Kerne. Darüber hinaus erschien die Quad-Serie im Januar 2007, als Moore selbst zugab, dass sein Gesetz bald nicht mehr gelten würde.

Was jetzt? Selbst in preisgünstigen Bürosystemen sind Dual-Core-Prozessoren und 4 physische Kerne zur Norm geworden, und das in nur 2-3 Jahren. Die Frequenz der Prozessoren wird nicht erhöht, aber die Architektur wird verbessert, die Anzahl der physischen und virtuellen Kerne wird erhöht. Die Idee, Videoadapter zu verwenden, die mit Dutzenden oder sogar Hunderten von Recheneinheiten ausgestattet sind, gibt es jedoch schon seit langem.

Und obwohl die Aussichten für GPU-Computing enorm sind, ist Nvidia CUDA die beliebteste Lösung, die kostenlos ist, über umfangreiche Dokumentation verfügt und im Allgemeinen sehr einfach zu implementieren ist. Es gibt jedoch nicht viele Anwendungen, die diese Technologie verwenden. Im Grunde handelt es sich hierbei um alle Arten von Spezialberechnungen, die dem Durchschnittsnutzer in den meisten Fällen egal sind. Es gibt aber auch Programme für den Massenanwender, über die wir in diesem Artikel sprechen werden.

Zunächst ein wenig über die Technologie selbst und womit sie verwendet wird. Weil Wenn ich einen Artikel schreibe, konzentriere ich mich auf einen breiten Leserkreis, deshalb werde ich versuchen, ihn in einer leicht verständlichen Sprache ohne komplizierte Begriffe und eher kurz zu erklären.

CUDA(Englisch Compute Unified Device Architecture) ist eine Software- und Hardwarearchitektur, die es Ihnen ermöglicht, Berechnungen mit NVIDIA-Grafikprozessoren durchzuführen, die die GPGPU-Technologie (Arbitrary Computing on Video Cards) unterstützen. Die CUDA-Architektur erschien erstmals mit der Veröffentlichung des NVIDIA-Chips der achten Generation – G80 – auf dem Markt und ist in allen nachfolgenden Serien von Grafikchips enthalten, die in den Beschleunigerfamilien GeForce, Quadro und Tesla zum Einsatz kommen. (c) Wikipedia.org

Eingehende Streams werden unabhängig voneinander verarbeitet, d.h. parallel.

Es gibt eine Einteilung in 3 Ebenen:

Netz- Kern. Enthält ein ein-/zwei-/dreidimensionales Array von Blöcken.

Block– enthält viele Threads. Threads verschiedener Blöcke können nicht miteinander interagieren. Warum war es notwendig, Blöcke einzuführen? Jeder Block ist im Wesentlichen für seine eigene Teilaufgabe verantwortlich. Beispielsweise kann ein großes Bild (das eine Matrix ist) in mehrere kleinere Teile (Matrizen) unterteilt und mit jedem Teil des Bildes parallel bearbeitet werden.

Faden- fließen. Threads innerhalb eines Blocks können entweder über den gemeinsamen Speicher interagieren, der übrigens viel schneller ist als der globale Speicher, oder über Thread-Synchronisierungstools.

Kette ist eine Vereinigung von Threads, die miteinander interagieren. Für alle modernen GPUs beträgt die Warp-Größe 32. Als nächstes kommt halbverzerrt, was die Hälfte von Warp ist, weil Der Speicherzugriff erfolgt normalerweise getrennt für die erste und zweite Hälfte des Warps.

Wie Sie sehen, eignet sich diese Architektur hervorragend für die Parallelisierung von Aufgaben. Und obwohl die Programmierung mit einigen Einschränkungen in der Sprache C erfolgt, ist in Wirklichkeit nicht alles so einfach, denn... Nicht alles kann parallelisiert werden. Auch für die Zufallszahlengenerierung (bzw. Initialisierung) gibt es keine Standardfunktionen, dies muss alles separat implementiert werden. Und obwohl es viele vorgefertigte Optionen gibt, macht nichts davon Freude. Die Möglichkeit, Rekursion zu verwenden, ist erst seit relativ kurzer Zeit verfügbar.

Aus Gründen der Übersichtlichkeit wurde ein kleines Konsolenprogramm (um den Code zu minimieren) geschrieben, das Operationen mit zwei Arrays vom Typ Float ausführt, d. h. mit nicht ganzzahligen Werten. Aus den oben genannten Gründen wurde die Initialisierung (Füllen des Arrays mit verschiedenen beliebigen Werten) von der CPU durchgeführt. Als nächstes wurden 25 verschiedene Operationen mit den entsprechenden Elementen aus jedem Array durchgeführt, die Zwischenergebnisse wurden in das dritte Array geschrieben. Die Größe des Arrays hat sich geändert, die Ergebnisse sind wie folgt:

Insgesamt wurden 4 Tests durchgeführt:

1024 Elemente in jedem Array:

Es ist deutlich zu erkennen, dass paralleles Rechnen bei einer so geringen Anzahl von Elementen wenig nützt, weil Die Berechnungen selbst sind viel schneller als ihre Vorbereitung.

4096 Elemente in jedem Array:

Und jetzt können Sie sehen, dass die Grafikkarte Vorgänge auf Arrays dreimal schneller ausführt als der Prozessor. Darüber hinaus hat sich die Ausführungszeit dieses Tests auf der Grafikkarte nicht erhöht (eine leichte Zeitverkürzung kann auf einen Fehler zurückzuführen sein).

Es gibt jetzt 12288 Elemente in jedem Array:

Der Abstand der Grafikkarte hat sich um das Zweifache erhöht. Auch hier ist es erwähnenswert, dass sich die Ausführungszeit auf der Grafikkarte erhöht hat
unbedeutend, aber auf dem Prozessor mehr als dreimal, d.h. proportional zur Komplexität der Aufgabe.

Und der letzte Test besteht aus 36864 Elementen in jedem Array:

In diesem Fall erreicht die Beschleunigung beeindruckende Werte – fast 22-mal schneller auf einer Grafikkarte. Und wieder hat sich die Ausführungszeit auf der Grafikkarte leicht erhöht, auf dem Prozessor jedoch um das Dreifache, was wiederum proportional zur Komplexität der Aufgabe ist.

Wenn Sie die Berechnungen weiter verkomplizieren, gewinnt die Grafikkarte immer mehr. Obwohl das Beispiel etwas übertrieben ist, zeigt die Gesamtsituation deutlich. Aber wie oben erwähnt, lässt sich nicht alles parallelisieren. Zum Beispiel die Berechnung von Pi. Es gibt nur Beispiele, die nach der Monte-Carlo-Methode geschrieben wurden, aber die Genauigkeit der Berechnungen beträgt 7 Dezimalstellen, d. h. regelmäßiger Schwimmer. Um die Genauigkeit von Berechnungen zu erhöhen, ist langes Rechnen erforderlich, und hier treten Probleme auf, denn Es ist sehr, sehr schwierig, dies effektiv umzusetzen. Ich konnte im Internet keine Beispiele finden, die CUDA verwenden und Pi auf 1 Million Dezimalstellen genau berechnen. Es wurden Versuche unternommen, eine solche Anwendung zu schreiben, aber die einfachste und effizienteste Methode zur Berechnung von Pi ist der Brent-Salamin-Algorithmus oder die Gauß-Formel. Der bekannte SuperPI verwendet höchstwahrscheinlich (gemessen an der Betriebsgeschwindigkeit und der Anzahl der Iterationen) die Gaußsche Formel. Und nach zu urteilen
Aufgrund der Tatsache, dass SuperPI Single-Threaded ist, des Mangels an Beispielen unter CUDA und des Scheiterns meiner Versuche, ist es unmöglich, die Pi-Zählung effektiv zu parallelisieren.

Man merkt übrigens, wie die Belastung der GPU bei Berechnungen zunimmt und auch Speicher allokiert wird.

Kommen wir nun zu den praktischeren Vorteilen von CUDA, nämlich den derzeit existierenden Programmen, die diese Technologie nutzen. In den meisten Fällen handelt es sich dabei um alle Arten von Audio-/Videokonvertern und -editoren.

Beim Testen wurden 3 verschiedene Videodateien verwendet:

      *Die Entstehungsgeschichte des Films Avatar – 1920x1080, MPEG4, h.264.
      *Serie „Lie to me“ – 1280x720, MPEG4, h.264.
      *Serie „It’s Always Sunny in Philadelphia“ – 624x464, xvid.

Der Container und die Größe der ersten beiden Dateien waren .mkv und 1,55 GB, und die letzte war .avi und 272 MB.

Beginnen wir mit einem sehr sensationellen und beliebten Produkt – Badaboom. Verwendete Version - 1.2.1.74 . Die Kosten für das Programm betragen $29.90 .

Die Programmoberfläche ist einfach und intuitiv – links wählen wir die Quelldatei oder den Quelldatenträger aus und rechts das gewünschte Gerät, für das wir kodieren. Es gibt auch einen Benutzermodus, in dem Parameter manuell eingestellt werden, den wir verwendet haben.

Schauen wir uns zunächst an, wie schnell und effizient das Video „in sich selbst“ kodiert wird, d. h. gleiche Auflösung und ungefähr die gleiche Größe. Wir messen die Geschwindigkeit in Bildern pro Sekunde und nicht in der verstrichenen Zeit. Auf diese Weise ist es bequemer, zu vergleichen und zu berechnen, wie stark ein Video beliebiger Länge komprimiert wird. Weil Heute denken wir über „grüne“ Technologie nach, dann werden die Grafiken entsprechend sein -)

Die Kodierungsgeschwindigkeit hängt direkt von der Qualität ab, das ist offensichtlich. Es ist erwähnenswert, dass die Lichtauflösung (wir nennen es traditionell SD) kein Problem für Badaboom darstellt – die Kodierungsgeschwindigkeit ist 5,5-mal höher als die ursprüngliche Video-Framerate (24 fps). Und selbst schwere 1080p-Videos werden vom Programm in Echtzeit konvertiert. Es ist erwähnenswert, dass die Qualität des endgültigen Videos dem Originalvideomaterial sehr nahe kommt, d. h. Badaboom kodiert sehr, sehr effizient.

Aber normalerweise übertragen sie Videos in eine niedrigere Auflösung. Mal sehen, wie die Dinge in diesem Modus sind. Mit abnehmender Auflösung verringerte sich auch die Videobitrate. Sie betrug 9500 Kbit/s für die 1080p-Ausgabedatei, 4100 Kbit/s für 720p und 2400 Kbit/s für 720x404. Die Wahl wurde auf der Grundlage eines angemessenen Größen-/Qualitätsverhältnisses getroffen.

Keine Kommentare erforderlich. Wenn Sie von 720p auf normale SD-Qualität rippen, dauert die Transkodierung eines zweistündigen Films etwa 30 Minuten. Und gleichzeitig wird die Prozessorlast unbedeutend sein, Sie können Ihrer Arbeit nachgehen, ohne sich unwohl zu fühlen.

Was wäre, wenn Sie das Video in ein Format für ein mobiles Gerät konvertieren? Wählen Sie dazu das iPhone-Profil (Bitrate 1 Mbit/s, 480x320) aus und schauen Sie sich die Kodierungsgeschwindigkeit an:

Muss ich etwas sagen? Ein zweistündiger Film in normaler iPhone-Qualität wird in weniger als 15 Minuten transkodiert. Bei HD-Qualität ist es schwieriger, aber immer noch sehr schnell. Die Hauptsache ist, dass die Qualität des ausgegebenen Videos bei der Anzeige auf dem Telefondisplay auf einem recht hohen Niveau bleibt.

Generell sind die Eindrücke von Badaboom positiv, die Bediengeschwindigkeit gefällt und die Benutzeroberfläche ist einfach und übersichtlich. Alle möglichen Fehler in früheren Versionen (ich habe die Beta 2008 verwendet) wurden behoben. Bis auf eines: Der Pfad zur Quelldatei sowie zum Ordner, in dem das fertige Video gespeichert ist, sollte keine russischen Buchstaben enthalten. Im Vergleich zu den Vorteilen des Programms ist dieser Nachteil jedoch unbedeutend.

Als nächstes werden wir haben Super LoiLoScope. Sie fragen nach der regulären Version 3.280 Rubel, und für die Touch-Version, die die Touch-Steuerung in Windows 7 unterstützt, verlangen sie genauso viel 4.440 Rubel. Versuchen wir herauszufinden, warum der Entwickler so viel Geld will und warum der Videoeditor Multitouch-Unterstützung benötigt. Letzte verwendete Version - 1.8.3.3 .

Es ist ziemlich schwierig, die Programmoberfläche mit Worten zu beschreiben, deshalb habe ich beschlossen, ein kurzes Video zu machen. Ich möchte gleich sagen, dass die GPU-Beschleunigung, wie bei allen Videokonvertern für CUDA, nur für die Videoausgabe in MPEG4 mit dem h.264-Codec unterstützt wird.

Während der Kodierung beträgt die Prozessorauslastung 100 %, was jedoch keine Beschwerden verursacht. Der Browser und andere Light-Anwendungen werden nicht langsamer.

Kommen wir nun zur Leistung. Zunächst einmal ist alles wie bei Badaboom – das Video wird in eine ähnliche Qualität transkodiert.

Die Ergebnisse sind viel besser als bei Badaboom. Auch die Qualität ist hervorragend, der Unterschied zum Original erkennt man nur, wenn man die Rahmen paarweise unter der Lupe vergleicht.

Wow, hier übertrifft LoiloScope Badaboom um das 2,5-fache. Gleichzeitig kann man problemlos parallel ein weiteres Video schneiden und kodieren, Nachrichten lesen und sogar Filme schauen und selbst FullHD wird problemlos abgespielt, obwohl die Prozessorauslastung maximal ist.

Versuchen wir nun, ein Video für ein mobiles Gerät zu erstellen. Nennen wir das Profil genauso wie in Badaboom – iPhone (480x320, 1 Mbit/s):

Es liegt kein Fehler vor. Alles wurde mehrmals überprüft, jedes Mal war das Ergebnis das gleiche. Dies geschieht höchstwahrscheinlich aus dem einfachen Grund, dass die SD-Datei mit einem anderen Codec und in einem anderen Container aufgezeichnet wurde. Bei der Transkodierung wird das Video zunächst dekodiert, in Matrizen einer bestimmten Größe aufgeteilt und komprimiert. Der bei xvid verwendete ASP-Decoder ist bei paralleler Dekodierung langsamer als AVC (für h.264). Allerdings sind 192 fps achtmal schneller als die Geschwindigkeit des Originalvideos; eine 23-minütige Serie wird in weniger als 4 Minuten komprimiert. Die Situation wiederholte sich bei anderen in xvid/DivX komprimierten Dateien.

LoiloScope Ich habe nur angenehme Eindrücke hinterlassen – die Benutzeroberfläche ist trotz ihrer Ungewöhnlichkeit komfortabel und funktional und die Bedienungsgeschwindigkeit ist nicht zu loben. Die relativ schlechte Funktionalität ist etwas frustrierend, aber oft müssen Sie bei einer einfachen Installation nur die Farben leicht anpassen, sanfte Übergänge erstellen und Text hinzufügen, und LoiloScope leistet hier hervorragende Arbeit. Auch der Preis ist etwas erschreckend – mehr als 100 US-Dollar für die reguläre Version sind im Ausland normal, aber solche Zahlen kommen uns immer noch etwas wild vor. Allerdings gebe ich zu, dass ich vielleicht über den Kauf nachgedacht hätte, wenn ich zum Beispiel oft Heimvideos gefilmt und geschnitten hätte. Gleichzeitig habe ich übrigens die Möglichkeit geprüft, HD- (bzw. AVCHD-)Inhalte direkt von einer Videokamera zu bearbeiten, ohne sie vorher in ein anderes Format zu konvertieren; LoiloScope hat keine Probleme mit Dateien wie .mts festgestellt.

Neue Technologien sind wie eine neu entstehende evolutionäre Spezies. Ein seltsames Wesen, im Gegensatz zu den vielen Oldtimern. Manchmal umständlich, manchmal lustig. Und seine neuen Qualitäten scheinen zunächst überhaupt nicht für diese sesshafte und stabile Welt geeignet zu sein.

Allerdings vergeht ein wenig Zeit und es stellt sich heraus, dass der Anfänger schneller läuft, höher springt und insgesamt stärker ist. Und er frisst mehr Fliegen als seine rückläufigen Nachbarn. Und dann beginnen dieselben Nachbarn zu verstehen, dass es keinen Sinn hat, mit diesem ungeschickten Ex zu streiten. Es ist besser, mit ihm befreundet zu sein und noch besser, eine Symbiose zu organisieren. Sie werden sehen, dass es mehr Fliegen geben wird.

Die GPGPU-Technologie (General-Purpose Graphics Processing Units – Allzweck-Grafikprozessor) existierte lange Zeit nur in den theoretischen Berechnungen kluger Akademiker. Wie sonst? Vorzuschlagen, den über Jahrzehnte gewachsenen Rechenprozess radikal zu verändern, indem man die Berechnung seiner Parallelzweige einer Grafikkarte anvertraut – dazu sind nur Theoretiker in der Lage.

Das Logo der CUDA-Technologie erinnert uns daran, dass sie in den Tiefen von gewachsen ist
3D-Grafik.

Aber die GPGPU-Technologie würde nicht lange auf den Seiten von Universitätszeitschriften verstauben. Indem sie die Federn ihrer besten Qualitäten auflockerte, erregte sie die Aufmerksamkeit der Hersteller. So entstand CUDA – eine Implementierung von GPGPU auf GeForce-Grafikprozessoren von nVidia.

Dank CUDA sind GPGPU-Technologien zum Mainstream geworden. Und jetzt erklärt nur der kurzsichtigste und mit einer dicken Schicht Faulheit bedeckte Entwickler von Programmiersystemen keine Unterstützung für CUDA mit seinem Produkt. IT-Publikationen hielten es für eine Ehre, die Details der Technologie in zahlreichen prall gefüllten populärwissenschaftlichen Artikeln darzustellen, und Konkurrenten setzten sich sofort mit Mustern und Cross-Compilern zusammen, um etwas Ähnliches zu entwickeln.

Öffentliche Anerkennung ist nicht nur ein Traum für aufstrebende Nachwuchstalente, sondern auch für neu geborene Technologien. Und CUDA hatte Glück. Sie ist bekannt, man redet und schreibt über sie.

Sie schreiben einfach so, als würden sie weiterhin in dicken wissenschaftlichen Fachzeitschriften über GPGPU diskutieren. Sie bombardieren den Leser mit einer Reihe von Begriffen wie „Grid“, „SIMD“, „Warp“, „Host“, „Textur und konstanter Speicher“. Sie tauchen ihn bis ganz nach oben in die Organisationsdiagramme von nVidia-GPUs ein, führen ihn auf verschlungenen Pfaden paralleler Algorithmen und zeigen (der stärkste Schachzug) lange Codelisten in der C-Sprache. Als Ergebnis stellt sich heraus, dass wir am Eingang des Artikels einen neuen Leser haben, der den brennenden Wunsch hat, CUDA zu verstehen, und am Ausgang den gleichen Leser haben, aber mit einem geschwollenen Kopf voller Fakten und Diagrammen , Code, Algorithmen und Begriffe.

Mittlerweile besteht das Ziel jeder Technologie darin, unser Leben einfacher zu machen. Und CUDA leistet dabei großartige Arbeit. Die Ergebnisse ihrer Arbeit werden jeden Skeptiker besser überzeugen als Hunderte von Schemata und Algorithmen.

Nicht überall

CUDA wird von Hochleistungs-Supercomputern unterstützt
nVidia Tesla.

Doch bevor man sich die Ergebnisse der Arbeit von CUDA im Bereich der Erleichterung des Lebens des Durchschnittsbenutzers ansieht, lohnt es sich, alle seine Einschränkungen zu verstehen. Genau wie bei einem Geist: jeder Wunsch, aber einer. CUDA hat auch seine Achillesfersen. Einer davon sind die Einschränkungen der Plattformen, auf denen es funktionieren kann.

Die Liste der nVidia-Grafikkarten, die CUDA unterstützen, wird in einer speziellen Liste namens CUDA-fähige Produkte aufgeführt. Die Liste ist ziemlich beeindruckend, aber leicht einzuordnen. CUDA-Unterstützung wird nicht verweigert:

    Modelle der nVidia GeForce 8., 9., 100., 200. und 400. Serie mit mindestens 256 Megabyte Videospeicher an Bord. Die Unterstützung erstreckt sich sowohl auf Desktop- als auch auf Mobilkarten.

    Die überwiegende Mehrheit der Desktop- und mobilen Grafikkarten sind nVidia Quadro.

    Alle Lösungen aus der nvidia ION Netbook-Serie.

    Hochleistungsfähige HPC- (High Performance Computing) und nVidia Tesla-Supercomputerlösungen, die sowohl für Personal Computing als auch für die Organisation skalierbarer Clustersysteme eingesetzt werden.

Daher lohnt es sich, vor dem Einsatz von CUDA-basierten Softwareprodukten einen Blick auf diese Favoritenliste zu werfen.

Zur Unterstützung von CUDA ist neben der Grafikkarte selbst ein entsprechender Treiber erforderlich. Es ist das Bindeglied zwischen Zentral- und Grafikprozessor und fungiert als eine Art Software-Schnittstelle für den Zugriff auf Programmcode und Daten zum Multicore-Schatz der GPU. Um sicherzustellen, dass Sie keinen Fehler machen, empfiehlt nVidia, die Treiberseite zu besuchen und sich die neueste Version zu besorgen.

...sondern der Prozess selbst

Wie funktioniert CUDA? Wie lässt sich der komplexe Prozess des Parallelrechnens auf einer speziellen GPU-Hardwarearchitektur erklären, ohne den Leser in den Abgrund spezifischer Begriffe zu stürzen?

Sie können dies versuchen, indem Sie sich vorstellen, wie der Zentralprozessor das Programm in Symbiose mit dem Grafikprozessor ausführt.

Architektonisch sind die Zentraleinheit (CPU) und ihr Grafikgegenstück (GPU) unterschiedlich gestaltet. Wenn wir eine Analogie zur Welt der Automobilindustrie ziehen, dann ist die CPU ein Kombi, einer von denen, die man „Scheune“ nennt. Es sieht aus wie ein Pkw, ist aber gleichzeitig (aus Sicht der Entwickler) „ein Schweizer, ein Sensenmann und ein Spieler auf der Pfeife.“ Übernimmt gleichzeitig die Rolle eines Kleinlastwagens, eines Busses und eines hypertrophierten Fließheckmodells. Kurz gesagt, ein Kombi. Es verfügt über wenige Zylinderkerne, die jedoch fast jede Aufgabe bewältigen, und der beeindruckende Cache-Speicher ist in der Lage, eine Menge Daten zu speichern.

Aber die GPU ist ein Sportwagen. Es gibt nur eine Funktion: den Piloten so schnell wie möglich ins Ziel zu bringen. Daher kein großer Kofferraum, keine zusätzlichen Sitze. Aber es gibt hunderte Male mehr Zylinderkerne als die CPU.

Dank CUDA müssen sich GPGPU-Programmentwickler nicht mit der Komplexität der Programmierung befassen
Entwicklung für Grafik-Engines wie DirectX und OpenGL

Im Gegensatz zum Zentralprozessor, der in der Lage ist, jede Aufgabe, einschließlich Grafiken, zu lösen, jedoch mit durchschnittlicher Leistung, ist der Grafikprozessor an die schnelle Lösung einer Aufgabe angepasst: die Umwandlung einer Reihe von Polygonen am Eingang in eine Reihe von Pixeln die Ausgabe. Darüber hinaus kann dieses Problem parallel durch den Einsatz von Hunderten relativ einfacher Rechenkerne in der GPU gelöst werden.

Was für ein Tandem kann es also aus einem Kombi und einem Sportwagen geben? CUDA funktioniert ungefähr so: Das Programm läuft auf der CPU, bis es einen Codeabschnitt gibt, der parallel ausgeführt werden kann. Dann wird es nicht langsam auf zwei (oder sogar acht) Kernen der kühlsten CPU ausgeführt, sondern auf Hunderte von GPU-Kernen übertragen. Gleichzeitig wird die Ausführungszeit dieses Abschnitts erheblich verkürzt, was bedeutet, dass auch die Ausführungszeit des gesamten Programms verkürzt wird.

Technologisch ändert sich für den Programmierer nichts. Der Code von CUDA-Programmen ist in der Sprache C geschrieben. Genauer gesagt, in seinem speziellen Dialekt „C mit Streams“ (C mit Streams). Diese in Stanford entwickelte Erweiterung der C-Sprache heißt Brook. Die Schnittstelle, die Brook-Code an die GPU überträgt, ist der Treiber einer Grafikkarte, die CUDA unterstützt. Es organisiert den gesamten Verarbeitungsprozess dieses Programmabschnitts so, dass die GPU für den Programmierer wie ein CPU-Coprozessor aussieht. Sehr ähnlich der Verwendung eines mathematischen Coprozessors in den frühen Tagen des Personal Computing. Mit dem Aufkommen von Brook, Grafikkarten mit CUDA-Unterstützung und Treibern dafür, kann jeder Programmierer in seinen Programmen auf die GPU zugreifen. Doch vorher war dieser Schamanismus im Besitz eines engen Kreises ausgewählter Leute, die Jahre damit verbrachten, Programmiertechniken für DirectX- oder OpenGL-Grafik-Engines zu verfeinern.

In das Fass dieses anspruchsvollen Honigs – CUDAs Lob – lohnt es sich, einen Wermutstropfen, also Einschränkungen, zu setzen. Nicht jedes Problem, das programmiert werden muss, kann mit CUDA gelöst werden. Es wird nicht möglich sein, die Lösung routinemäßiger Büroaufgaben zu beschleunigen, aber Sie können darauf vertrauen, dass CUDA das Verhalten von Tausenden Kämpfern desselben Typs in World of Warcraft berechnet. Aber das ist eine erfundene Aufgabe. Schauen wir uns Beispiele dafür an, was CUDA bereits sehr effektiv löst.

Gerechte Werke

CUDA ist eine sehr pragmatische Technologie. Nachdem nVidia die Unterstützung in seine Grafikkarten implementiert hatte, erwartete es zu Recht, dass das CUDA-Banner von vielen Enthusiasten sowohl im Universitätsumfeld als auch im Handel aufgegriffen würde. Und so geschah es. CUDA-basierte Projekte leben und bringen Vorteile.

NVIDIA PhysX

Bei der Werbung für ihr nächstes Gaming-Meisterwerk betonen Hersteller oft den 3D-Realismus. Aber egal wie real die 3D-Spielwelt auch sein mag: Wenn die elementaren Gesetze der Physik wie Schwerkraft, Reibung und Hydrodynamik falsch umgesetzt werden, wird die Unwahrheit sofort spürbar.

Eine der Fähigkeiten der NVIDIA PhysX-Physik-Engine ist die realistische Arbeit mit Geweben.

Die Implementierung von Algorithmen zur Computersimulation grundlegender physikalischer Gesetze ist eine sehr arbeitsintensive Aufgabe. Die bekanntesten Unternehmen in diesem Bereich sind das irische Unternehmen Havok mit seinem plattformübergreifenden physikalischen Havok Physics und das kalifornische Ageia – der Urvater des weltweit ersten physikalischen Prozessors (PPU – Physics Processing Unit) und der dazugehörigen PhysX-Physik-Engine. Obwohl der erste von ihnen von Intel übernommen wurde, arbeitet er jetzt aktiv an der Optimierung der Havok-Engine für ATI-Grafikkarten und AMD-Prozessoren. Aber Ageia wurde mit seiner PhysX-Engine Teil von nVidia. Gleichzeitig löste nVidia das recht schwierige Problem der Anpassung von PhysX an die CUDA-Technologie.

Möglich wurde dies dank der Statistik. Es ist statistisch erwiesen, dass einige ihrer Kerne immer noch im Leerlauf sind, egal wie komplex das Rendering einer GPU ist. Auf diesen Kernen läuft die PhysX-Engine.

Dank CUDA wurde der Löwenanteil der Berechnungen im Zusammenhang mit der Physik der Spielwelt auf der Grafikkarte durchgeführt. Die freigewordene Leistung des Zentralprozessors wurde zur Lösung anderer Gameplay-Probleme genutzt. Das Ergebnis ließ nicht lange auf sich warten. Laut Experten hat sich der Leistungsgewinn im Gameplay mit PhysX auf CUDA um mindestens eine Größenordnung erhöht. Auch die Wahrscheinlichkeit, physikalische Gesetze zu erkennen, ist gestiegen. CUDA übernimmt die routinemäßige Berechnung der Umsetzung von Reibung, Schwerkraft und anderen uns bekannten Dingen für mehrdimensionale Objekte. Nun passen nicht nur die Helden und ihre Ausrüstung perfekt in die Gesetze der uns bekannten physischen Welt, sondern auch Staub, Nebel, Druckwelle, Flamme und Wasser.

CUDA-Version des Texturkomprimierungspakets NVIDIA Texture Tools 2

Mögen Sie realistische Objekte in modernen Spielen? Es lohnt sich, den Texturentwicklern zu danken. Aber je mehr Realität in der Textur steckt, desto größer ist ihr Volumen. Je mehr es wertvolle Erinnerung in Anspruch nimmt. Um dies zu vermeiden, werden Texturen vorkomprimiert und bei Bedarf dynamisch dekomprimiert. Und Komprimierung und Dekomprimierung sind reine Berechnungen. Um mit Texturen arbeiten zu können, hat nVidia das NVIDIA Texture Tools-Paket veröffentlicht. Es unterstützt eine effiziente Komprimierung und Dekomprimierung von DirectX-Texturen (das sogenannte HF-Format). Die zweite Version dieses Pakets bietet Unterstützung für die Komprimierungsalgorithmen BC4 und BC5, die in der DirectX 11-Technologie implementiert sind. Aber die Hauptsache ist, dass NVIDIA Texture Tools 2 CUDA-Unterstützung enthält. Laut nVidia führt dies zu einer 12-fachen Leistungssteigerung bei Texturkomprimierungs- und Dekomprimierungsaufgaben. Dies bedeutet, dass Gameplay-Frames schneller geladen werden und den Spieler mit ihrem Realismus begeistern.

Das NVIDIA Texture Tools 2-Paket ist für die Verwendung mit CUDA konzipiert. Der Leistungsgewinn beim Komprimieren und Dekomprimieren von Texturen ist offensichtlich.

Der Einsatz von CUDA kann die Effizienz der Videoüberwachung deutlich verbessern.

Echtzeit-Videostream-Verarbeitung

Was auch immer man sagen mag, die gegenwärtige Welt ist aus der Sicht der Spionage viel näher an der Welt von Orwells Big Brother, als es scheint. Sowohl Autofahrer als auch Besucher öffentlicher Plätze spüren den Blick von Videokameras.

Volle Ströme von Videoinformationen fließen in die Zentren ihrer Verarbeitung und... treffen auf ein schmales Bindeglied – eine Person. In den meisten Fällen ist er die letzte Autorität, die die Videowelt überwacht. Darüber hinaus ist die Behörde nicht die effektivste. Blinzelt, wird abgelenkt und versucht einzuschlafen.

Dank CUDA wurde es möglich, Algorithmen zur gleichzeitigen Verfolgung mehrerer Objekte in einem Videostream zu implementieren. In diesem Fall erfolgt der Vorgang in Echtzeit und das Video hat volle 30 fps. Im Vergleich zur Implementierung eines solchen Algorithmus auf modernen Multi-Core-CPUs führt CUDA zu einer zwei- bis dreifachen Leistungssteigerung, und das ist, wie Sie sehen, ziemlich viel.

Videokonvertierung, Audiofilterung

Der Badaboom-Videokonverter ist der erste, der CUDA verwendet, um die Konvertierung zu beschleunigen.

Es ist schön, ein neues Videoverleihprodukt in FullHD-Qualität und auf einem großen Bildschirm anzusehen. Aber Sie können keinen großen Bildschirm mit auf Reisen nehmen, und der FullHD-Videocodec wird auf dem stromsparenden Prozessor eines mobilen Geräts scheitern. Die Bekehrung kommt zur Rettung. Doch die meisten, die es in der Praxis kennengelernt haben, bemängeln die lange Umstellungszeit. Das ist verständlich, der Prozess ist routinemäßig, für die Parallelisierung geeignet und seine Ausführung auf der CPU ist nicht sehr optimal.

Aber CUDA meistert das mit Bravour. Das erste Anzeichen ist der Badaboom-Konverter von Elevental. Mit der Wahl von CUDA haben die Badaboom-Entwickler die richtige Entscheidung getroffen. Tests zeigen, dass es einen Standardfilm von eineinhalb Stunden in weniger als zwanzig Minuten in das iPhone/iPod Touch-Format konvertiert. Und das, obwohl dieser Vorgang bei reiner CPU-Nutzung mehr als eine Stunde dauert.

Hilft CUDA und professionellen Musikliebhabern. Jeder von ihnen würde ein halbes Königreich für eine effektive FIR-Frequenzweiche geben – eine Reihe von Filtern, die das Klangspektrum in mehrere Bänder aufteilen. Dieser Vorgang ist sehr arbeitsintensiv und zwingt den Tontechniker bei einer großen Menge an Audiomaterial dazu, mehrere Stunden lang „zu rauchen“. Die Implementierung einer CUDA-basierten FIR-Frequenzweiche beschleunigt den Betrieb um ein Hundertfaches.

CUDA-Zukunft

Nachdem die GPGPU-Technologie Wirklichkeit geworden ist, ruht sich CUDA nicht auf seinen Lorbeeren aus. Wie überall funktioniert auch bei CUDA das Reflexionsprinzip: Jetzt beeinflusst nicht nur die Architektur der nVidia-Videoprozessoren die Entwicklung von CUDA SDK-Versionen, sondern die CUDA-Technologie selbst zwingt nVidia dazu, die Architektur seiner Chips zu überdenken. Ein Beispiel für eine solche Reflexion ist die nVidia ION-Plattform. Die zweite Version ist speziell für die Lösung von CUDA-Problemen optimiert. Dies bedeutet, dass Verbraucher selbst bei relativ kostengünstigen Hardwarelösungen die gesamte Leistung und die brillanten Funktionen von CUDA erhalten.

Und es ist darauf ausgelegt, Host-Code (Haupt-, Steuercode) und Gerätecode (Hardware-Code) (Dateien mit der Erweiterung .cu) in Objektdateien zu übersetzen, die beispielsweise für den Prozess der Zusammenstellung des endgültigen Programms oder der endgültigen Bibliothek in einer beliebigen Programmierumgebung geeignet sind in NetBeans.

Die CUDA-Architektur verwendet ein Grid-Speichermodell, Cluster-Thread-Modellierung und SIMD-Anweisungen. Anwendbar nicht nur für Hochleistungs-Grafikrechnen, sondern auch für verschiedene wissenschaftliche Berechnungen mit nVidia-Grafikkarten. Wissenschaftler und Forscher nutzen CUDA in zahlreichen Bereichen, darunter Astrophysik, Computerbiologie und Chemie, Modellierung der Fluiddynamik, elektromagnetische Wechselwirkungen, Computertomographie, seismische Analyse und mehr. CUDA bietet die Möglichkeit, über OpenGL und Direct3D eine Verbindung zu Anwendungen herzustellen. CUDA ist eine plattformübergreifende Software für Betriebssysteme wie Linux, Mac OS X und Windows.

Am 22. März 2010 veröffentlichte nVidia das CUDA Toolkit 3.0, das Unterstützung für OpenCL enthielt.

Ausrüstung

Die CUDA-Plattform erschien erstmals mit der Veröffentlichung des NVIDIA G80-Chips der achten Generation auf dem Markt und wurde in allen nachfolgenden Grafikchipserien präsent, die in den Tesla-Beschleunigerfamilien GeForce, Quadro und NVidia zum Einsatz kommen.

Die erste Hardwareserie, die das CUDA SDK unterstützte, das G8x, verfügte über einen 32-Bit-Vektorprozessor mit einfacher Genauigkeit, der das CUDA SDK als API nutzte (CUDA unterstützt den C-Doppeltyp, aber seine Genauigkeit wurde jetzt auf 32-Bit reduziert Gleitkomma). Spätere GT200-Prozessoren unterstützen 64-Bit-Präzision (nur SFU), aber die Leistung ist deutlich schlechter als bei 32-Bit-Präzision (aufgrund der Tatsache, dass es nur zwei SFUs pro Stream-Multiprozessor gibt, während es acht Skalarprozessoren gibt). Die GPU organisiert Hardware-Multithreading, wodurch Sie alle Ressourcen der GPU nutzen können. Damit eröffnet sich die Perspektive, die Funktionen des physikalischen Beschleunigers auf den Grafikbeschleuniger zu übertragen (ein Beispiel für die Umsetzung ist nVidia PhysX). Es eröffnet auch vielfältige Möglichkeiten für den Einsatz von Computergrafik-Hardware zur Durchführung komplexer nichtgrafischer Berechnungen, beispielsweise in der Computerbiologie und anderen Wissenschaftszweigen.

Vorteile

Im Vergleich zum herkömmlichen Ansatz zur Organisation allgemeiner Datenverarbeitung über Grafik-APIs bietet die CUDA-Architektur in diesem Bereich die folgenden Vorteile:

Einschränkungen

  • Alle auf dem Gerät ausführbaren Funktionen unterstützen keine Rekursion (CUDA Toolkit 3.1 unterstützt Zeiger und Rekursion) und unterliegen einigen anderen Einschränkungen

Unterstützte GPUs und Grafikbeschleuniger

Die Liste der Geräte des Geräteherstellers Nvidia mit erklärter vollständiger Unterstützung der CUDA-Technologie finden Sie auf der offiziellen Nvidia-Website: CUDA-Enabled GPU Products (Englisch).

Tatsächlich unterstützen derzeit die folgenden Peripheriegeräte die CUDA-Technologie auf dem PC-Hardwaremarkt:

Spezifikationsversion GPU Grafikkarten
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/3700, 4700x2, 1xxM, 32 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadro 4000, 5000, 6000, GeForce (GF110) GTX 560 TI 448, GTX570, GTX580, GTX590
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GeForce GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GT 640, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, GTX 660M, GeForce GT 650M, GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce für Desktop-Computer
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 520
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTS 450
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GT 240
GeForce GT 220
GeForce 210
GeForce GTS 150
GeForce GT 130
GeForce GT 120
GeForce G100
GeForce 9800 GX2
GeForce 9800 GTX+
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 8800 GTS 512
GeForce 8800 GT
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8500 GT
GeForce 8400GS
Nvidia GeForce für mobile Computer
GeForce GTX 580M
GeForce GTX 570M
GeForce GTX 560M
GeForce GT 555M
GeForce GT 540M
GeForce GT 525M
GeForce GT 520M
GeForce GTX 485M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT 445M
GeForce GT 435M
GeForce GT 425M
GeForce GT 420M
GeForce GT 415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 240M
GeForce GT 130M
GeForce G210M
GeForce G110M
GeForce G105M
GeForce 310M
GeForce 305M
GeForce 9800M GTX
GeForce 9800M GT
GeForce 9800M GTS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650MGS
GeForce 9600M GT
GeForce 9600MGS
GeForce 9500MGS
GeForce 9500M G
GeForce 9300MGS
GeForce 9300M G
GeForce 9200MGS
GeForce 9100M G
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600MGS
GeForce 8400M GT
GeForce 8400MGS
Nvidia Tesla *
Tesla C2050/C2070
Tesla M2050/M2070/M2090
Tesla S2050
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870
Nvidia Quadro für Desktop-Computer
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3700
Quadro FX 1700
Quadro FX 570
Quadro FX 470
Quadro FX 380 Low Profile
Quadro FX 370
Quadro FX 370 Low Profile
Quadro CX
Quadro NVS 450
Quadro NVS 420
Quadro NVS 290
Quadroplex 2100 D4
Quadroplex 2200 D2
Quadro Plex 2100 S4
Quadro Plex 1000 Modell IV
Nvidia Quadro für mobiles Computing
Quadro 5010M
Quadro 5000M
Quadro 4000M
Quadro 3000M
Quadro 2000M
Quadro 1000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 5100M
Quadro NVS 4200M
Quadro NVS 3100M
Quadro NVS 2100M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
  • Die Modelle Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 ermöglichen GPU-Berechnungen mit doppelter Präzision.

Merkmale und Spezifikationen verschiedener Versionen

Funktionsunterstützung (nicht aufgeführte Funktionen sind
wird für alle Rechenfunktionen unterstützt)
Rechenleistung (Version)
1.0 1.1 1.2 1.3 2.x

32-Bit-Wörter im globalen Speicher
Nein Ja

Gleitkommawerte im globalen Speicher
Ganzzahlige atomare Funktionen, auf denen operiert wird
32-Bit-Wörter im gemeinsamen Speicher
Nein Ja
atomicExch() läuft auf 32-Bit
Gleitkommawerte im gemeinsam genutzten Speicher
Ganzzahlige atomare Funktionen, auf denen operiert wird
64-Bit-Wörter im globalen Speicher
Warp-Abstimmungsfunktionen
Gleitkommaoperationen mit doppelter Genauigkeit Nein Ja
Atomare Funktionen, die auf 64-Bit laufen
Ganzzahlwerte im gemeinsam genutzten Speicher
Nein Ja
Fließkomma-Atomaddition, die ausgeführt wird
32-Bit-Wörter im globalen und gemeinsam genutzten Speicher
_Abstimmung()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Oberflächenfunktionen
3D-Raster aus Fadenblöcken
Technische Spezifikationen Rechenleistung (Version)
1.0 1.1 1.2 1.3 2.x
Maximale Dimensionalität des Rasters der Gewindeblöcke 2 3
Maximale x-, y- oder z-Dimension eines Gitters aus Gewindeblöcken 65535
Maximale Dimensionalität des Gewindeblocks 3
Maximale x- oder y-Dimension eines Blocks 512 1024
Maximale Z-Dimension eines Blocks 64
Maximale Anzahl von Threads pro Block 512 1024
Warp-Größe 32
Maximale Anzahl residenter Blöcke pro Multiprozessor 8
Maximale Anzahl residenter Warps pro Multiprozessor 24 32 48
Maximale Anzahl residenter Threads pro Multiprozessor 768 1024 1536
Anzahl der 32-Bit-Register pro Multiprozessor 8 TAUSEND 16K 32K
Maximale Menge an gemeinsam genutztem Speicher pro Multiprozessor 16 KB 48 KB
Anzahl der gemeinsam genutzten Speicherbänke 16 32
Menge des lokalen Speichers pro Thread 16 KB 512 KB
Konstante Speichergröße 64 KB
Cache-Arbeitssatz pro Multiprozessor für konstanten Speicher 8 KB
Cache-Arbeitssatz pro Multiprozessor für Texturspeicher Geräteabhängig, zwischen 6 KB und 8 KB
Maximale Breite für 1D-Textur
8192 32768
Maximale Breite für 1D-Textur
Referenz, die an den linearen Speicher gebunden ist
2 27
Maximale Breite und Anzahl der Schichten
für eine 1D-Layer-Texturreferenz
8192 x 512 16384 x 2048
Maximale Breite und Höhe für 2D
Texturreferenz gebunden an
linearer Speicher oder ein CUDA-Array
65536 x 32768 65536 x 65535
Maximale Breite, Höhe und Anzahl
von Ebenen für eine 2D-Layer-Texturreferenz
8192 x 8192 x 512 16384 x 16384 x 2048
Maximale Breite, Höhe und Tiefe
für eine 3D-Texturreferenz, die an linear gebunden ist
Speicher oder ein CUDA-Array
2048 x 2048 x 2048
Maximale Anzahl von Texturen, die
kann an einen Kernel gebunden werden
128
Maximale Breite für eine 1D-Oberfläche
Referenz, die an ein CUDA-Array gebunden ist
Nicht
unterstützt
8192
Maximale Breite und Höhe für ein 2D
Oberflächenreferenz, die an ein CUDA-Array gebunden ist
8192 x 8192
Maximale Anzahl von Oberflächen, die
kann an einen Kernel gebunden werden
8
Maximale Anzahl von Anweisungen pro
Kernel
2 Millionen

Beispiel

CudaArray* cu_array; Textur< float , 2 >tex; // Array cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), Breite Höhe) ; // Bilddaten in Array kopieren cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // Das Array an die Textur binden cudaBindTexture( tex, cu_array) ; // Kernel dim3 ausführen blockDim(16, 16, 1) ; dim3 gridDim(width / blockDim.x, height / blockDim.y, 1) ; Kernel<<< gridDim, blockDim, 0 >>> (d_odata, Breite, Höhe) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int height, int width) ( unsigned int x = blockIdx.x * blockDim.x + threadIdx.x ; unsigned int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = texfetch(tex, x, y); odata[ y* width+ x] = c; )

Importieren Sie pycuda.driver als drv import numpy drv.init() dev = drv.Device(0) ctx = dev.make_context() mod = drv.SourceModule( „““ __global__ void multiply_them(float *dest, float *a, float *b) ( const int i = threadIdx.x; dest[i] = a[i] * b[i]; ) „““) multiply_them = mod.get_function ("multiply_them" ) a = numpy.random .randn (400 ) .astype (numpy.float32 ) b = numpy.random .randn (400 ) .astype (numpy.float32 ) dest = numpy.zeros_like (a) multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) print dest-a*b

CUDA als Fach an Universitäten

Seit Dezember 2009 wird das CUDA-Softwaremodell an 269 Universitäten weltweit gelehrt. In Russland werden Schulungen zu CUDA an der Polytechnischen Universität St. Petersburg und der Staatlichen Universität Jaroslawl angeboten. P. G. Demidov, Moskau, Nischni Nowgorod, St. Petersburg, Twer, Kasan, Nowosibirsk, Staatliche Technische Universität Nowosibirsk, Staatliche Universitäten Omsk und Perm, Internationale Universität für die Natur der Gesellschaft und des Menschen „Dubna“, Staatliche Energieuniversität Iwanowo, Staatliche Universität Belgorod , MSTU sie. Bauman, nach ihm benannte Russische Chemisch-Technische Universität. Mendeleev, Interregionales Supercomputerzentrum RAS, . Darüber hinaus wurde im Dezember 2009 bekannt gegeben, dass das erste russische Wissenschafts- und Bildungszentrum „Parallel Computing“ in der Stadt Dubna seinen Betrieb aufgenommen hat, zu dessen Aufgaben Schulungen und Beratungen zur Lösung komplexer Rechenprobleme auf GPUs gehören.

In der Ukraine werden Kurse zu CUDA am Kiewer Institut für Systemanalyse angeboten.

Links

Offizielle Ressourcen

  • CUDA Zone (Russisch) – offizielle CUDA-Website
  • CUDA GPU Computing (Englisch) – offizielle Webforen zum Thema CUDA Computing

Inoffizielle Ressourcen

Toms Hardware
  • Dmitri Tschekanow. nVidia CUDA: Rechnen auf einer Grafikkarte oder der Tod der CPU? . Tom's Hardware (22. Juni 2008). Archiviert
  • Dmitri Tschekanow. nVidia CUDA: Benchmarking von GPU-Anwendungen für den Massenmarkt. Tom's Hardware (19. Mai 2009). Archiviert vom Original am 4. März 2012. Abgerufen am 19. Mai 2009.
iXBT.com
  • Alexey Berillo. NVIDIA CUDA – nichtgrafisches Computing auf GPUs. Teil 1 . iXBT.com (23. September 2008). Archiviert vom Original am 4. März 2012. Abgerufen am 20. Januar 2009.
  • Alexey Berillo. NVIDIA CUDA – nichtgrafisches Computing auf GPUs. Teil 2 . iXBT.com (22. Oktober 2008). - Beispiele für die Implementierung von NVIDIA CUDA. Archiviert vom Original am 4. März 2012. Abgerufen am 20. Januar 2009.
Andere Ressourcen
  • Boreskov Alexey Viktorovich. CUDA-Grundlagen (20. Januar 2009). Archiviert vom Original am 4. März 2012. Abgerufen am 20. Januar 2009.
  • Wladimir Frolow. Einführung in die CUDA-Technologie. Online-Magazin „Computer Graphics and Multimedia“ (19. Dezember 2008). Archiviert vom Original am 4. März 2012. Abgerufen am 28. Oktober 2009.
  • Igor Oskolkow. NVIDIA CUDA ist eine erschwingliche Eintrittskarte in die Welt des Big Computing. Computerra (30. April 2009). Abgerufen am 3. Mai 2009.
  • Wladimir Frolow. Einführung in die CUDA-Technologie (1. August 2009). Archiviert vom Original am 4. März 2012. Abgerufen am 3. April 2010.
  • GPGPU.ru. Verwendung von Grafikkarten für Computer
  • . Paralleles Rechenzentrum

Anmerkungen

siehe auch

Bei der Entwicklung moderner Prozessoren besteht die Tendenz zu einer sukzessiven Erhöhung der Anzahl der Kerne, was deren Fähigkeiten im Parallelrechnen erhöht. Allerdings gibt es schon längst GPUs, die den CPUs in dieser Hinsicht deutlich überlegen sind. Und diese Fähigkeiten von GPUs wurden bereits von einigen Unternehmen berücksichtigt. Die ersten Versuche, Grafikbeschleuniger für Non-Target-Computing zu nutzen, gab es seit Ende der 90er Jahre. Doch erst das Aufkommen von Shadern gab den Anstoß für die Entwicklung einer völlig neuen Technologie, und 2003 erschien das Konzept der GPGPU (General-Purpose Graphics Processing Units). Eine wichtige Rolle bei der Entwicklung dieser Initiative spielte BrookGPU, eine spezielle Erweiterung für die Sprache C. Vor der Einführung von BrookGPU konnten Programmierer nur über die Direct3D- oder OpenGL-API mit GPUs arbeiten. Brook ermöglichte es Entwicklern, mit einer vertrauten Umgebung zu arbeiten, und der Compiler selbst implementierte mithilfe spezieller Bibliotheken die Interaktion mit der GPU auf niedrigem Niveau.

Dieser Fortschritt konnte nicht umhin, die Aufmerksamkeit der Branchenführer AMD und NVIDIA auf sich zu ziehen, die mit der Entwicklung eigener Softwareplattformen für nichtgrafisches Computing auf ihren Grafikkarten begannen. Niemand kennt besser als GPU-Entwickler alle Nuancen und Funktionen ihrer Produkte, was es denselben Unternehmen ermöglicht, das Softwarepaket für bestimmte Hardwarelösungen so effizient wie möglich zu optimieren. Derzeit entwickelt NVIDIA die CUDA-Plattform (Compute Unified Device Architecture), AMD nennt eine ähnliche Technologie CTM (Close To Metal) oder AMD Stream Computing. Wir werden uns einige der Fähigkeiten von CUDA ansehen und die Rechenfähigkeiten des G92-Grafikchips der GeForce 8800 GT-Grafikkarte in der Praxis bewerten.

Aber schauen wir uns zunächst einige Nuancen bei der Durchführung von Berechnungen mithilfe von GPUs an. Ihr Hauptvorteil besteht darin, dass der Grafikchip zunächst für die Ausführung mehrerer Threads ausgelegt ist, während jeder Kern einer herkömmlichen CPU einen Strom sequenzieller Anweisungen ausführt. Jede moderne GPU ist ein Multiprozessor, der aus mehreren Rechenclustern mit jeweils vielen ALUs besteht. Der leistungsstärkste moderne GT200-Chip besteht aus 10 solcher Cluster, die jeweils über 24 Stream-Prozessoren verfügen. Die getestete Grafikkarte GeForce 8800 GT auf Basis des G92-Chips verfügt über sieben große Recheneinheiten mit jeweils 16 Stream-Prozessoren. CPUs verwenden SIMD-SSE-Blöcke für Vektorberechnungen (einzelner Befehl, mehrere Daten – ein Befehl wird für mehrere Daten ausgeführt), was eine Umwandlung der Daten in 4 Vektoren erfordert. Die GPU verarbeitet Threads skalar, d. h. Eine Anweisung wird über mehrere Threads angewendet (SIMT – Single Instruction Multiple Threads). Dies erspart Entwicklern die Konvertierung von Daten in Vektoren und ermöglicht eine beliebige Verzweigung in Streams. Jede GPU-Recheneinheit verfügt über direkten Speicherzugriff. Und die Bandbreite des Videospeichers ist dank der Verwendung mehrerer separater Speichercontroller (auf der Top-End-G200 gibt es 8 64-Bit-Kanäle) und hoher Betriebsfrequenzen höher.

Im Allgemeinen sind GPUs bei bestimmten Aufgaben bei der Arbeit mit großen Datenmengen deutlich schneller als CPUs. Unten sehen Sie eine Illustration dieser Aussage:


Das Diagramm zeigt die Dynamik des CPU- und GPU-Leistungswachstums seit 2003. NVIDIA bezeichnet diese Daten in seinen Dokumenten gerne als Werbung, es handelt sich dabei aber nur um theoretische Berechnungen und in der Realität dürfte der Abstand natürlich deutlich geringer ausfallen.

Wie dem auch sei, es gibt ein enormes Potenzial an GPUs, die genutzt werden können, und das erfordert eine spezifische Herangehensweise an die Softwareentwicklung. All dies wird in der CUDA-Hardware- und Softwareumgebung implementiert, die aus mehreren Softwareebenen besteht – der High-Level-CUDA-Laufzeit-API und der Low-Level-CUDA-Treiber-API.


CUDA verwendet für die Programmierung die Standardsprache C, was einen der Hauptvorteile für Entwickler darstellt. Zunächst umfasst CUDA die Bibliotheken BLAS (Basic Linear Algebra Package) und FFT (Fourier Transform). CUDA verfügt außerdem über die Fähigkeit, mit OpenGL- oder DirectX-Grafik-APIs zu interagieren, kann auf niedrigem Niveau entwickelt werden und zeichnet sich durch eine optimierte Verteilung der Datenströme zwischen CPU und GPU aus. CUDA-Berechnungen werden gleichzeitig mit Grafikberechnungen durchgeführt, im Gegensatz zur ähnlichen AMD-Plattform, bei der eine spezielle virtuelle Maschine für Berechnungen auf der GPU gestartet wird. Aber auch ein solches „Zusammenleben“ ist fehlerbehaftet, wenn durch die Grafik-API eine große Last entsteht, während gleichzeitig CUDA läuft – schließlich haben grafische Operationen immer noch eine höhere Priorität. Die Plattform ist mit den 32- und 64-Bit-Betriebssystemen Windows XP, Windows Vista, MacOS X und verschiedenen Linux-Versionen kompatibel. Die Plattform ist offen und auf der Website können Sie neben speziellen Treibern für die Grafikkarte auch die Softwarepakete CUDA Toolkit und CUDA Developer SDK herunterladen, darunter einen Compiler, Debugger, Standardbibliotheken und Dokumentation.

Was die praktische Umsetzung von CUDA betrifft, so wurde diese Technologie lange Zeit nur für hochspezialisierte mathematische Berechnungen im Bereich der Teilchenphysik, Astrophysik, Medizin oder zur Vorhersage von Veränderungen auf dem Finanzmarkt usw. verwendet. Doch nach und nach rückt diese Technologie dem Normalanwender immer näher, insbesondere tauchen spezielle Plug-Ins für Photoshop auf, die die Rechenleistung der GPU nutzen können. Auf einer speziellen Seite können Sie die gesamte Liste der Programme studieren, die die Fähigkeiten von NVIDIA CUDA nutzen.

Als Praxistest der neuen Technologie auf der Grafikkarte MSI NX8800GT-T2D256E-OC verwenden wir das Programm TMPGEnc. Dieses Produkt ist kommerziell erhältlich (die Vollversion kostet 100 US-Dollar), für MSI-Grafikkarten gibt es es jedoch als Bonus in einer Testversion für einen Zeitraum von 30 Tagen. Sie können diese Version von der Website des Entwicklers herunterladen, aber um TMPGEnc 4.0 XPress MSI Special Edition zu installieren, benötigen Sie die Originaldiskette mit den Treibern von der MSI-Karte – ohne diese wird das Programm nicht installiert.

Um die umfassendsten Informationen zu den Rechenfunktionen in CUDA anzuzeigen und diese mit anderen Videoadaptern zu vergleichen, können Sie das spezielle Dienstprogramm CUDA-Z verwenden. Dies sind die Informationen zu unserer GeForce 8800GT-Grafikkarte:




Im Vergleich zu den Referenzmodellen arbeitet unser Exemplar mit höheren Frequenzen: Die Rasterdomäne ist 63 MHz höher als der Nennwert, die Shader-Einheiten sind um 174 MHz schneller und der Speicher ist 100 MHz schneller.

Wir vergleichen die Konvertierungsgeschwindigkeit desselben HD-Videos bei der Berechnung nur mit der CPU und mit zusätzlicher Aktivierung von CUDA im TMPGEnc-Programm auf der folgenden Konfiguration:

  • Prozessor: Pentium Dual-Core E5200 2,5 GHz;
  • Hauptplatine: Gigabyte P35-S3;
  • Speicher: 2x1GB GoodRam PC6400 (5-5-5-18-2T)
  • Grafikkarte: MSI NX8800GT-T2D256E-OC;
  • Festplatte: 320 GB WD3200AAKS;
  • Netzteil: CoolerMaster eXtreme Power 500-PCAP;
  • Betriebssystem: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • Grafikkartentreiber: ForceWare 180.60.
Für Tests wurde der Prozessor im ersten und zweiten Fall auf 3 GHz (in der 11,5x261 MHz-Konfiguration) und auf 4 GHz (11,5x348 MHz) bei einer RAM-Frequenz von 835 MHz übertaktet. Video in Full HD-Auflösung 1920 x 1080, eine Minute und zwanzig Sekunden lang. Um zusätzliche Belastung zu erzeugen, wurde ein Rauschunterdrückungsfilter aktiviert, dessen Einstellungen auf den Standardeinstellungen belassen wurden.


Die Kodierung erfolgte mit dem DivX 6.8.4 Codec. In den Qualitätseinstellungen dieses Codecs werden alle Werte auf Standard belassen, Multithreading ist aktiviert.


Die Multithreading-Unterstützung in TMPGEnc ist zunächst auf der Registerkarte „CPU/GPU-Einstellungen“ aktiviert. Im selben Abschnitt wird auch CUDA aktiviert.


Wie Sie dem obigen Screenshot entnehmen können, ist die Filterverarbeitung mit CUDA aktiviert, der Hardware-Videodecoder jedoch nicht. Die Programmdokumentation warnt davor, dass die Aktivierung des letzten Parameters die Dateiverarbeitungszeit verlängert.

Basierend auf den Testergebnissen wurden folgende Daten ermittelt:


Bei 4 GHz und aktiviertem CUDA haben wir nur ein paar Sekunden (oder 2 %) gewonnen, was nicht besonders beeindruckend ist. Bei einer geringeren Frequenz können Sie durch die Aktivierung dieser Technologie jedoch etwa 13 % Zeit einsparen, was sich bei der Verarbeitung großer Dateien deutlich bemerkbar macht. Dennoch sind die Ergebnisse nicht so beeindruckend wie erwartet.

Das TMPGEnc-Programm verfügt über eine CPU- und CUDA-Auslastungsanzeige; in dieser Testkonfiguration zeigte es die CPU-Auslastung bei etwa 20 % und den Grafikkern bei den restlichen 80 % an. Dadurch haben wir die gleichen 100 % wie bei der Konvertierung ohne CUDA, und es gibt möglicherweise überhaupt keinen Zeitunterschied (ist aber dennoch vorhanden). Auch die geringe Speicherkapazität von 256 MB stellt keinen limitierenden Faktor dar. Den Messwerten von RivaTuner zufolge wurden im Betrieb nicht mehr als 154 MB Videospeicher genutzt.



Schlussfolgerungen

Das TMPGEnc-Programm ist eines derjenigen, die die CUDA-Technologie der breiten Masse zugänglich machen. Durch die Verwendung der GPU in diesem Programm können Sie den Videoverarbeitungsprozess beschleunigen und den Zentralprozessor erheblich entlasten, sodass der Benutzer bequem gleichzeitig andere Aufgaben erledigen kann. In unserem konkreten Beispiel hat die Grafikkarte GeForce 8800GT 256 MB die Timing-Leistung bei der Videokonvertierung auf Basis eines übertakteten Pentium Dual-Core E5200-Prozessors leicht verbessert. Es ist jedoch deutlich zu erkennen, dass mit abnehmender Frequenz der Gewinn durch die Aktivierung von CUDA zunimmt; bei schwachen Prozessoren ist der Gewinn durch die Verwendung viel größer. Vor dem Hintergrund dieser Abhängigkeit ist es durchaus logisch anzunehmen, dass sich die Ergebnisse eines Systems mit CUDA auch bei steigender Belastung (z. B. Einsatz einer sehr großen Anzahl zusätzlicher Videofilter) deutlich unterscheiden erhebliches Delta des Zeitunterschieds, der für den Kodierungsprozess aufgewendet wird. Vergessen Sie auch nicht, dass der G92 derzeit nicht der leistungsstärkste Chip ist und modernere Grafikkarten in solchen Anwendungen eine deutlich höhere Leistung bieten. Während die Anwendung ausgeführt wird, ist die GPU jedoch nicht vollständig ausgelastet und wahrscheinlich hängt die Lastverteilung von jeder Konfiguration separat ab, nämlich von der Kombination aus Prozessor und Grafikkarte, was letztendlich zu einem größeren (oder kleineren) prozentualen Anstieg führen kann der CUDA-Aktivierung. Auf jeden Fall wird denjenigen, die mit großen Videodatenmengen arbeiten, mit dieser Technologie immer noch eine erhebliche Zeitersparnis ermöglicht.

Zwar hat CUDA noch keine große Popularität erlangt; die Qualität der Software, die mit dieser Technologie arbeitet, muss verbessert werden. Im von uns getesteten Programm TMPGEnc 4.0 XPress funktionierte diese Technologie nicht immer. Dasselbe Video konnte mehrmals neu kodiert werden, und beim nächsten Start war die CUDA-Last plötzlich bereits 0 %. Und dieses Phänomen war auf völlig anderen Betriebssystemen völlig zufällig. Außerdem lehnte das betreffende Programm die Verwendung von CUDA bei der Kodierung in das XviD-Format ab, mit dem beliebten DivX-Codec gab es jedoch keine Probleme.

Dadurch kann die CUDA-Technologie bisher nur bei bestimmten Aufgaben die Leistung von Personalcomputern deutlich steigern. Aber der Anwendungsbereich dieser Technologie wird sich erweitern, und der Prozess der Erhöhung der Anzahl der Kerne in herkömmlichen Prozessoren deutet auf einen Anstieg der Nachfrage nach parallelem Multithread-Computing in modernen Softwareanwendungen hin. Nicht umsonst sind in letzter Zeit alle Branchenführer von der Idee besessen, CPU und GPU in einer einheitlichen Architektur zu vereinen (man erinnere sich nur an die viel beworbene AMD Fusion). Vielleicht ist CUDA eine der Etappen im Prozess dieser Vereinigung.


Wir danken folgenden Firmen für die Bereitstellung von Testgeräten:

– eine Reihe von Low-Level-Softwareschnittstellen ( API) zum Erstellen von Spielen und anderen leistungsstarken Multimediaanwendungen. Beinhaltet Hochleistungsunterstützung 2D- Und 3D-Grafik-, Ton- und Eingabegeräte.

Direct3D (D3D) – Schnittstelle zur dreidimensionalen Darstellung Primitiven(geometrische Körper). Im Lieferumfang enthalten .

OpenGL(aus dem Englischen Öffnen Sie die Grafikbibliothek, wörtlich „offene Grafikbibliothek“) ist eine Spezifikation, die eine programmiersprachenunabhängige plattformübergreifende Programmierschnittstelle zum Schreiben von Anwendungen mit zweidimensionalen und dreidimensionalen Computergrafiken definiert. Enthält über 250 Funktionen zum Zeichnen komplexer 3D-Szenen aus einfachen Grundelementen. Wird zur Erstellung von Videospielen, virtueller Realität und Visualisierung in der wissenschaftlichen Forschung verwendet. Auf dem Bahnsteig Windows konkurriert mit .

OpenCL(aus dem Englischen Offene Computersprache, wörtlich – eine offene Sprache der Berechnungen) – Rahmen(Softwaresystem-Framework) zum Schreiben von Computerprogrammen im Zusammenhang mit parallelem Rechnen auf verschiedenen Grafiken ( GPU) Und ( ). Zum Rahmen OpenCL Enthält eine Programmiersprache und eine An( API). OpenCL Bietet Parallelität auf Befehlsebene und auf Datenebene und ist eine Implementierung der Technik GPGPU.

GPGPU(abgekürzt aus dem Englischen) Allzweck-Grafikverarbeitungseinheiten, buchstäblich - GPU Allzweck) ist eine Technik zur Verwendung einer Grafikverarbeitungseinheit (GPU) oder einer Grafikkarte für allgemeine Rechenaufgaben, die normalerweise von einem Computer ausgeführt werden.

Shader(Englisch) Shader) – ein Programm zum Konstruieren von Schatten auf synthetisierten Bildern, das in dreidimensionalen Grafiken verwendet wird, um die endgültigen Parameter eines Objekts oder Bildes zu bestimmen. Enthält typischerweise beliebig komplexe Beschreibungen von Lichtabsorption und -streuung, Texturabbildung, Reflexion und Brechung, Schattierung, Oberflächenverschiebung und Nachbearbeitungseffekten. Komplexe Oberflächen können mit einfachen geometrischen Formen visualisiert werden.

Rendern(Englisch) Rendern) – Visualisierung, in der Computergrafik, der Prozess der Gewinnung eines Bildes von einem Modell mithilfe von Software.

SDK(abgekürzt aus dem Englischen) Software-Entwicklungskit) – eine Reihe von Softwareentwicklungstools.

CPU(abgekürzt aus dem Englischen) Zentraleinheit, wörtlich – zentral/Haupt/Hauptrechengerät) – zentral (Mikro); ein Gerät, das Maschinenanweisungen ausführt; Ein Teil der Hardware, der für die Durchführung von Rechenoperationen (angegeben durch das Betriebssystem und die Anwendungssoftware) und die Koordinierung des Betriebs aller Geräte verantwortlich ist.

GPU(abgekürzt aus dem Englischen) Grafikverarbeitungseinheit, wörtlich – grafisches Computergerät) – Grafikprozessor; ein separates Gerät oder eine Spielekonsole, die grafische Darstellung (Visualisierung) durchführt. Moderne GPUs sind sehr effizient bei der realistischen Verarbeitung und Darstellung von Computergrafiken. Der Grafikprozessor in modernen Videoadaptern dient als 3D-Grafikbeschleuniger, kann aber in manchen Fällen auch für Berechnungen genutzt werden ( GPGPU).

Probleme CPU

Die Leistungssteigerung bei herkömmlichen Modellen erfolgte lange Zeit hauptsächlich durch eine konsequente Erhöhung der Taktfrequenz (ca. 80 % der Leistung wurde durch die Taktfrequenz bestimmt) bei gleichzeitiger Erhöhung der Anzahl der Transistoren auf einem Chip . Eine weitere Erhöhung der Taktfrequenz (bei einer Taktfrequenz von mehr als 3,8 GHz überhitzen die Chips einfach!) stößt jedoch auf eine Reihe grundlegender physikalischer Hindernisse (da der technologische Prozess fast die Größe eines Atoms erreicht hat: , und die Größe eines Siliziumatoms beträgt ungefähr 0,543 nm):

Erstens nimmt der Leckstrom der Transistoren zu, wenn die Kristallgröße abnimmt und die Taktfrequenz zunimmt. Dies führt zu einem erhöhten Stromverbrauch und einer erhöhten Wärmeabgabe;

Zweitens werden die Vorteile höherer Taktraten teilweise durch die Speicherzugriffslatenz zunichte gemacht, da die Speicherzugriffszeiten nicht mit steigenden Taktraten mithalten können.

Drittens werden herkömmliche serielle Architekturen bei einigen Anwendungen mit steigenden Taktraten aufgrund des sogenannten „von-Neumann-Engpasses“, einer Leistungsbeschränkung, die sich aus dem sequentiellen Rechenfluss ergibt, ineffizient. Gleichzeitig erhöhen sich die Verzögerungen bei der ohmsch-kapazitiven Signalübertragung, was einen zusätzlichen Engpass im Zusammenhang mit einer Erhöhung der Taktfrequenz darstellt.

Entwicklung GPU

Parallel dazu gab es (und gibt!) eine Entwicklung GPU:

November 2008 – Intel stellte eine Linie von 4-Kern vor Intel Core i7, die auf einer Mikroarchitektur der neuen Generation basieren Nehalem. Die Prozessoren arbeiten mit einer Taktfrequenz von 2,6-3,2 GHz. Hergestellt mit einer 45-nm-Prozesstechnologie.

Dezember 2008 – Die Auslieferung von 4-Kern-Geräten begann AMD Phenom II 940(Code Name - Deneb). Arbeitet mit einer Frequenz von 3 GHz und wird mit einer 45-nm-Prozesstechnologie hergestellt.

Mai 2009 – Unternehmen AMD stellte die GPU-Version vor ATI Radeon HD 4890 wobei die Kerntaktrate von 850 MHz auf 1 GHz erhöht wurde. Das ist das erste Grafik Prozessor mit 1 GHz. Die Rechenleistung des Chips stieg dank der Frequenzerhöhung von 1,36 auf 1,6 Teraflops. Der Prozessor enthält 800 (!) Rechenkerne und unterstützt Videospeicher GDDR5, DirectX 10.1, ATI CrossFireX und alle anderen Technologien, die modernen Grafikkartenmodellen innewohnen. Der Chip wird auf Basis der 55-nm-Technologie hergestellt.

Hauptunterschiede GPU

Unterscheidungsmerkmale GPU(im Vergleich zu ) Sind:

– eine Architektur, die maximal darauf abzielt, die Berechnungsgeschwindigkeit von Texturen und komplexen grafischen Objekten zu erhöhen;

– Spitzenleistung typisch GPU viel höher als das ;

– dank einer speziellen Förderarchitektur, GPU viel effizienter bei der Verarbeitung grafischer Informationen als .

„Krise des Genres“

„Genrekrise“ für bis 2005 gereift – dann erschienen sie. Aber trotz der Entwicklung der Technologie ist die Steigerung der Produktivität konventioneller merklich abgenommen. Gleichzeitig Leistung GPU es wächst weiter. So kristallisierte sich im Jahr 2003 diese revolutionäre Idee heraus – Nutzen Sie die Rechenleistung der Grafik für Ihre Bedürfnisse. GPUs werden zunehmend für „nicht-grafische“ Berechnungen verwendet (Physiksimulation, Signalverarbeitung, Computermathematik/-geometrie, Datenbankoperationen, Computerbiologie, Computerökonomie, Computer Vision usw.).

Das Hauptproblem bestand darin, dass es keine Standard-Programmierschnittstelle gab GPU. Die Entwickler verwendeten OpenGL oder Direct3D, aber es war sehr praktisch. Konzern NVIDIA(einer der größten Hersteller von Grafik-, Medien- und Kommunikationsprozessoren sowie drahtlosen Medienprozessoren; gegründet 1993) begann mit der Entwicklung eines einheitlichen und komfortablen Standards – und führte die Technologie ein CUDA.

Wie es begann

2006 – NVIDIA demonstriert CUDA™; der Beginn einer Revolution in der Informatik GPU.

2007 – NVIDIA veröffentlicht Architektur CUDA(Originalfassung CUDA SDK wurde am 15. Februar 2007 eingereicht); Nominierung „Bestes neues Produkt“ des Magazins Populärwissenschaft und „Readers‘ Choice“ aus der Publikation HPCWire.

2008 – Technologie NVIDIA CUDA gewann die Kategorie „Technical Excellence“ von PC-Magazin.

Was CUDA

CUDA(abgekürzt aus dem Englischen) Computing Unified Device Architecture, wörtlich - Unified Computing-Architektur von Geräten) - Architektur (eine Reihe von Software und Hardware), die es Ihnen ermöglicht, darauf zu produzieren GPU allgemeine Berechnungen, während GPU fungiert tatsächlich als leistungsstarker Coprozessor.

Technologie NVIDIA CUDA™ ist die einzige Entwicklungsumgebung in einer Programmiersprache C, was es Entwicklern ermöglicht, Software zu erstellen, die dank der Rechenleistung von GPUs komplexe Rechenprobleme in kürzerer Zeit löst. Millionen Menschen arbeiten bereits auf der Welt GPU mit der Unterstützung CUDA, und Tausende von Programmierern nutzen bereits (kostenlose!) Tools CUDA um Anwendungen zu beschleunigen und die komplexesten, ressourcenintensivsten Aufgaben zu lösen – von der Video- und Audiokodierung bis hin zur Öl- und Gasexploration, Produktmodellierung, medizinischen Bildgebung und wissenschaftlichen Forschung.

CUDA gibt dem Entwickler die Möglichkeit, nach eigenem Ermessen den Zugriff auf den Befehlssatz des Grafikbeschleunigers zu organisieren, seinen Speicher zu verwalten und darauf komplexe parallele Berechnungen zu organisieren. Unterstützung für Grafikbeschleuniger CUDA wird zu einer leistungsstarken programmierbaren offenen Architektur, ähnlich der heutigen . All dies ermöglicht dem Entwickler einen Low-Level-, verteilten und schnellen Zugriff auf die Hardware CUDA eine notwendige Grundlage für die Entwicklung seriöser High-Level-Tools wie Compiler, Debugger, mathematische Bibliotheken und Softwareplattformen.

Uralsky, führender Technologiespezialist NVIDIA, vergleichen GPU Und , sagt dazu: „ - Das ist ein SUV. Er fährt immer und überall, aber nicht sehr schnell. A GPU- Das ist ein Sportwagen. Auf einer schlechten Straße kommt er einfach nirgendwo hin, aber geben Sie ihm einen guten Untergrund, und er zeigt seine ganze Geschwindigkeit, von der ein SUV noch nie geträumt hat!…“

Technologiefähigkeiten CUDA