En la arquitectura de EvoX,el Planificador de Runtimees el núcleo de ejecución que conecta la lógica algorítmica con el hardware físico. Se encarga de asignar los algoritmos evolutivos, las definiciones de problemas y los flujos de trabajo de las capas superiores a recursos de cómputo heterogéneo como GPU, dispositivos aceleradores (por ejemplo, TPU/NPU) y clústeres distribuidos, ocultando las diferencias de hardware mientras mantiene una alta componibilidad de los módulos algorítmicos.
Responsabilidades principales
- Programación de cómputo heterogéneo: gestiona de forma unificada recursos de ejecución como GPU, dispositivos aceleradores y clústeres distribuidos, asignando las tareas, los operadores y los grafos de cómputo tensorial del cálculo evolutivo al backend de hardware más adecuado.
- Coordinación de dependencias y estados: coordina las relaciones de dependencia y los estados de ejecución entre tareas, garantizando que cada etapa de la exploración evolutiva paralela se sincronice correctamente.
- Interfaz de programación unificada: la capa de algoritmos envía las tareas de cómputo a través de una interfaz unificada, sin quedar vinculada a un dispositivo o formato de clúster concreto, lo que reduce el acoplamiento con el hardware.
- Componibilidad de módulos: permite combinar, sustituir y reutilizar por módulos los algoritmos, los problemas, los operadores y los backends de ejecución, de modo que un mismo código pueda migrarse fácilmente a distintos entornos de hardware.
Valor y ejemplos
El valor principal del Planificador de Runtime radica en que permite que la exploración evolutiva paralela se ejecute eficientemente en distintos hardwares sin romper el diseño modular de los algoritmos superiores. Por ejemplo, cuando un mismo algoritmo evolutivo pasa de una GPU local a un clúster multinodo, el código de la capa de algoritmos permanece intacto y es el Runtime el que reasigna las tareas de cómputo y los backends de ejecución. Este diseño permite a los investigadores centrarse en la innovación algorítmica sin tener que reescribir el código para cada tipo de hardware.
