31 puntos por GN⁺ 2025-06-10 | 2 comentarios | Compartir por WhatsApp
  • Tengo curiosidad sobre qué libros/cursos/proyectos debería tomar para aprender programación CUDA (porque muchas empresas en las que me gustaría trabajar piden experiencia con CUDA)

Resumen de las respuestas de HN

  • Materiales de aprendizaje y primeros pasos

    • Recomiendan la CUDA Programming Guide oficial de NVIDIA y el archivo de libros de NVIDIA
    • Empezar con programas de ejemplo pequeños e ir practicando paralelización poco a poco; el conocimiento previo de C/C++ es muy importante
    • Usar código open source (GitHub, etc.) y LLMs (por ejemplo, ChatGPT) para interpretar la estructura del código y practicar
    • Se recomienda un plan de unas 6 a 8 semanas con enfoque principalmente práctico
  • Hardware y entorno necesarios

    • Una GPU NVIDIA de los últimos 10 años es suficiente (en especial Turing/RTX 20xx, Ampere/RTX 30xx o superior); las más antiguas (anteriores a Maxwell) tienen límites de soporte y rendimiento
    • Usar la versión más reciente de CUDA Toolkit y verificar la Compute Capability de la GPU (tabla de soporte)
    • Se puede trabajar tanto en Windows como en Linux, y según el entorno también se puede aprovechar Docker y VPS
    • Si no tienes GPU, puedes probar con emuladores en línea como leetgpu.com
  • Fundamentos de programación paralela

    • Más que la sintaxis de CUDA en sí, es más importante entender los algoritmos paralelos y la arquitectura del hardware
    • Libros representativos:
      • Programming Massively Parallel Processors (PMPP)
      • Foundations of Multithreaded, Parallel, and Distributed Programming
      • Scientific Parallel Computing
      • The Art of High Performance Computing (Victor Eijkhout, gratis)
    • En el trabajo real con CUDA, la demanda suele centrarse en usar bibliotecas basadas en CUDA como cuBLAS y cuDNN, y maximizar el rendimiento paralelo
  • Metodología de aprendizaje

    • Más que estudiar solo la sintaxis, se recomienda el enfoque de portar código pequeño de CPU a CUDA → medir rendimiento → optimizar gradualmente
    • Al principio, enfocarse en la corrección; después aplicar optimización de rendimiento paso a paso (gestión de memoria, shared memory, uso de registros, etc.)
    • Ejemplos prácticos recomendados: prefix scan, GEMM, n-body simulation y otros algoritmos paralelos clásicos
    • Conviene aprender primero bibliotecas de abstracción de alto nivel como CUDA Thrust, CUTLASS y cub; la implementación directa puede venir después
  • Trabajo real y carrera profesional

    • La experiencia con CUDA se pide sobre todo en deep learning, ingeniería de datos, HPC (cómputo científico), gráficos para videojuegos, etc.
    • Hay puestos que no solo buscan experiencia con PyTorch/Tensorflow, sino también optimización de kernels y bibliotecas CUDA centrales
    • Para construir especialización práctica, también es importante saber usar herramientas de bajo nivel como PTX, nvcc, cuobjdump y Nsight Systems/Compute
    • Participación en comunidad: comunidades activas como gpumode Discord y GPU Puzzles permiten revisión de código real y discusión
  • Precauciones y consejos realistas

    • Empezar es fácil, pero optimizar para cada hardware (arquitectura/conjunto de instrucciones) y asegurar compatibilidad es muy difícil; la barrera de entrada es alta
    • En la práctica, la experiencia laboral y la red de contactos importan mucho, y el aprendizaje autodidacta por sí solo no puede sustituir la experiencia profesional
    • CUDA es un campo donde se entrelazan hardware, cómputo paralelo, algoritmos y optimización, así que se recomienda concentrarse en un área y profundizar en ella

2 comentarios

 
ahwjdekf 2025-06-12

Bueno. No sé si alguna vez habrá casos en los que se use cuda directamente. Especialmente en Corea.

 
GN⁺ 2025-06-10
Comentario de Hacker News
  • Como participante del cudacontest de NVidia en 2008, y una de las pocas personas que enviaron una propuesta desde India, además de haber recibido un premio de participación con una BlackEdition Card, comparto el método que seguí

    • Consultar la NVidia CUDA Programming Guide
    • Aprovechar los libros sobre CUDA Programming distribuidos por NVidia (ver developer.nvidia.com/cuda-books-archive)
    • Empezar escribiendo programas pequeños basados en implementaciones existentes (es indispensable tener una base sólida en C, así que conviene repasar si hace falta)
    • Dar por hecho que ya tienes instalado el toolchain, el compilador y hardware disponible para trabajar
    • Analizar código de proyectos CUDA en Github, y hoy en día también puedes usar LLM para pedir explicaciones del código
    • Empezar con programas pequeños basados en procesamiento paralelo e ir ampliando gradualmente
    • Si avanzas con calma durante 1 o 2 meses, es totalmente posible empezar a programar en CUDA
    • Hoy hay muchos más materiales y recursos que en 2007/08
    • Recomiendo armar y seguir un plan de estudio de 6 a 8 semanas
    • Si dejas preguntas en cualquier momento, puedo orientar lo más posible en lo que pueda ayudar
      • Me interesa saber más en concreto sobre el hardware necesario. ¿Basta con tener una tarjeta gráfica de Nvidia de hace unos 5 años, o hace falta algo más especial?
      • También me interesa saber qué entorno de desarrollo usas. Quisiera confirmar si Windows sigue siendo el entorno principal para desarrollar con CUDA
  • Revisé directamente el código CUDA de Leela Chess Zero y me pareció entendible

    • En ese momento Leela usaba una arquitectura DCNN en lugar de transformer, y aprendí lo básico de DCNN fácilmente con videos de fast.ai
    • Los transformer son más complejos, así que todavía no he podido empezar a estudiarlos
    • El lenguaje CUDA en sí está basado en C++, así que si ya tienes experiencia en C++ no es tan difícil acercarte
    • Pero si quieres convertirte en desarrollador CUDA, es muy importante llegar al nivel de programación de IA; la IA es un campo mucho más profundo y amplio que CUDA, así que requiere mucho tiempo y experiencia práctica
    • Aun así, si desarrollas esa habilidad, la demanda en el mercado es muy alta
    • Recomiendo mucho los videos de fast.ai
    • Si te interesa el área de juegos, la conversación se extiende hasta gráficos 3D, pero últimamente todo se ha vuelto mucho más complejo y ya no sé cuál sería la ruta de entrada
      • Pregunta sobre si buscar trabajo como desarrollador CUDA hoy implica menos carga que otras áreas de ingeniería de software. Como desarrollador actual de middleware en Java, me parece que CUDA e IA podrían ser una buena transición de carrera
      • Pide confirmar si este código es este de aquí y hace dos preguntas de principiante
        • Por qué escribieron C++/CUDA directamente, y si simplemente con pytorch o tensorflow la velocidad de entrenamiento de Leela no alcanzaba
        • Y también por qué hay código en tensorflow
  • Si tu motivación es el dinero, recomiendo dejar de lado HPC y las áreas matemáticas

    • En ese campo es difícil llamar la atención si no tienes nivel de doctorado, aunque seas muy bueno
    • Las habilidades que de verdad pagan son dominar herramientas como PTX, nvcc, cuobjdump, Nsight Systems, Nsight Compute, y analizar codebases open source como CUTLASS
    • Recomiendo revisar estas notas prácticas relacionadas
    • Sobre todo, no te quedes solo en HN; mejor participa en comunidades de desarrolladores reales como el discord de gpu mode
      • Se ve genial y práctico, pero también parece un nicho muy específico
      • Entrar ya es difícil, y parece usarse solo en áreas limitadas como la industria de videojuegos o drivers
      • Se menciona que para llegar a ese nivel desde el inicio hace falta bastante talento
  • Los recursos y la comunidad de Discord de gpumode.com dan material de estudio suficiente para varios meses

    • El libro Programming massively parallel processors
    • La documentación oficial de nvidia cuda es muy completa
    • También recomiendo intentar GPU-Puzzles
      • Al ver el código de ejemplo de ThunderKittens flashattention-2, se siente una complejidad de código difícil de explicar con palabras
      • Pienso que estos puzzles funcionan como una estructura de “el ganador se lleva todo”, donde la diferencia real de logro está dentro de menos del 1%, así que hacerlos no tiene mucho sentido en la práctica
  • Recomiendo dividir el alcance del aprendizaje para hacerlo más accesible

      1. Aprender CUDA en sí (frameworks/librerías/capas de abstracción)
      1. Fundamentos de computación de alto rendimiento (esto aplica más allá de GPU o del concepto de Nvlink, y sirve para la arquitectura HPC en general)
      1. Especialización en el área de aplicación (si es Transformer, empezar desde abstracciones modernas de alto nivel como Torch o Tensorflow)
    • Si de verdad quieres dominar CUDA, la clave es experimentar y entender los principios de programación masivamente paralela, y en gran parte son habilidades transferibles
      • Como exdesarrollador de GPU, doy exactamente el mismo consejo, sobre todo los puntos 2 y 3
      • Dependerá de tu objetivo laboral, pero quizá lo realmente necesario sea experiencia con librerías CUDA como cuDNN, cuBLAS, cuFFT, etc.
      • Entender los principios de programación paralela es lo más importante
      • Este enfoque es el correcto, y si empiezas directo por el punto 1 sin pasar por el 2, solo te vas a confundir más
      • Comparto este libro recomendado
  • Comparto mi experiencia personal aprendiendo CUDA

    • No fue un proceso muy estructurado, pero me ayudó en el ámbito académico y de investigación
    • Necesité aprender CUDA directamente por un proyecto de doctorado
    • Como no había nadie con experiencia en el laboratorio, tomé los cursos base de NVIDIA (Getting Started with Accelerated Computing with CUDA C/C++ y la versión en python) para aprender los conceptos fundamentales
    • Más allá de los tutoriales oficiales, en la práctica aprendí mucho a base de prueba y error
    • Usé tutoriales en línea y libros, pero como las funciones y APIs cambian rápido, había mucha confusión entre versiones viejas y nuevas, y además tenía que cuidar la compatibilidad entre mi GPU y el entorno real
    • Lo más difícil fue que terminé dedicando la mayor parte del tiempo al debugging (rastrear por qué algo iba más lento de lo esperado) y al uso de herramientas (por ejemplo, compute-sanitizer, Nsight)
    • Recomiendo no desesperarte: toma un proyecto simple que funcione en CPU, hazle port a CUDA y ve optimizando mientras haces benchmark
    • La optimización va al final; primero prioriza que funcione correctamente
    • Un kernel que funciona, aunque sea lento y no corrompa memoria, vale más que un kernel optimizado
      • Comparto una experiencia similar de doctorado: resultado práctico con flashrnn
      • Si ya entendiste los principios básicos y la estructura de GPU, este es el workflow que recomiendo
        1. Configurar un entorno donde puedas probar kernels y compararlos con un baseline en un lenguaje de más alto nivel
        2. Si no tienes un proyecto urgente, repasar o reimplementar problemas conocidos (como MatMul), pero sin intentar cubrir todos los casos; mejor enfocarte por funcionalidad
        3. Ir aumentando la complejidad gradualmente: loops, paralelización por grid, uso de memoria global/compartida/registros, y pasar de multiplicación simple de matrices hasta TensorCore (MMA)
        4. Leer una y otra vez la CUDA C Programming Guide; solo se internaliza de verdad al practicar
        5. Según el caso, también recomiendo abstracciones de nivel superior como CUTLASS o ThunderKitten, y si trabajas en entornos JAX/Torch, usar primero triton
      • Dominar incluso PTX toma más tiempo, pero se enfatiza que se aprende de verdad con práctica en proyectos reales
      • Entiendo perfectamente el dolor del debugging de rendimiento en CUDA
  • Presento materiales que usé al enseñar CUDA a estudiantes de secundaria: no bastan para dominar todo por cuenta propia, pero ayudan mucho para empezar

  • Aún no lo he usado, pero recomiendo la plataforma leetgpu.com porque se ve bastante bien

  • Pido la opinión de gente del sector sobre qué trabajos, posiciones y tipos de empresa están contratando ingenieros CUDA

    • Hoy muchas empresas usan librerías basadas en CUDA como PyTorch, pero no sé si realmente tantas necesitan desarrollo Native CUDA
    • Me gustaría identificar organizaciones o roles donde se trabaje directamente centrado en CUDA
      • En nuestro equipo, usamos CUDA directamente para análisis de datos geoespaciales
      • Rasterizamos tiles de slippy map y hacemos procesamiento resumido del raster en GPU
      • Como la mayoría del trabajo es independiente por píxel, se adapta muy bien a GPU
      • Hacemos el resumen en paralelo por filas y al final lo reunimos todo
      • Aun así, actualmente el cuello de botella está en copiar los datos hacia la GPU
  • Con los cambios de la época, también sirve preguntarles a LLM como Claude para obtener al mismo tiempo código de resultado y explicación

    • En 2025 eso puede funcionar, pero opinan que en 2026 se exigirá un nivel más alto