31 Punkte von GN⁺ 2025-06-10 | 2 Kommentare | Auf WhatsApp teilen
  • Frage, welche Bücher/Kurse/Projekte man durcharbeiten sollte, um CUDA-Programmierung zu lernen (weil viele Unternehmen, bei denen man arbeiten möchte, CUDA-Erfahrung verlangen)

Zusammenfassung der Antworten auf HN

  • Lernmaterialien und erste Schritte

    • Empfohlen werden der offizielle NVIDIA CUDA Programming Guide und NVIDIAs Bucharchiv
    • Mit kleinen Beispielprogrammen beginnen und schrittweise Parallelisierung üben; vorhandene C/C++-Kenntnisse sind sehr wichtig
    • Open-Source-Code (z. B. auf GitHub) und LLMs (z. B. ChatGPT) nutzen, um Code-Strukturen zu analysieren und praktisch zu üben
    • Empfohlen wird ein etwa 6–8-wöchiger, praxisorientierter Lernplan
  • Benötigte Hardware und Umgebung

    • Eine NVIDIA-GPU aus den letzten 10 Jahren ist in der Regel ausreichend (insbesondere Turing/RTX 20xx, Ampere/RTX 30xx oder neuer); ältere Modelle (vor Maxwell) stoßen bei Support und Leistung an Grenzen
    • Die aktuelle Version des CUDA Toolkit verwenden und unbedingt die Compute Capability der GPU prüfen (siehe Support-Tabelle)
    • Sowohl Windows als auch Linux sind möglich; je nach Umgebung können auch Docker und VPS genutzt werden
    • Ohne GPU kann man mit einem Online-Emulator wie leetgpu.com erste Erfahrungen sammeln
  • Grundlagen der Parallelprogrammierung

    • Wichtiger als die CUDA-Syntax selbst ist das Verständnis von parallelen Algorithmen und Hardware-Architektur
    • Genannte Standardwerke:
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, kostenlos)
    • In der Praxis liegt der Fokus bei CUDA oft auf der Nutzung CUDA-basierter Bibliotheken wie cuBLAS und cuDNN sowie der Maximierung paralleler Performance
  • Lernmethodik

    • Statt nur Syntax zu lernen wird empfohlen, kleinen CPU-Code nach CUDA zu portieren → Performance zu benchmarken → schrittweise zu optimieren
    • Zunächst auf Korrektheit achten, danach Performance-Optimierung (Speicherverwaltung, shared memory, Register-Nutzung usw.) schrittweise anwenden
    • Als Übungsbeispiele werden klassische parallele Algorithmen wie Prefix Scan, GEMM und N-Body-Simulation empfohlen
    • Zuerst High-Level-Abstraktionsbibliotheken wie CUDA Thrust, CUTLASS und cub lernen; eigene Implementierungen später angehen
  • Praxis und Karriere

    • Anforderungen an CUDA-Erfahrung entstehen meist in Deep Learning, Data Engineering, HPC (wissenschaftliches Rechnen), Game Graphics usw.
    • Manche Stellen verlangen nicht nur PyTorch/TensorFlow, sondern auch Erfahrung in der Optimierung zentraler CUDA-Kernel und -Bibliotheken
    • Um fachliche Tiefe für die Praxis aufzubauen, sind auch Low-Level-Tools wie PTX, nvcc, cuobjdump und Nsight Systems/Compute wichtig
    • Teilnahme an Communities: gpumode Discord, GPU Puzzles usw. bieten aktive Diskussionen und Code-Reviews mit Praxisbezug
  • Hinweise und realistische Einschätzungen

    • Der Einstieg ist leicht, aber Optimierung und Kompatibilität für unterschiedliche Hardware (Architektur/Befehlssatz) sind sehr schwierig; die Einstiegshürde ist hoch
    • In der Realität sind Berufserfahrung und Netzwerk wichtig; selbstgesteuertes Lernen allein ersetzt keine Berufserfahrung in der Praxis
    • CUDA ist ein Feld, in dem Hardware, Parallel Computing, Algorithmen und Optimierung eng zusammenspielen; empfohlen wird daher, sich auf einen Bereich zu konzentrieren und dort tief einzusteigen

2 Kommentare

 
ahwjdekf 2025-06-12

Nun ja. Ob man CUDA überhaupt direkt verwenden wird? Besonders in Korea.

 
GN⁺ 2025-06-10
Hacker-News-Kommentare
  • Als Teilnehmer des NVidia cudacontest 2008, einer der wenigen Einsender aus Indien, und basierend auf meiner Erfahrung, bei der ich auch einen BlackEdition-Card-Teilnahmepreis erhalten habe, teile ich den Weg, den ich selbst verfolgt habe

    • Den NVidia CUDA Programming Guide heranziehen
    • Von NVidia veröffentlichte Bücher zu CUDA Programming nutzen (siehe developer.nvidia.com/cuda-books-archive)
    • Ausgehend von bestehenden Implementierungen mit kleinen Programmen anfangen (dafür sind solide C-Sprachkenntnisse essenziell, also bei Bedarf vorher auffrischen)
    • Vorausgesetzt werden die Installation der nötigen Toolchain und Compiler sowie geeignete Hardware zum Arbeiten
    • CUDA-Projektcode auf GitHub analysieren; inzwischen kann man auch LLMs nutzen und sich Code erklären lassen
    • Mit kleinen, auf Parallelverarbeitung basierenden Programmen beginnen und den Umfang schrittweise erweitern
    • Wenn man 1–2 Monate ruhig und konsequent vorgeht, kann man gut in CUDA-Programmierung einsteigen
    • Heute gibt es im Vergleich zu 2007/08 deutlich mehr Materialien und Ressourcen
    • Empfehlung: einen Lernplan für 6–8 Wochen erstellen und umsetzen
    • Wenn du jederzeit Fragen hinterlässt, kann ich bei allem, wobei ich helfen kann, möglichst konkret weiterhelfen
      • Mich interessiert konkret die benötigte Hardware. Reicht eine NVIDIA-Grafikkarte von vor etwa fünf Jahren aus, oder braucht man etwas Spezielleres?
      • Mich würde auch interessieren, welche Entwicklungsumgebung du verwendest. Ich würde gern wissen, ob Windows immer noch die primäre CUDA-Entwicklungsumgebung ist
  • Ich habe mir den CUDA-Code von Leela Chess Zero direkt angesehen, und er war auf einem verständlichen Niveau

    • Damals nutzte Leela statt Transformern eine DCNN-Struktur; über Videos von fast.ai konnte ich die Grundlagen von DCNN leicht lernen
    • Transformer sind komplexer, deshalb habe ich mit diesem Lernpfad noch nicht angefangen
    • Die CUDA-Sprache selbst basiert auf C++, daher ist der Einstieg nicht allzu schwer, wenn man C++-Erfahrung hat
    • Wenn man allerdings CUDA-Entwickler werden möchte, muss man vermutlich ein Niveau in AI Programming erreichen — AI ist ein viel tieferes und breiteres Feld als CUDA und verlangt viel Zeit sowie praktische Erfahrung
    • Wenn man diese Fähigkeiten aber einmal hat, ist die Nachfrage am Markt sehr hoch
    • Die fast.ai-Videos kann ich sehr empfehlen
    • Im Gaming-Bereich führt das Gespräch dann bis zu 3D-Grafik, aber heute ist alles viel komplexer geworden, sodass ich den Einstiegspfad nicht mehr gut kenne
      • Ist es aktuell weniger belastend, als CUDA-Entwickler einen Job zu suchen, verglichen mit anderen Bereichen der Softwareentwicklung? Ich arbeite derzeit als Java-Middleware-Entwickler und denke, CUDA und AI könnten für einen Karrierewechsel gut sein
      • Ist dieser Code hier der richtige? Und ich habe zwei Anfängerfragen
        • Warum wurde C++/CUDA direkt verwendet? Reicht die Trainingsgeschwindigkeit von Leela mit reinem pytorch oder tensorflow nicht aus?
        • Und warum gibt es auch TensorFlow-Code?
  • Wenn Geld die Motivation ist, würde ich HPC und mathematisch geprägte Bereiche eher auslassen

    • In diesem Feld ist es schwer, Aufmerksamkeit zu bekommen, wenn man keinen PhD hat, selbst wenn man sehr gut ist
    • Die wirklich wertvollen Fähigkeiten sind vielmehr das Beherrschen von Tools wie PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute sowie die Analyse von Open-Source-Codebasen wie CUTLASS
    • Empfehlenswert sind diese praxisnahen Notizen
    • Vor allem sollte man nicht nur auf HN bleiben, sondern der discord-Community gpu mode beitreten, in der sich echte Entwickler versammeln
      • Das wirkt cool und praxisnah, aber auch sehr nischig
      • Schon der Einstieg ist schwierig, und es wird nur in begrenzten Bereichen wie der Spieleindustrie oder bei Treibern eingesetzt
      • Es wurde erwähnt, dass man ziemlich viel Talent braucht, wenn man von Anfang an direkt bis zu diesem Niveau kommen will
  • Die Ressourcen auf gpumode.com und die Discord-Community bieten für mehrere Monate mehr als genug Lernstoff

    • Das Buch Programming massively parallel processors
    • Die offizielle NVIDIA-CUDA-Dokumentation ist sehr umfassend
    • Auch GPU-Puzzles ist als Herausforderung zu empfehlen
      • Wenn man sich den ThunderKittens flashattention-2-Beispielcode ansieht, bekommt man ein Gefühl für eine Codekomplexität, die sich nur schwer in Worte fassen lässt
      • Solche Puzzles wirken wie eine „Winner-takes-all“-Struktur; der praktische Leistungsunterschied liegt letztlich unter 1 %, daher scheint die Übung selbst keinen großen Sinn zu haben
  • Es wird empfohlen, den Lernumfang aufzuteilen, um den Einstieg zu erleichtern

      1. CUDA selbst lernen (Frameworks/Bibliotheken/Abstraktionsschichten)
      1. Grundlagen des High-Performance Computing lernen (das gilt nicht nur für GPUs und Nvlink, sondern generell für HPC-Architekturen)
      1. Spezialisierung auf ein Anwendungsfeld (bei Transformern z. B. mit modernen High-Level-Abstraktionen wie Torch oder Tensorflow beginnen)
    • Wenn man CUDA wirklich meistern will, ist das Erleben und Verstehen der Prinzipien großskaliger Parallelprogrammierung der Schlüssel, und ein großer Teil dieser Fähigkeiten ist übertragbar
      • Als ehemaliger GPU-Entwickler gebe ich denselben Rat, besonders mit Nachdruck bei Punkt 2 und 3
      • Es hängt zwar vom Berufsziel ab, aber vielleicht braucht man eigentlich eher Erfahrung mit CUDA-Bibliotheken wie cuDNN, cuBLAS oder cuFFT
      • Das Verständnis der Prinzipien der Parallelprogrammierung hat oberste Priorität
      • Dieser Ansatz ist der richtige; wenn man ohne Punkt 2 direkt mit Punkt 1 anfängt, stiftet das nur noch mehr Verwirrung
      • Hinweis auf ein empfohlenes Buch
  • Ich teile meine persönliche Erfahrung mit dem Lernen von CUDA

    • Es war nicht besonders systematisch, hat mir aber in Wissenschaft und Forschung geholfen
    • Wegen meines PhD-Projekts musste ich CUDA direkt lernen
    • Da im Labor niemand Erfahrung hatte, habe ich mir zunächst mit den NVIDIA-Grundkursen (Getting Started with Accelerated Computing with CUDA C/C++ sowie der Python-Version) die konzeptionellen Grundlagen angeeignet
    • Abseits offizieller Tutorials bestand das Lernen in der Praxis stark aus Trial and Error
    • Ich habe Online-Tutorials und Bücher genutzt, aber Funktionen und APIs änderten sich schnell, sodass alte und neue Versionen oft durcheinandergerieten; dazu kamen Kompatibilitätsprobleme zwischen meiner GPU und der realen Umgebung
    • Am schwierigsten war, dass die meiste Zeit in Debugging floss (etwa um herauszufinden, warum etwas langsamer war als erwartet) und in die Nutzung von Tools wie compute-sanitizer, Nsight usw.
    • Nicht ungeduldig werden: Am besten ein einfaches Projekt, das auf der CPU läuft, nach CUDA portieren und dabei mit Benchmarks Optimierungserfahrung sammeln
    • Optimierung kommt ganz zum Schluss; zuerst sollte man korrektes Verhalten implementieren
    • Ein langsamer, aber speichersicherer Kernel ist wertvoller als ein optimierter Kernel
      • Ich teile eine ähnliche Erfahrung aus dem PhD — flashrnn-Arbeitsergebnis
      • Wenn man die Grundlagen und die GPU-Architektur verstanden hat, empfehle ich diesen Workflow
        1. Eine Umgebung einrichten, in der sich Kernel testen lassen, und mit einer Baseline in einer höheren Programmiersprache vergleichen
        2. Wenn kein dringendes Projekt ansteht, bekannte Standardprobleme (wie MatMul) wiederholen oder neu implementieren — nicht versuchen, alle Fälle abzudecken, sondern sich jeweils auf einzelne Funktionen konzentrieren
        3. Die Komplexität schrittweise erhöhen — Schleifen, Grid-Parallelisierung sowie globalen, Shared- und Register-Speicher nacheinander einsetzen und von einfacher Matrixmultiplikation bis zu TensorCore (MMA) erweitern
        4. Den CUDA C Programming Guide immer wieder lesen — wirklich verinnerlichen lässt er sich nur zusammen mit praktischer Arbeit
        5. Höhere Abstraktionen wie CUTLASS oder ThunderKitten sind je nach Anwendungsfall ebenfalls empfehlenswert; in JAX-/Torch-Umgebungen würde ich zuerst triton nutzen
      • Wenn man bis PTX vordringen will, braucht es noch mehr Zeit, aber entscheidend ist der praktische Lernprozess im echten Einsatz
      • Ich kann den Schmerz von CUDA-Performance-Debugging sehr gut nachvollziehen
  • Vorstellung von Materialien, die ich genutzt habe, als ich einem High-School-Schüler CUDA beigebracht habe — nicht genug, um allein alles zu meistern, aber hilfreich für den Einstieg

  • Ich habe es noch nicht benutzt, aber leetgpu.com sieht ziemlich gut aus, daher möchte ich es empfehlen

  • Bitte um Einschätzungen aus der Praxis zu Jobs, Positionen und Unternehmensarten, die CUDA-Ingenieure einstellen

    • Derzeit nutzen viele Unternehmen CUDA-basierte Bibliotheken wie PyTorch, aber ich weiß nicht, ob viele Firmen tatsächlich Native-CUDA-Entwicklung brauchen
    • Ich hoffe, Organisationen oder Rollen zu finden, die direkt CUDA-zentriert arbeiten
      • In unserem Team nutzen wir CUDA direkt für die Analyse geospatialer Daten
      • Wir rasterisieren Slippy-Map-Tiles und führen GPU-basierte Rasterzusammenfassungen aus
      • Da die Verarbeitung größtenteils pixelweise unabhängig ist, eignet sie sich gut für die GPU
      • Wir parallelisieren die Zusammenfassung zeilenweise und führen die Ergebnisse am Ende zusammen
      • Allerdings ist das Kopieren der Daten auf die GPU derzeit der Flaschenhals
  • Im Einklang mit dem Zeitwandel kann man auch den Ansatz nutzen, LLMs wie Claude zu fragen und sich dabei Ergebniscode und Erklärung auf einmal geben zu lassen

    • 2025 mag das noch funktionieren, aber 2026 wird wohl schon einen Schritt mehr verlangen, so die Meinung