43 research outputs found

    Exploiting data locality in cache-coherent NUMA systems

    Get PDF
    The end of Dennard scaling has caused a stagnation of the clock frequency in computers.To overcome this issue, in the last two decades vendors have been integrating larger numbers of processing elements in the systems, interconnecting many nodes, including multiple chips in the nodes and increasing the number of cores in each chip. The speed of main memory has not evolved at the same rate as processors, it is much slower and there is a need to provide more total bandwidth to the processors, especially with the increase in the number of cores and chips. Still keeping a shared address space, where all processors can access the whole memory, solutions have come by integrating more memories: by using newer technologies like high-bandwidth memories (HBM) and non-volatile memories (NVM), by giving groups cores (like sockets, for example) faster access to some subset of the DRAM, or by combining many of these solutions. This has caused some heterogeneity in the access speed to main memory, depending on the CPU requesting access to a memory address and the actual physical location of that address, causing non-uniform memory access (NUMA) behaviours. Moreover, many of these systems are cache-coherent (ccNUMA), meaning that changes in the memory done from one CPU must be visible by the other CPUs and transparent for the programmer. These NUMA behaviours reduce the performance of applications and can pose a challenge to the programmers. To tackle this issue, this thesis proposes solutions, at the software and hardware levels, to improve the data locality in NUMA systems and, therefore, the performance of applications in these computer systems. The first contribution shows how considering hardware prefetching simultaneously with thread and data placement in NUMA systems can find configurations with better performance than considering these aspects separately. The performance results combined with performance counters are then used to build a performance model to predict, both offline and online, the best configuration for new applications not in the model. The evaluation is done using two different high performance NUMA systems, and the performance counters collected in one machine are used to predict the best configurations in the other machine. The second contribution builds on the idea that prefetching can have a strong effect in NUMA systems and proposes a NUMA-aware hardware prefetching scheme. This scheme is generic and can be applied to multiple hardware prefetchers with a low hardware cost but giving very good results. The evaluation is done using a cycle-accurate architectural simulator and provides detailed results of the performance, the data transfer reduction and the energy costs. Finally, the third and last contribution consists in scheduling algorithms for task-based programming models. These programming models help improve the programmability of applications in parallel systems and also provide useful information to the underlying runtime system. This information is used to build a task dependency graph (TDG), a directed acyclic graph that models the application where the nodes are sequential pieces of code known as tasks and the edges are the data dependencies between the different tasks. The proposed scheduling algorithms use graph partitioning techniques and provide a scheduling for the tasks in the TDG that minimises the data transfers between the different NUMA regions of the system. The results have been evaluated in real ccNUMA systems with multiple NUMA regions.La fi de la llei de Dennard ha provocat un estancament de la freq眉猫ncia de rellotge dels computadors. Amb l'objectiu de superar aquest fet, durant les darreres dues d猫cades els fabricants han integrat m茅s quantitat d'unitats de c貌mput als sistemes mitjan莽ant la interconnexi贸 de nodes diferents, la inclusi贸 de m煤ltiples xips als nodes i l'increment de nuclis de processador a cada xip. La rapidesa de la mem貌ria principal no ha evolucionat amb el mateix factor que els processadors; 茅s molt m茅s lenta i hi ha la necessitat de proporcionar m茅s ample de banda als processadors, especialment amb l'increment del nombre de nuclis i xips. Tot mantenint un adre莽ament compartit en el qual tots els processadors poden accedir a la mem貌ria sencera, les solucions han estat al voltant de la integraci贸 de m茅s mem貌ries: amb tecnologies modernes com HBM (high-bandwidth memories) i NVM (non-volatile memories), fent que grups de nuclis (com s貌cols sencers) tinguin acc茅s m茅s r脿pid a una part de la DRAM o amb la combinaci贸 de solucions. Aix貌 ha provocat una heterogene茂tat en la velocitat d'acc茅s a la mem貌ria principal, en funci贸 del nucli que sol路licita l'acc茅s a una adre莽a en particular i la seva localitzaci贸 f铆sica, fet que provoca uns comportaments no uniformes en l'acc茅s a la mem貌ria (non-uniform memory access, NUMA). A m茅s, sovint tenen mem貌ries cau coherents (cache-coherent NUMA, ccNUMA), que implica que qualsevol canvi fet a la mem貌ria des d'un nucli d'un processador ha de ser visible la resta de manera transparent. Aquests comportaments redueixen el rendiment de les aplicacions i suposen un repte. Per abordar el problema, a la tesi s'hi proposen solucions, a nivell de programari i maquinari, que milloren la localitat de dades als sistemes NUMA i, en conseq眉猫ncia, el rendiment de les aplicacions en aquests sistemes. La primera contribuci贸 mostra que, quan es tenen en compte alhora la prec脿rrega d'adreces de mem貌ria amb maquinari (hardware prefetching) i les decisions d'ubicaci贸 dels fils d'execuci贸 i les dades als sistemes NUMA, es poden trobar millors configuracions que quan es condieren per separat. Una combinaci贸 dels resultats de rendiment i dels comptadors disponibles al sistema s'utilitza per construir un model de rendiment per fer la predicci贸, tant per avan莽at com tamb茅 en temps d'execuci贸, de la millor configuraci贸 per aplicacions que no es troben al model. L'avaluaci贸 es du a terme a dos sistemes NUMA d'alt rendiment, i els comptadors mesurats en un sistema s'usen per predir les millors configuracions a l'altre sistema. La segona contribuci贸 es basa en la idea que el prefetching pot tenir un efecte considerable als sistemes NUMA i proposa un esquema de prec脿rrega a nivell de maquinari que t茅 en compte els efectes NUMA. L'esquema 茅s gen猫ric i es pot aplicar als algorismes de prec脿rrega existents amb un cost de maquinari molt baix per貌 amb molt bons resultats. S'avalua amb un simulador arquitectural acurat a nivell de cicle i proporciona resultats detallats del rendiment, la reducci贸 de les comunicacions de dades i els costos energ猫tics. La tercera i darrera contribuci贸 consisteix en algorismes de planificaci贸 per models de programaci贸 basats en tasques. Aquests simplifiquen la programabilitat de les aplicacions paral路leles i proveeixen informaci贸 molt 煤til al sistema en temps d'execuci贸 (runtime system) que en controla el funcionament. Amb aquesta informaci贸 es construeix un graf de depend猫ncies entre tasques (task dependency graph, TDG), un graf dirigit i ac铆clic que modela l'aplicaci贸 i en el qual els nodes s贸n fragments de codi seq眉encial (o tasques) i els arcs s贸n les depend猫ncies de dades entre les tasques. Els algorismes de planificaci贸 proposats fan servir t猫cniques de particionat de grafs i proporcionen una planificaci贸 de les tasques del TDG que minimitza la comunicaci贸 de dades entre les diferents regions NUMA del sistema. Els resultats han estat avaluats en sistemes ccNUMA reals amb m煤ltiples regions NUMA.El final de la ley de Dennard ha provocado un estancamiento de la frecuencia de reloj de los computadores. Con el objetivo de superar este problema, durante las 煤ltimas dos d茅cadas los fabricantes han integrado m谩s unidades de c贸mputo en los sistemas mediante la interconexi贸n de nodos diferentes, la inclusi贸n de m煤ltiples chips en los nodos y el incremento de n煤cleos de procesador en cada chip. La rapidez de la memoria principal no ha evolucionado con el mismo factor que los procesadores; es mucho m谩s lenta y hay la necesidad de proporcionar m谩s ancho de banda a los procesadores, especialmente con el incremento del n煤mero de n煤cleos y chips. Aun manteniendo un sistema de direccionamiento compartido en el que todos los procesadores pueden acceder al conjunto de la memoria, las soluciones han oscilado alrededor de la integraci贸n de m谩s memorias: usando tecnolog铆as modernas como las memorias de alto ancho de banda (highbandwidth memories, HBM) y memorias no vol谩tiles (non-volatile memories, NVM), haciendo que grupos de n煤cleos (como z贸calos completos) tengan acceso m谩s veloz a un subconjunto de la DRAM, o con la combinaci贸n de soluciones. Esto ha provocado una heterogeneidad en la velocidad de acceso a la memoria principal, en funci贸n del n煤cleo que solicita el acceso a una direcci贸n de memoria en particular y la ubicaci贸n f铆sica de esta direcci贸n, lo que provoca unos comportamientos no uniformes en el acceso a la memoria (non-uniform memory access, NUMA). Adem谩s, muchos de estos sistemas tienen memorias cach茅 coherentes (cache-coherent NUMA, ccNUMA), lo que implica que cualquier cambio hecho en la memoria desde un n煤cleo de un procesador debe ser visible por el resto de procesadores de forma transparente para los programadores. Estos comportamientos NUMA reducen el rendimiento de las aplicaciones y pueden suponer un reto para los programadores. Para abordar dicho problema, en esta tesis se proponen soluciones, a nivel de software y hardware, que mejoran la localidad de datos en los sistemas NUMA y, en consecuencia, el rendimiento de las aplicaciones en estos sistemas inform谩ticos. La primera contribuci贸n muestra que, cuando se tienen en cuenta a la vez la precarga de direcciones de memoria mediante hardware (o hardware prefetching ) y las decisiones de la ubicaci贸n de los hilos de ejecuci贸n y los datos en los sistemas NUMA, se pueden hallar mejores configuraciones que cuando se consideran ambos aspectos por separado. Con una combinaci贸n de los resultados de rendimiento y de los contadores disponibles en el sistema se construye un modelo de rendimiento, tanto por avanzado como en en tiempo de ejecuci贸n, de la mejor configuraci贸n para aplicaciones que no est谩n incluidas en el modelo. La evaluaci贸n se realiza en dos sistemas NUMA de alto rendimiento, y los contadores medidos en uno de los sistemas se usan para predecir las mejores configuraciones en el otro sistema. La segunda contribuci贸n se basa en la idea de que el prefetching puede tener un efecto considerable en los sistemas NUMA y propone un esquema de precarga a nivel hardware que tiene en cuenta los efectos NUMA. Este esquema es gen茅rico y se puede aplicar a diferentes algoritmos de precarga existentes con un coste de hardware muy bajo pero que proporciona muy buenos resultados. Dichos resultados se obtienen y eval煤an mediante un simulador arquitectural preciso a nivel de ciclo y proporciona resultados detallados del rendimiento, la reducci贸n de las comunicaciones de datos y los costes energ茅ticos. Finalmente, la tercera y 煤ltima contribuci贸n consiste en algoritmos de planificaci贸n para modelos de programaci贸n basados en tareas. Estos modelos simplifican la programabilidad de las aplicaciones paralelas y proveen informaci贸n muy 煤til al sistema en tiempo de ejecuci贸n (runtime system) que controla su funcionamiento. Esta informaci贸n se utiliza para construir un grafo de dependencias entre tareas (task dependency graph, TDG), un grafo dirigido y ac铆clico que modela la aplicaci贸n y en el ue los nodos son fragmentos de c贸digo secuencial, conocidos como tareas, y los arcos son las dependencias de datos entre las distintas tareas. Los algoritmos de planificaci贸n que se proponen usan t茅cnicas e particionado de grafos y proporcionan una planificaci贸n de las tareas del TDG que minimiza la comunicaci贸n de datos entre las distintas regiones NUMA del sistema. Los resultados se han evaluado en sistemas ccNUMA reales con m煤ltiples regiones NUMA.Postprint (published version

    Parallel architectures and runtime systems co-design for task-based programming models

    Get PDF
    The increasing parallelism levels in modern computing systems has extolled the need for a holistic vision when designing multiprocessor architectures taking in account the needs of the programming models and applications. Nowadays, system design consists of several layers on top of each other from the architecture up to the application software. Although this design allows to do a separation of concerns where it is possible to independently change layers due to a well-known interface between them, it is hampering future systems design as the Law of Moore reaches to an end. Current performance improvements on computer architecture are driven by the shrinkage of the transistor channel width, allowing faster and more power efficient chips to be made. However, technology is reaching physical limitations were the transistor size will not be able to be reduced furthermore and requires a change of paradigm in systems design. This thesis proposes to break this layered design, and advocates for a system where the architecture and the programming model runtime system are able to exchange information towards a common goal, improve performance and reduce power consumption. By making the architecture aware of runtime information such as a Task Dependency Graph (TDG) in the case of dataflow task-based programming models, it is possible to improve power consumption by exploiting the critical path of the graph. Moreover, the architecture can provide hardware support to create such a graph in order to reduce the runtime overheads and making possible the execution of fine-grained tasks to increase the available parallelism. Finally, the current status of inter-node communication primitives can be exposed to the runtime system in order to perform a more efficient communication scheduling, and also creates new opportunities of computation and communication overlap that were not possible before. An evaluation of the proposals introduced in this thesis is provided and a methodology to simulate and characterize the application behavior is also presented.El aumento del paralelismo proporcionado por los sistemas de c贸mputo modernos ha provocado la necesidad de una visi贸n hol铆stica en el dise帽o de arquitecturas multiprocesador que tome en cuenta las necesidades de los modelos de programaci贸n y las aplicaciones. Hoy en d铆a el dise帽o de los computadores consiste en diferentes capas de abstracci贸n con una interfaz bien definida entre ellas. Las limitaciones de esta aproximaci贸n junto con el fin de la ley de Moore limitan el potencial de los futuros computadores. La mayor铆a de las mejoras actuales en el dise帽o de los computadores provienen fundamentalmente de la reducci贸n del tama帽o del canal del transistor, lo cual permite chips m谩s r谩pidos y con un consumo eficiente sin apenas cambios fundamentales en el dise帽o de la arquitectura. Sin embargo, la tecnolog铆a actual est谩 alcanzando limitaciones f铆sicas donde no ser谩 posible reducir el tama帽o de los transistores motivando as铆 un cambio de paradigma en la construcci贸n de los computadores. Esta tesis propone romper este dise帽o en capas y abogar por un sistema donde la arquitectura y el sistema de tiempo de ejecuci贸n del modelo de programaci贸n sean capaces de intercambiar informaci贸n para alcanzar una meta com煤n: La mejora del rendimiento y la reducci贸n del consumo energ茅tico. Haciendo que la arquitectura sea consciente de la informaci贸n disponible en el modelo de programaci贸n, como puede ser el grafo de dependencias entre tareas en los modelos de programaci贸n dataflow, es posible reducir el consumo energ茅tico explotando el camino critico del grafo. Adem谩s, la arquitectura puede proveer de soporte hardware para crear este grafo con el objetivo de reducir el overhead de construir este grado cuando la granularidad de las tareas es demasiado fina. Finalmente, el estado de las comunicaciones entre nodos puede ser expuesto al sistema de tiempo de ejecuci贸n para realizar una mejor planificaci贸n de las comunicaciones y creando nuevas oportunidades de solapamiento entre c贸mputo y comunicaci贸n que no eran posibles anteriormente. Esta tesis aporta una evaluaci贸n de todas estas propuestas, as铆 como una metodolog铆a para simular y caracterizar el comportamiento de las aplicacionesPostprint (published version

    Exploiting task-based programming models for resilience

    Get PDF
    Hardware errors become more common as silicon technologies shrink and become more vulnerable, especially in memory cells, which are the most exposed to errors. Permanent and intermittent faults are caused by manufacturing variability and circuits ageing. While these can be mitigated once they are identified, their continuous rate of appearance throughout the lifetime of memory devices will always cause unexpected errors. In addition, transient faults are caused by effects such as radiation or small voltage/frequency margins, and there is no efficient way to shield against these events. Other constraints related to the diminishing sizes of transistors, such as power consumption and memory latency have caused the microprocessor industry to turn to increasingly complex processor architectures. To solve the difficulties arising from programming such architectures, programming models have emerged that rely on runtime systems. These systems form a new intermediate layer on the hardware-software abstraction stack, that performs tasks such as distributing work across computing resources: processor cores, accelerators, etc. These runtime systems dispose of a lot of information, both from the hardware and the applications, and offer thus many possibilities for optimisations. This thesis proposes solutions to the increasing fault rates in memory, across multiple resilience disciplines, from algorithm-based fault tolerance to hardware error correcting codes, through OS reliability strategies. These solutions rely for their efficiency on the opportunities presented by runtime systems. The first contribution of this thesis is an algorithmic-based resilience technique, allowing to tolerate detected errors in memory. This technique allows to recover data that is lost by performing computations that rely on simple redundancy relations identified in the program. The recovery is demonstrated for a family of iterative solvers, the Krylov subspace methods, and evaluated for the conjugate gradient solver. The runtime can transparently overlap the recovery with the computations of the algorithm, which allows to mask the already low overheads of this technique. The second part of this thesis proposes a metric to characterise the impact of faults in memory, which outperforms state-of-the-art metrics in precision and assurances on the error rate. This metric reveals a key insight into data that is not relevant to the program, and we propose an OS-level strategy to ignore errors in such data, by delaying the reporting of detected errors. This allows to reduce failure rates of running programs, by ignoring errors that have no impact. The architectural-level contribution of this thesis is a dynamically adaptable Error Correcting Code (ECC) scheme, that can increase protection of memory regions where the impact of errors is highest. A runtime methodology is presented to estimate the fault rate at runtime using our metric, through performance monitoring tools of current commodity processors. Guiding the dynamic ECC scheme online using the methodology's vulnerability estimates allows to decrease error rates of programs at a fraction of the redundancy cost required for a uniformly stronger ECC. This provides a useful and wide range of trade-offs between redundancy and error rates. The work presented in this thesis demonstrates that runtime systems allow to make the most of redundancy stored in memory, to help tackle increasing error rates in DRAM. This exploited redundancy can be an inherent part of algorithms that allows to tolerate higher fault rates, or in the form of dead data stored in memory. Redundancy can also be added to a program, in the form of ECC. In all cases, the runtime allows to decrease failure rates efficiently, by diminishing recovery costs, identifying redundant data, or targeting critical data. It is thus a very valuable tool for the future computing systems, as it can perform optimisations across different layers of abstractions.Los errores en memoria se vuelven m谩s comunes a medida que las tecnolog铆as de silicio reducen su tama帽o. La variabilidad de fabricaci贸n y el envejecimiento de los circuitos causan fallos permanentes e intermitentes. Aunque se pueden mitigar una vez identificados, su continua tasa de aparici贸n siempre causa errores inesperados. Adem谩s, la memoria tambi茅n sufre de fallos transitorios contra los cuales no se puede proteger eficientemente. Estos fallos est谩n causados por efectos como la radiaci贸n o los reducidos m谩rgenes de voltaje y frecuencia. Otras restricciones coet谩neas, como el consumo de energ铆a y la latencia de la memoria, obligaron a las arquitecturas de computadores a volverse cada vez m谩s complejas. Para programar tales procesadores, se desarrollaron modelos de programaci贸n basados en entornos de ejecuci贸n. Estos sistemas forman una nueva abstracci贸n entre hardware y software, realizando tareas como la distribuci贸n del trabajo entre recursos inform谩ticos: n煤cleos de procesadores, aceleradores, etc. Estos entornos de ejecuci贸n disponen de mucha informaci贸n tanto sobre el hardware como sobre las aplicaciones, y ofrecen as铆 muchas posibilidades de optimizaci贸n. Esta tesis propone soluciones a los fallos en memoria entre m煤ltiples disciplinas de resiliencia, desde la tolerancia a fallos basada en algoritmos, hasta los c贸digos de correcci贸n de errores en hardware, incluyendo estrategias de resiliencia del sistema operativo. La eficiencia de estas soluciones depende de las oportunidades que presentan los entornos de ejecuci贸n. La primera contribuci贸n de esta tesis es una t茅cnica a nivel algor铆tmico que permite corregir fallos encontrados mientras el programa su ejecuta. Para corregir fallos se han identificado redundancias simples en los datos del programa para toda una clase de algoritmos, los m茅todos del subespacio de Krylov (gradiente conjugado, GMRES, etc). La estrategia de recuperaci贸n de datos desarrollada permite corregir errores sin tener que reinicializar el algoritmo, y aprovecha el modelo de programaci贸n para superponer las computaciones del algoritmo y de la recuperaci贸n de datos. La segunda parte de esta tesis propone una m茅trica para caracterizar el impacto de los fallos en la memoria. Esta m茅trica supera en precisi贸n a las m茅tricas de vanguardia y permite identificar datos que son menos relevantes para el programa. Se propone una estrategia a nivel del sistema operativo retrasando la notificaci贸n de los errores detectados, que permite ignorar fallos en estos datos y reducir la tasa de fracaso del programa. Por 煤ltimo, la contribuci贸n a nivel arquitect贸nico de esta tesis es un esquema de C贸digo de Correcci贸n de Errores (ECC por sus siglas en ingl茅s) adaptable din谩micamente. Este esquema puede aumentar la protecci贸n de las regiones de memoria donde el impacto de los errores es mayor. Se presenta una metodolog铆a para estimar el riesgo de fallo en tiempo de ejecuci贸n utilizando nuestra m茅trica, a trav茅s de las herramientas de monitorizaci贸n del rendimiento disponibles en los procesadores actuales. El esquema de ECC guiado din谩micamente con estas estimaciones de vulnerabilidad permite disminuir la tasa de fracaso de los programas a una fracci贸n del coste de redundancia requerido para un ECC uniformemente m谩s fuerte. El trabajo presentado en esta tesis demuestra que los entornos de ejecuci贸n permiten aprovechar al m谩ximo la redundancia contenida en la memoria, para contener el aumento de los errores en ella. Esta redundancia explotada puede ser una parte inherente de los algoritmos que permite tolerar m谩s fallos, en forma de datos inutilizados almacenados en la memoria, o agregada a la memoria de un programa en forma de ECC. En todos los casos, el entorno de ejecuci贸n permite disminuir los efectos de los fallos de manera eficiente, disminuyendo los costes de recuperaci贸n, identificando datos redundantes, o focalizando esfuerzos de protecci贸n en los datos cr铆ticos
    corecore