[en] The increase in the number of cores and threads per processor over the last 15 years has allowed continuous improvements in system performance to be maintained. This design trend has involved major changes in the memory hierarchy. This dissertation explores new approaches to improve the performance of a multicore processor¿s memory hierarchy. Specifically, we analyze the utilization of its shared resources and propose mechanisms to improve the management of these resources from different levels ranging from the hardware to the application. First, memory hierarchy performance has been evaluated for two SPEC CPU suites, CPU2006 and CPU2017, on an Intel Xeon Skylake-SP. This characterization has provided us with interesting findings, such as, for example, the unequal use of cache space by different applications or the effectiveness of hardware prefetching to reduce cache misses and improve system performance. This information served as a basis for defining new concrete objectives. Next, we characterize the relationship between cache occupation, hardware prefetch and memory bandwidth consumption to understand their interactions. From this characterization work, we have proposed Balancer, a mechanism that dynamically imposes limits on LLC space usage and memory traffic to specific applications. These constraints improve performance and/or fairness in the execution of multiprogrammed workloads compared to an uncontrolled system. Balancer requires no hardware or operating system modifications. As observed in the previous characterizations, data prefetching is a crucial technique as it allows hiding long-latency memory accesses and improving per- formance on modern high-performance processors. However, these prefetchers load a large number of useless blocks. This results in an unnecessary increase in the consumption of shared and scarce resources such as cache space and memory bandwidth. We propose Berti, a lightweight, highly accurate, energy-efficient, and high-performing local delta prefetcher that outperforms state-of-the-art prefetchers. Berti is an L1D prefetcher that orchestrates its requests across the entire cache hierarchy. Thanks to its high accuracy, Berti neither pollutes the caches nor wastes memory hierarchy bandwidth. Synchronization between threads of the same application is another context where there can also be a high demand for shared resources in the memory hierarchy as the number of cores per processor increases. This dissertation presents a comprehensive study on the scalability of the different strategies that have been used for implementing synchronization solutions. The main conclusions that can be drawn are 1) hardware transactional memory scales better than fine-grained and non-blocking locks as the number of threads increases; 2) hardware transactional memory adoption is easy in real-world scientific applications and obtains performance comparable to that of a highly optimized locking scheme; and 3) enabling simultaneous multithreading for applications that access large memory blocks within their critical sections significantly affects the hardware transactional memory commit rate. In this context, we propose a novel cache replacement algorithm that aims to mitigate the negative effects of simultaneous multithreading on the transactional capacity abort rate.

[es] El aumento del número de núcleos e hilos por procesador en los últimos 15 años ha permitido mantener mejoras continuas en el rendimiento de los sistemas. Esta tendencia de diseño ha implicado importantes cambios en la jerarquía de memoria. Esta tesis explora nuevos enfoques para mejorar el rendimiento de la jerarquía de memoria de un procesador multinúcleo. En concreto, analizamos la utilización de sus recursos compartidos y proponemos mecanismos para mejorar la gestión de estos recursos en distintos niveles que van desde el hardware hasta la aplicación. En primer lugar, se ha evaluado el rendimiento de la jerarquía de memoria para dos suites de SPEC, CPU2006 y CPU2017, en un Intel Xeon Skylake-SP. Esta caracterización nos ha proporcionado hallazgos interesantes, como, por ejemplo, el uso desigual del espacio de cache por parte de distintas aplicaciones o la eficacia de la prebúsqueda hardware para reducir los fallos de cache y mejorar el rendimiento del sistema. Esta información sirvió de base para definir nuevos objetivos concretos. A continuación, caracterizamos la relación entre la ocupación de la cache, la prebúsqueda hardware y el consumo de ancho de banda con memoria para comprender sus interacciones. A partir de este trabajo de caracterización, hemos propuesto Balancer, un mecanismo que impone dinámicamente límites en el uso del espacio de la LLC y el tráfico con memoria a aplicaciones específicas. Estas restricciones mejoran el rendimiento y/o la equidad en la ejecución de cargas de trabajo multiprogramadas en comparación con un sistema no controlado. Balancer no requiere modificaciones en el hardware ni en el sistema operativo. Como se ha observado en las caracterizaciones anteriores, la prebúsqueda de datos es una técnica crucial, ya que permite ocultar los accesos a memoria de larga latencia y mejorar el rendimiento en los procesadores modernos de alto rendimiento. Sin embargo, estos prebuscadores cargan un gran número de bloques inútiles. Esto se traduce en un aumento innecesario del consumo de recursos compartidos y escasos, como el espacio de cache y el ancho de banda con memoria. Proponemos Berti, un prebuscador hardware ligero, muy preciso, eficiente energéticamente y de alto rendimiento basado en deltas locales que supera a los prebuscadores que conforman el estado del arte actual. Berti es un prebuscador de L1D que organiza sus peticiones a lo largo de toda la jerarquía de caches. Gracias a su gran precisión, Berti no contamina las caches ni desperdicia ancho de banda de la jerarquía con memoria. La sincronización entre hilos de una misma aplicación es otro contexto en el que también puede haber una gran demanda de recursos compartidos en la jerarquía de memoria a medida que aumenta el número de núcleos por procesador. Esta tesis presenta un estudio exhaustivo sobre la escalabilidad de las diferentes estrategias que se han utilizado para implementar soluciones de sincronización. Las principales conclusiones que se pueden extraer son: 1) la memoria transaccional hardware escala mejor que los fine-grain locks y algoritmos lock-free a medida que aumenta el número de hilos; 2) la adopción de la memoria transaccional hardware es fácil en aplicaciones científicas y obtiene un rendimiento comparable al de un esquema de fine-grain locks altamente optimizado; y 3) habilitar el multihilo simultáneo para aplicaciones que acceden a grandes bloques de memoria dentro de sus secciones críticas afecta significativamente a la tasa de retiro de la memoria transaccional hardware. En este contexto, proponemos un novedoso algoritmo de reemplazo de cache que pretende mitigar los efectos negativos del multithreading simultáneo sobre la tasa de abortos por capacidad.