Saltar al contenido
Logotipo de Trainontech Trainontech

Lenguajes y Fundamentos de Programación · LNG-121

Julia avanzado: rendimiento y computación científica

Estabilidad de tipos, asignaciones, paralelismo y llamadas a C para código numérico rápido.

Próximamente Avanzado 6 módulos · 29 clases

Formato asíncrono Ingeniería / Industria, Desarrollo Julia, JupyterLab

Lo que aprenderás

  • Medir con BenchmarkTools y distinguir tiempo real de ruido de medición.
  • Detectar inestabilidad de tipos con code_warntype y corregir las funciones afectadas.
  • Reducir asignaciones con vistas, preasignación y operaciones sobre el propio array.
  • Aplicar StaticArrays, inlining y macros de rendimiento como inbounds y simd con criterio.
  • Paralelizar con hilos y con procesos distribuidos según la naturaleza del problema.
  • Llamar a bibliotecas de C y de Fortran con ccall respetando la disposición de memoria.

Contenido del curso

6 módulos · 29 clases en vídeo · práctica guiada en cada módulo

Módulo 1 · Cómo se ejecuta Julia 4 clases
  • Compilación justo a tiempo y especialización por tipos
  • El coste de la primera llamada
  • Qué mira el compilador para generar buen código
  • Preparar un banco de pruebas fiable
Módulo 2 · Medir antes de tocar 5 clases
  • BenchmarkTools: benchmark y btime
  • Ruido, calentamiento y varianza entre ejecuciones
  • El perfilador y la lectura del gráfico de llamadas
  • Medir asignaciones con allocated
  • Comparar dos implementaciones con criterio
Módulo 3 · Estabilidad de tipos 5 clases
  • Qué es una función con tipo inestable y por qué es cara
  • code_warntype y la lectura de sus avisos
  • Variables globales, contenedores heterogéneos y Any
  • Barreras de función para aislar el problema
  • code_llvm y code_native para los casos difíciles
Módulo 4 · Memoria y asignaciones 5 clases
  • Vistas frente a copias en operaciones sobre arrays
  • Preasignar y trabajar con funciones que modifican en su sitio
  • Fusión de operaciones con difusión
  • StaticArrays para tamaños pequeños y conocidos
  • inbounds, simd e inline: cuándo ayudan y cuándo engañan
Módulo 5 · Paralelismo 5 clases
  • Hilos con Threads y reparto de trabajo
  • Condiciones de carrera y reducciones seguras
  • Procesos distribuidos con Distributed
  • Comunicación de datos entre procesos y su coste
  • Elegir entre hilos, procesos y vectorización
Módulo 6 · Interoperabilidad y cierre 5 clases
  • ccall a bibliotecas de C
  • Disposición de memoria por columnas y llamadas a Fortran
  • Gestionar punteros y memoria externa sin fugas
  • Empaquetar el código optimizado como paquete propio
  • Proyecto de cierre: optimizar un solucionador numérico y documentar las mejoras

Requisitos

  • Programar en Julia con soltura: funciones, tipos, despacho múltiple y arrays.
  • Conocer conceptos básicos de memoria, punteros y compilación.
  • Basta con un navegador para la mayor parte del curso; para las pruebas de paralelismo conviene un equipo con varios núcleos.

Descripción

Julia promete rendimiento cercano al de C, pero un código escrito sin cuidado puede ir órdenes de magnitud más lento que su equivalente bien construido. La causa casi nunca es el lenguaje: son variables globales, funciones cuyo tipo de retorno no se puede inferir, arrays que se copian sin necesidad y bucles que asignan memoria en cada iteración.

El curso enseña a diagnosticar antes que a optimizar. Se empieza midiendo con BenchmarkTools y leyendo la salida del perfilador, se pasa a la inspección con code_warntype y code_llvm para localizar inestabilidad de tipos, se reducen asignaciones con vistas y preasignación, y después se aborda el paralelismo con hilos y procesos y la interoperabilidad con bibliotecas de C y Fortran mediante ccall.

El resultado es un método de trabajo repetible y defendible: medir, localizar el cuello de botella real, corregir su causa y volver a medir para confirmar la mejora. Se aplica igual a un solucionador numérico, a un procesamiento masivo de series temporales o a una biblioteca propia que otros equipos vayan a utilizar y cuyo rendimiento haya que justificar.

¿Para quién es este curso?

  • Ingenieros de simulación que necesitan reducir el tiempo de cálculo de modelos que ya funcionan.
  • Desarrolladores de bibliotecas científicas en Julia que quieren código estable en tipos y sin asignaciones ocultas.
  • Personal de computación de altas prestaciones que evalúa Julia frente a C o Fortran en su flujo de trabajo.
Próximamente

Curso en hoja de ruta. Se prioriza según la demanda recogida y los proyectos en cartera.

Código
LNG-121
Nivel
Avanzado
Público
Ingeniería / Industria, Desarrollo
Entorno
Julia, JupyterLab

Este curso incluye

  • 29 clases en vídeo bajo demanda
  • Práctica íntegramente en JupyterLab, solo con un navegador
  • Tutorización en el campus
  • Acceso desde móvil, tableta y ordenador
  • Actualizaciones cuando cambia la versión de la herramienta
  • Certificado de finalización

Sigue aprendiendo

Cursos relacionados

PY-106Lenguajes y Fundamentos de Programación

Concurrencia: multihilo y multiproceso

Paralelizar adquisición de datos y tareas de E/S sin introducir errores difíciles de reproducir.

Python

Avanzado 33 clases

PY-107Lenguajes y Fundamentos de Programación

Testing y TDD en Python

Pruebas unitarias, fixtures y desarrollo dirigido por pruebas en proyectos técnicos reales.

Python

Avanzado 34 clases

PY-131Lenguajes y Fundamentos de Programación

Webscraping con agentes de IA en local

Agentes que navegan y extraen datos sin depender de servicios en la nube.

PythonOllama

Avanzado 34 clases