Llevar campañas de simulación a más escala
Ejecutar modelos más grandes, estudios paramétricos más amplios y experimentos numéricos más exigentes con un uso predecible de recursos.
COMPUTACIÓN DE ALTO RENDIMIENTO
Ayudamos al software científico y de ingeniería a aprovechar clústeres, paralelismo y hardware moderno sin comprometer la validez de los resultados ni la facilidad de mantenimiento.
La computación de alto rendimiento consiste en hacer que cálculos científicos y de ingeniería exigentes funcionen bien en hardware real. Incluye el algoritmo, la organización de la memoria, los patrones de comunicación, la estrategia de I/O, el modelo de ejecución y la forma de medir el rendimiento.
Añadir hardware no garantiza resultados más rápidos ni más fiables. Un sistema HPC útil ajusta la carga numérica a la máquina: CPU, GPU, jerarquía de memoria, interconexiones, almacenamiento, planificadores y restricciones del equipo que tendrá que explotarlo.
Ejecutar modelos más grandes, estudios paramétricos más amplios y experimentos numéricos más exigentes con un uso predecible de recursos.
Identificar los cuellos de botella reales en cálculo, comunicación, acceso a memoria o I/O en lugar de adivinar dónde se pierde el tiempo.
Organizar compilación, lanzamiento, planificación y movimiento de datos alrededor de los sistemas donde el software se ejecuta de verdad.
Evaluar si GPU u otros aceleradores encajan con la carga y reestructurar el código cuando la aceleración tiene sentido.
Convertir benchmarks y pruebas de escalabilidad en controles repetibles que revelen regresiones antes de que afecten a producción.
Mejorar almacenamiento, checkpointing, reinicio, postprocesado y estrategias de salida para grandes ejecuciones y campañas largas.
Intervenimos cuando el rendimiento depende a la vez del comportamiento numérico, la arquitectura del código y las restricciones del hardware. Podemos trabajar dentro de una base de código existente, definir una estrategia de escalabilidad o desarrollar el entorno que hace que el HPC sea práctico para un equipo de ingeniería.
Analizar cargas de trabajo, estudiar la escalabilidad y separar el coste algorítmico de los cuellos de botella de implementación o de sistema.
Diseñar o mejorar la ejecución paralela con MPI, memoria compartida, descomposición de tareas o modelos híbridos.
Reestructurar movimientos de datos, patrones de almacenamiento y accesos a memoria cuando limitan el rendimiento o la escalabilidad.
Desarrollar scripts, plantillas de jobs, orquestación de ejecuciones y entornos reproducibles para clústeres y procesos batch.
Crear pruebas de rendimiento, ejecuciones de referencia y controles CI que sigan conjuntamente velocidad, escalabilidad y salida numérica.
Mejorar checkpointing, reinicio, ejecución de campañas, logs y postprocesado para que los grandes cálculos puedan operarse con fiabilidad.
Este trabajo es pertinente para equipos con simulaciones, solvers o pipelines numéricos demasiado lentos, frágiles o difíciles de ejecutar a la escala que necesitan. Es especialmente relevante cuando esos cálculos ya tienen un papel operativo.
También lo es para equipos que pasan del cómputo de escritorio a los clústeres, o de grandes ejecuciones puntuales a campañas de simulación repetibles que requieren rendimiento, trazabilidad y fiabilidad.