[en] ABSTRACT: Computer engineering area is currently immersed in a period of profound changes, concerning both the underlying hardware and applications. Big Data has favored the development of a significant amount of specific software for the storage and analysis of large data volumes in recent years. However, hardware specialization shows slower evolution, so a part of this software is still executed on general purpose hardware. Under these circumstances, it seems necessary to precisely characterize the existing hardware behavior when executing this kind of software, in order to detect and deal with the potential inefficiencies. As for the hardware solutions to be proposed, the current scalability limits faced by CMOS fabrication technologies suggest the exploration of alternative ways to continue designing and implementing processors to reach higher levels of performance. Novel process fabrication techniques, such as 3D-stacking or non-volatile memory technologies, have been of great interest for academia and industry during the last years. Computer architecture, as the nexus between applications and underlying hardware, will be in charge of efficiently combining these applications and technologies. As the basic tool in this area, the simulation framework must take part in that evolution. This kind of tools should be able to precisely simulate emerging technologies and also to work with novel applications. In this thesis, we have worked in parallel to make progress in the three aspects previously mentioned. Making use of a simulation framework able to run full system simulations, we have adapted both the simulation tool and the evaluation methodology in order to work with applications that are representative of cloud computing environments, making architectural proposals based on non-volatile memory technologies. This work starts by evaluating the accuracy required to simulate applications with client-server software architecture, analyzing the induced error if the methodology is simplified to single-node simulations. According to the results obtained, it has been necessary to actively work on the simulation tool, adapting the research methodology to the requirements of emerging applications. With that methodology successfully adapted, we have carried out an exhaustive behavior characterization of the on-chip memory hierarchy when executing several modern NoSQL databases, comparing the results with conventional applications widely used in the area. Finally, using both the adapted methodology and emerging applications, we have worked with novel memory technology to make an architectural proposal to mitigate one of the main drawbacks of this technology, the variable nature of access latency. In particular, we propose the use of a mechanism inspired by hardware prefetching techniques, able to identify patterns in memory references to minimize this variability.

[es] RESUMEN: Nos encontramos actualmente en una época de profundos cambios en el área de Ingeniería de Computadores, desde el hardware subyacente hasta las aplicaciones. El boom del Big Data ha propiciado el desarrollo de una notable cantidad de software específico para el almacenamiento y análisis de grandes volúmenes de datos en los últimos años. Sin embargo, la especialización del hardware avanza a un ritmo más desigual, de modo que, parte de este software se ejecuta habitualmente sobre hardware de propósito general. Ante esta situación, se antoja necesaria la precisa caracterización del funcionamiento del hardware existente al ejecutar este tipo de software, con el fin de detectar y dar solución a las potenciales ineficiencias. En lo concerniente a las soluciones hardware a proponer, los límites actuales de escalabilidad que afrontan las tecnologías de fabricación CMOS sugieren la exploración de vías alternativas para continuar diseñando e implementando procesadores que permitan alcanzar mayores cotas de rendimiento. Técnicas en el proceso de fabricación como el 3D-stacking o tecnologías de memoria no volátiles suscitan desde hace varios años gran interés, tanto desde el ámbito de la investigación como empresarial. La Arquitectura de Computadores, como el nexo entre las aplicaciones y el hardware subyacente, estará a cargo de conjugar de manera eficiente aplicaciones y tecnología. Como herramienta fundamental de esa área, el simulador está obligado a sumarse a dicha evolución para ser capaz de trabajar con las nuevas aplicaciones y las tecnologías emergentes. Durante el desarrollo de esta tesis se ha trabajado en paralelo para avanzar en los tres puntos mencionados. Utilizando un entorno (framework) de simulación de sistema completo, se ha adaptado tanto la herramienta como la metodología de evaluación, para trabajar con aplicaciones asociadas a entornos de computación distribuida (Cloud Computing), realizando propuestas arquitecturales basadas en tecnologías de memoria no volátil. El punto de partida del trabajo ha consistido en la evaluación del grado de precisión necesario en la simulación de aplicaciones cuya arquitectura software es cliente-servidor, analizando el error que se comete al simular este tipo de aplicaciones en un único sistema. A la vista de los resultados, se ha hecho necesario trabajar en la modificación de la herramienta de simulación y adaptar la metodología de investigación para adecuarla a los requisitos de las aplicaciones emergentes. Una vez adaptada la metodología, se ha llevado a cabo una exhaustiva caracterización del comportamiento de la jerarquía de memoria presente en los chips al ejecutar aplicaciones emergentes consistentes en varias bases de datos NoSQL (Not only SQL) modernas, comparando los resultados con aplicaciones convencionales ampliamente utilizadas en el área. Por último, utilizando la metodología y aplicaciones mencionadas, se ha trabajado con una tecnología de memoria emergente en la realización de una propuesta arquitectural para paliar uno de los puntos débiles de dicha tecnología, la naturaleza variable de la latencia de los accesos. En concreto, se propone la utilización de un mecanismo de identificación de patrones en el acceso a los datos basado en una técnica de prefetch hardware para tratar de eliminar la variabilidad de la latencia.