
Denken Sie einmal darüber nach. Haben Sie jemals über zwei Dinge gleichzeitig nachgedacht? Wenn Sie kurz darüber reflektieren, werden Sie feststellen, dass unser Gehirn sehr komplex ist, sich aber nur auf einen Gedankengang konzentrieren kann. Natürlich kann im Unterbewusstsein eine Menge passieren, aber man kann sich nur auf eine Sache bewusst konzentrieren – man kann sich nicht auf zwei Dinge gleichzeitig fokussieren.
Aber was wäre, wenn Sie das könnten? Das würde eine breite Palette von Möglichkeiten eröffnen. So könnte man z. B. aus mehreren Quellen lernen, drei mathematische Gleichungen gleichzeitig im Kopf lösen oder buchstäblich Multitasking betreiben, indem man mit jeder Hand etwas anderes macht.
Das ist die Idee, die hinter der Nutzung von Grafikprozessoren (GPUs) steht, um die Entwicklungszeit für einige spezielle Technologien zu verkürzen. Mit ihrer Fähigkeit, wesentlich mehr Threads (im Vergleich zu CPUs) zu verarbeiten, können sie Aufgaben ausführen, die eine starke Parallelverarbeitung erfordern, wie z. B. das Rendern von Grafiken, das Trainieren von Machine-Learning-Modellen und die Durchführung komplexer Simulationen.
Eine der Möglichkeiten, Ihre GPUs so zu programmieren, dass sie Daten ausspucken, die nicht nur aus Grafiken bestehen, ist ein Framework namens CUDA. Und genau damit befassen wir uns heute in diesem Blog.
Inhalt
Warum wird CUDA heute verwendet?
CUDA, die Abkürzung für Compute Unified Device Architecture, beschleunigt Rechenaufgaben durch die Nutzung von Grafikkarten (Graphics Processing Units, GPUs). Es handelt sich um ein Framework, das 2006 von NVIDIA entwickelt wurde. CUDA ermöglicht es Entwicklern, Programme zu schreiben, die große Rechenaufgaben in kleinere Aufgaben aufteilen und dabei parallele Berechnungen durchführen.
Dabei werden die vielen Kerne eines Grafikprozessors genutzt, um mehrere Rechenoperationen gleichzeitig durchzuführen – im Gegensatz zu einer CPU, die einige wenige leistungsstarke Kerne verwendet, die für die sequentielle Verarbeitung optimiert sind. Diese Parallelverarbeitungsfunktion beschleunigt Aufgaben mit großen Datensätzen oder komplexen Berechnungen, wie sie beim Grafik-Rendering, bei wissenschaftlichen Simulationen und beim maschinellen Lernen anfallen, erheblich.
CUDA von Nvidia gibt es seit mehr als zwei Jahrzehnten und aufgrund seiner Popularität und der hohen Kompatibilität mit den physischen Grafikkarten des Mutterunternehmens hat es sich zu einem der führenden Systeme in der Branche entwickelt. Und obwohl CUDA die Vorherrschaft in diesem Bereich verliert, bleibt es die erste Wahl für die Beschleunigung des Trainings von Modellen für computerbasiertes Lernen.
CUDA in der Industrie
Wir haben über die Vorteile der Verwendung von Grafikprozessoren gesprochen und darüber, wie man sie mit CUDA für bestimmte Aufgaben programmieren kann. Der beliebteste Anwendungsfall ist derzeit der Aufstieg des maschinellen Lernens und der künstlichen Intelligenz, aber wir haben ein paar andere Branchen aufgelistet, die Sie vielleicht noch nicht kennen und die ebenfalls die Vorteile der GPU-Rechenleistung nutzen können.
Industrie | Aufgabe/Arbeitsbedarf | Wie CUDA-fähige Programme helfen |
Informatik & KI | Deep-Learning Trainings, NLP, Empfehlungssysteme | Beschleunigt das Training von KI-Modellen exponentiell und hilft bei Dingen wie Chatbots und Empfehlungsalgorithmen. |
High-Performance Computing (HPC) | Wissenschaftliche Simulationen, physikalische Berechnungen | Beschleunigung komplexer wissenschaftlicher Experimente und Forschung. |
Finanzindustrie | Risikomodellierung, Hochfrequenzhandel (HFT), Portfolio-Optimierung | Komplexe Finanzberechnungen werden viel schneller berechnet, was Händlern hilft, schnelle Entscheidungen zu treffen. |
Autonome Fahrzeuge | Objekterkennung, Sensorfusion, Wegplanung | Hilft selbstfahrenden Autos, ihre Umgebung in Echtzeit zu „sehen“ und darauf zu reagieren. |
Fertigungs- und Industrieautomatisierung | Präventive Wartung, Fehlererkennung, Robotersteuerung | Hilft Maschinen, Probleme zu erkennen, bevor sie auftreten, und verbessert die Automatisierung. |
Wetter- und Klimawissenschaft | Klimamodellierung, Hurrikanvorhersage, Datenassimilation | Führt Wettersimulationen viel schneller durch, um Vorhersagen zu verbessern. |
Cybersicherheit | Erkennung von Anomalien, Verschlüsselung/Entschlüsselung, Bedrohungsanalyse | Hilft, Hacker zu erkennen und Daten schneller zu schützen. |
Robotik | Echtzeit-Sensorverarbeitung, KI-basierte Steuerung, SLAM (Simultaneous Localization and Mapping) | Hilft Robotern, das zu verarbeiten, was sie sehen, und sich genauer zu bewegen. |
Blockchain & Kryptografie | Kryptowährungs-Mining, Transaktionsvalidierung | Macht das Mining von Kryptowährungen und die Sicherung von Transaktionen schneller. |
Anforderungen beim Erlernen der CUDA-Entwicklung
Die Nutzung von Grafikprozessoren und deren Programmierung mit CUDA ist zwar auf dem Vormarsch, aber es gibt immer noch eine erhebliche Hürde, um ein erfahrener CUDA-Programmierer zu werden. Die größte Stärke von CUDA ist auch einer der Faktoren, die das Erlernen erschweren. CUDA ist für die parallele Datenverarbeitung konzipiert, die sich grundlegend von der traditionellen seriellen Programmierung unterscheidet. Programmierer müssen Konzepte wie Threads, Blöcke und Grids verstehen und wissen, wie sie auf GPU-Hardware abgebildet werden.
Darüber hinaus ist C/C++, eine Sprache, die in der Regel für fortgeschrittene Entwickler geeignet ist, die am besten zu erlernende Sprache, wenn Sie die CUDA-Programmierung optimieren wollen (Sie können sich auch für Python mit PyTorch oder Jax entscheiden).
Schließlich erfordert CUDA ein tieferes Wissen über die physische Hardware (d. h. welche NVIDIA-GPU/s Sie verwenden). Sowohl bei der Hardware als auch bei den Software-Toolkits sind zusätzliche Einstellungen erforderlich, um Zugang zur grundlegenden Entwicklung und zu Tests zu erhalten. Um eine hohe Leistung zu erzielen, ist es außerdem erforderlich, die GPU-Architektur zu studieren, den Code sorgfältig zu optimieren und den Speicher genau zu verwalten.
Einrichten Ihres ersten CUDA Programmierprojekts
Mit Ihrem allerersten CUDA Projekt zu beginnen, mag einschüchternd erscheinen, aber mit der richtigen Anleitung können Sie Visual Studio in nur einer Stunde für CUDA Programmierprojekte konfigurieren. Befolgen Sie die folgenden Schritte, um loszulegen:
Installation von Visual Studio
Visual Studio ist eine gute erste Wahl für eine IDE, wenn Sie bereits mit C++ vertraut sind. Es ist kompatibel mit der Integration des NVIDIA CUDA Toolkits, mit dem Sie CUDA-Anwendungen innerhalb derselben Plattform kompilieren, debuggen und optimieren können.
- Download Visual Studio
Laden Sie zunächst, Visual Studio von Microsoft herunter. Wählen Sie die von Ihnen bevorzugte Edition. Für unsere Installation haben wir eine Community-Version von Visual Studio 2022 heruntergeladen, da dies die neueste unterstützte Version für unser Windows 11-System ist. - Führen Sie das Installationsprogramm aus, um die Installation abzuschließen.
Folgen Sie den folgenden Aufforderungen, bis Sie zum Visual Studio-Installationsprogramm gelangen. Es wird Sie nach einigen Dingen fragen, z. B. nach dem Installationsverzeichnis, und wird einige Abhängigkeiten überprüfen. Danach sollten Sie Visual Studio aus diesem Fenster oder über eine Verknüpfung starten können.
Installieren des CUDA Toolkits
Nach der Installation von Visual Studio benötigen Sie den Download des CUDA Toolkits für Visual Studio. Es bietet die Tools, Bibliotheken und den Compiler (nvcc), die für die Entwicklung und Ausführung von CUDA-Anwendungen in Visual Studio erforderlich sind. Es ermöglicht die Integration von GPU-beschleunigtem Computing, was die Verwendung von NVIDIA-GPUs für leistungsstarke Aufgaben ermöglicht.
- Überprüfen Sie, ob Sie einen CUDA-kompatiblen Grafikprozessor haben
Um einen reibungslosen Betrieb zu gewährleisten, sollten Sie zunächst überprüfen, ob Ihr aktueller Grafikprozessor ein unterstütztes Gerät ist. Navigieren Sie dazu zum Abschnitt Grafikkarten im Windows-Gerätemanager. Weitere Informationen finden Sie in der Installationsanleitung von NVIDIA. - CUDA Toolkit von NVIDIA herunterladen
Besuchen Sie die Website von NVIDIA um das Toolkit herunterzuladen und mehr darüber zu erfahren. Vergewissern Sie sich vor dem Herunterladen, dass Sie das richtige Betriebssystem, die richtige Version usw. ausgewählt haben. Die heruntergeladene Datei ist in unserem Fall 3,2 GB groß. Stellen Sie jedoch sicher, dass Sie über mindestens 10 GB freien Speicherplatz verfügen, da Sie die Installationsdateien vorübergehend extrahieren müssen, bevor Sie das Installationsprogramm ausführen.
- Starten Sie das Installationsprogramm
Führen Sie nach dem Herunterladen das Installationsprogramm aus. Es überprüft Ihr Gerät auf fehlende Abhängigkeiten oder bereits vorhandene Installationen und passt Ihre Installationsdateien entsprechend an. Danach haben Sie das CUDA Toolkit auf Ihrem System installiert. Zusätzlich wird NSIGHT installiert, das spezielle Debugging- und Profiling-Funktionen für CUDA Anwendungen bietet.Sollten Sie bei der Installation des Toolkits auf Probleme stoßen, lesen Sie bitte die Installations- und Fehlerbehebungsanleitung von NVIDIA.Tipp: Wenn Sie Visual Studio Code bevorzugen, sollten Sie stattdessen Nsight über diesen Link installieren. Dabei handelt es sich um eine Anwendungsentwicklungsumgebung für „heterogene Plattformen, die die CUDA-Entwicklung für GPUs“ in Microsofts Visual Studio Code integriert.
Erste Schritte mit Ihrem ersten CUDA Projekt in Visual Studio
Nachdem Sie sowohl Visual Studio als auch das CUDA Toolkit installiert haben, können Sie nun Ihr erstes Projekt in Visual Studio initialisieren.
- Erstellen Sie ein neues Projekt.
Beginnen Sie mit dem Öffnen von Visual Studio und erstellen Sie ein neues Projekt oder klonen Sie ein bestehendes Repository, um Ihre erste Projektdatei zu starten.
- Initialisieren Sie Ihr Projekt.
An diesem Punkt haben Sie zwei Möglichkeiten: Entweder Sie starten eine komplett leere Konsole/ein leeres Projekt oder Sie wählen das CUDA 12.8-Projekt. Der Hauptunterschied besteht darin, dass die CUDA Runtime bereits mit den üblichen Arbeitslasten, Beispielcode und Anwendungsfällen ausgestattet ist. Wenn Sie jedoch von Grund auf neu beginnen, können Sie Ihr Projekt nur mit dem konfigurieren, was Sie benötigen, und sich mit dem Arbeitsbereich vertraut machen. Für dieses Projekt werden wir mit einem völlig leeren Projekt beginnen. - Einstellen der Build-Konfiguration
Wählen Sie oben im Visual Studio-Fenster Release und x64 (wenn Sie ein 64-Bit-System verwenden). Dadurch wird VS mitgeteilt, dass wir versuchen, eine Version einer Anwendung zu erstellen, die bereitgestellt werden kann, im Gegensatz zum Debuggen. - Anpassen von Build-Abhängigkeiten
Sie müssen sicherstellen, dass Visual Studio weiß, dass Sie versuchen, CUDA-Dateien zu erstellen und auszuführen. Um dies zu konfigurieren, klicken Sie mit der rechten Maustaste auf Ihren Projektnamen („CUDA Sample“) und klicken Sie auf Build Dependencies ? Build-Anpassungen. Es öffnet sich ein neues Fenster, in dem die verfügbaren Build-Anpassungsdateien aufgelistet sind. Stellen Sie sicher, dass Sie CUDA 12.8 ankreuzen und klicken Sie auf ok. - Hinzufügen einer CUDA C++- oder Header-Datei
Um neue Quelldateien hinzuzufügen, fügen Sie einfach neue Elemente hinzu, wie Sie eine normale .cpp- oder .header-Datei hinzufügen würden. Klicken Sie mit der rechten Maustaste auf einen Ordner und klicken Sie auf Hinzufügen | Neues Element, um auf Ihre Dateioptionen zuzugreifen. - Überprüfen, ob die Datei- und Projekteinstellungen korrekt sind
An diesem Punkt sollten Sie versuchen, eine Lösung zu erstellen, um sicherzustellen, dass alles reibungslos funktioniert. Wenn alles klappt, herzlichen Glückwunsch! Sie können nun mit der Arbeit an Ihrer ersten CUDA Datei in VS beginnen. NVIDIA stellt auch einige Beispielprojekte Beispielprojekte zur Verfügung, mit denen Sie das Setup testen, debuggen und sich mit bestehenden Projekten vertraut machen können, bevor Sie ein komplett neues Projekt erstellen.
Optimieren Sie Ihr Setup
VS und NVIDIA haben große Fortschritte bei der Erleichterung der CUDA-Entwicklung und der Einrichtung gemacht. Da es sich bei CUDA jedoch um eine proprietäre Sprache handelt, kann es immer noch vorkommen, dass Syntaxhervorhebungen oder verwirrende Eingabeaufforderungen von VS’s IntelliSense fehlen.
Um dies zu beheben, empfiehlt es sich, zusätzliche Plugins vom Visual Studio-Marktplatz zu installieren, die bei der korrekten Hervorhebung von Symbolen helfen können. Sie können z. B. das Visual Assist-Plugin herunterladen und installieren, das Unterstützung für CUDA-spezifischen Code bietet, der von Visual Studios IntelliSense möglicherweise noch nicht erkannt wird. Es bietet außerdem den zusätzlichen Vorteil, dass es neben der zusätzlichen Unterstützung für .cu- und .cuh-Dateien auch die Kernfunktionen für Navigation, Refactoring, Codehilfe und mehr bietet.
Das Visual Assist-Plugin bietet Unterstützung für die Erkennung von CUDA-spezifischem Code. VA erkennt, dass Sie ein Symbol verwenden, das auf eine fehlende Header-Datei verweist, und fügt es für Sie hinzu.
Fazit
CUDA ist zwar ein leistungsfähiges Tool, das auch in naher Zukunft von Bedeutung sein wird, aber die Landschaft des parallelen Rechnens ist dynamisch, und seine Dominanz wird von technologischen Fortschritten und veränderten Anforderungen der Industrie abhängen. Angesichts des rasanten Wachstums von KI und maschinellem Lernen wird CUDA jedoch aufgrund seiner Optimierung für Deep-Learning-Aufgaben wahrscheinlich relevant bleiben, zumal NVIDIA in diesem Bereich weiterhin Innovationen vorantreibt.
Zusammenfassend lässt sich sagen: Wenn Sie Ihre Fähigkeiten in der Softwareentwicklung in einem wachsenden und aufstrebenden Bereich ausbauen möchten, dann könnte CUDA das Richtige für Sie sein.