[en] In recent years, high-performance computing research became essential in pushing the boundaries of what men can know, predict, achieve, and understand in the experimented reality. HPC Workloads grow in size and complexity hand to hand with the machines that support them, accommodating big data, data analytic, and machine learning applications at the side of classical compute-intensive workloads. Simultaneously, power demand is hugely increasing, becoming a constraint in the design of these machines. The increasing diversification of processors and accelerators, new special-purpose devices, and new memory layers allow better management of these workloads. At the same time, libraries and tools are being developed to support and to make the most out of the hardware while offering standardized and straightforward interfaces to users and developers. Different scheduling and resource management layers are fundamental in organizing the work and the access to resources. This thesis focuses on the job scheduling and resource management layer. We claim that this layer needs research in the following three directions: awareness, dynamicity, and automatization. First, awareness of the hardware and applications characteristics would improve the configuration, scheduling, and placement of tasks. As a second point, dynamic systems are more responsive. They react fast to changes in the hardware, e.g.,in failure cases, and they adapt to application's requirements changes. Finally, automatization is the last direction. In our opinion future systems need to act autonomously. A system that keeps relying on user guidance is prone to errors and requires unnecessary user expertise. This thesis presents three main contributions contributing to fill those gaps. First, we developed DROM, a transparent library that allows parallel applications to shrink and expand dynamically in the computing nodes. DROM enables efficiently utilization of the available resources, with no effort for developers and users. We enabled vertical malleability, i.e., internal malleability in computing nodes, by including in DROM API and data structures that allow resource managers to control the number of threads and their pinning to computing cores at runtime. We measured a negligible overhead and we integrating DROM with OpenMPI, OmpSs, and MPI. As a second contribution, we developed a system-wide malleable scheduling and resource management policy that uses slowdown predictions to optimize the scheduling of malleable jobs. We called this policy Slowdown-Driven policy (SD-policy). SD-policy uses malleability and node sharing to run new jobs by shrinking running jobs with a lower slowdown, only if the new job has reduced predicted end time compared to the static scheduling. We obtained a very promising reduction in the slowdown, makespan, and consumed energy with workloads combining compute-bounded and memory-bounded jobs. Ultimately, we used and extended an energy and runtime model to predict the job's runtime and dissipated energy for multiple hardware architectures. We implemented an energy-aware multi-cluster policy, EAMC-policy, that uses predictions to select optimal core frequencies and to filter and prioritize job submissions into the most efficient hardware in case of heterogeneity. This is done automatically, reducing user's intervention and necessary knowledge. Simulations based on real-world hardware and workloads show high energy savings and reduced response time are achieved compared to non-energy-aware and non-heterogeneous aware scheduling.

[es] En los últimos años, la investigación en HPC se ha convertido en algo esencial para ampliar los límites de lo que el hombre puede conocer, predecir, lograr y comprender en la realidad experimentada. Los workloads de HPC crecen en tamaño y complejidad de la mano de las máquinas que las soportan, acomodando aplicaciones de big data, análisis de datos y aprendizaje automático al lado de los workloads clásicas de cálculo intensivo. Simultáneamente, la demanda de energía aumenta enormemente, convirtiéndose en una limitación en el diseño de estas máquinas. La creciente diversificación de procesadores y aceleradores, los nuevos dispositivos de propósito especial y las nuevas capas de memoria permiten gestionar mejor estas cargas. Al mismo tiempo, se están desarrollando bibliotecas y herramientas para apoyar y sacar el máximo partido al hardware, ofreciendo al mismo tiempo interfaces estandarizadas y sencillas a los usuarios y desarrolladores. Las diferentes capas de planificación y gestión de recursos son fundamentales para organizar el trabajo y el acceso a los recursos. Esta tesis se centra en la capa de planificación de jobs y gestión de recursos. Esta capa necesita investigación en las siguientes tres direcciones: conciencia, dinamismo y automatización. En primer lugar, el conocimiento de las características del hardware y las aplicaciones mejoraría la configuración, la programación y la colocación de tareas. En segundo lugar, los sistemas dinámicos son más sensibles. Reaccionan rápidamente a los cambios en el hardware, por ejemplo, en caso de fallo, y se adaptan a los cambios en los requisitos de las aplicaciones. Finalmente, la automatización es la última dirección. En nuestra opinión, los sistemas del futuro deben actuar de forma autónoma. Un sistema que sigue dependiendo de la orientación del usuario es propenso a errores y requiere una experiencia innecesaria del usuario. Esta tesis presenta tres aportaciones principales que contribuyen a llenar esas lagunas. Primero desarrollamos DROM, una biblioteca transparente que permite a las aplicaciones paralelas reducirse y expandirse dinámicamente en los nodos de computación. DROM permite el uso eficiente de los recursos disponibles, sin esfuerzo para desarrolladores y usuarios. Habilitamos la maleabilidad vertical, la maleabilidad interna en los nodos de computación, incluyendo API y estructuras de datos que permiten a los gestores de recursos controlar el número de threads y su asignación a los núcleos de computación en tiempo de ejecución. Medimos una sobrecarga insignificante e integramos DROM con OpenMPI, OmpSs y MPI. Como segunda contribución, desarrollamos una política de gestión de recursos maleable que utiliza predicciones de slowdown para optimizar la planificación de jobs maleables. La llamamos "Slowdown-Driven policy" (SD-policy), y utiliza la maleabilidad y la compartición de nodos para ejecutar nuevos jobs reduciendo el tamaño de los jobs en ejecución con un menor slowdown, sólo si el nuevo job tiene un tiempo de finalización previsto menor en comparación con la planificación estática. Obtuvimos una reducción muy prometedora de slowdown, makespan y energía consumida con workloads que combinan jobs limitados por el cálculo y por la memoria. Por último, utilizamos y ampliamos un modelo de energía y tiempo para predecir el tiempo de ejecución del job y la energía disipada para múltiples arquitecturas de hardware. Implementamos una política multi-cluster energy-aware, EAMC-policy, que utiliza las predicciones para seleccionar las frecuencias óptimas de los núcleos y para priorizar jobs en el hardware más eficiente en caso de heterogeneidad. Esto se hace automáticamente, reduciendo la intervención del usuario y los conocimientos necesarios. Simulaciones basadas en hardware y workloads reales demuestran que se consigue un gran ahorro de energía y una reducción del tiempo de respuesta en comparación a la programación no consciente de la energía y no heterogénea.