103 research outputs found
Minimizing Energy Consumption of MPI Programs in Realistic Environment
Dynamic voltage and frequency scaling proves to be an efficient way of
reducing energy consumption of servers. Energy savings are typically achieved
by setting a well-chosen frequency during some program phases. However,
determining suitable program phases and their associated optimal frequencies is
a complex problem. Moreover, hardware is constrained by non negligible
frequency transition latencies. Thus, various heuristics were proposed to
determine and apply frequencies, but evaluating their efficiency remains an
issue. In this paper, we translate the energy minimization problem into a mixed
integer program that specifically models most current hardware limitations. The
problem solution then estimates the minimal energy consumption and the
associated frequency schedule. The paper provides two different formulations
and a discussion on the feasibility of each of them on realistic applications
Quantum Monte Carlo for large chemical systems: Implementing efficient strategies for petascale platforms and beyond
Various strategies to implement efficiently QMC simulations for large
chemical systems are presented. These include: i.) the introduction of an
efficient algorithm to calculate the computationally expensive Slater matrices.
This novel scheme is based on the use of the highly localized character of
atomic Gaussian basis functions (not the molecular orbitals as usually done),
ii.) the possibility of keeping the memory footprint minimal, iii.) the
important enhancement of single-core performance when efficient optimization
tools are employed, and iv.) the definition of a universal, dynamic,
fault-tolerant, and load-balanced computational framework adapted to all kinds
of computational platforms (massively parallel machines, clusters, or
distributed grids). These strategies have been implemented in the QMC=Chem code
developed at Toulouse and illustrated with numerical applications on small
peptides of increasing sizes (158, 434, 1056 and 1731 electrons). Using 10k-80k
computing cores of the Curie machine (GENCI-TGCC-CEA, France) QMC=Chem has been
shown to be capable of running at the petascale level, thus demonstrating that
for this machine a large part of the peak performance can be achieved.
Implementation of large-scale QMC simulations for future exascale platforms
with a comparable level of efficiency is expected to be feasible
Diamond schemes:An organization of parallel memories for efficient array processing
Projet CHLOEDisponible dans les fichiers attachés à ce documen
Fine-grained Benchmark Subsetting for System Selection
ABSTRACT System selection aims at finding the best architecture for a set of programs and workloads. It traditionally requires long running benchmarks. We propose a method to reduce the cost of system selection. We break down benchmarks into elementary fragments of source code, called codelets. Then, we identify two causes of redundancy: first, similar codelets; second, codelets called repeatedly. The key idea is to minimize redundancy inside the benchmark suite to speed it up. For each group of similar codelets, only one representative is kept. For codelets called repeatedly and for which the performance does not vary across calls, the number of invocations is reduced. Given an initial benchmark suite, our method produces a set of reduced benchmarks that can be used in place of the original one for system selection. We evaluate our method on the NAS SER benchmarks, producing a reduced benchmark suite 30 times faster in average than the original suite, with a maximum of 44 times. The reduced suite predicts the execution time on three target architectures with a median error between 3.9% and 8%
Performance prediction based on codelet driven application characterization
Comprendre l'interaction existante entre applications, compilateurs, et architecture est fondamentale pour fabriquer de meilleurs produits: applications, compilateurs, et processeurs. L'un des moyens traditionnels permettant d'aborder ce problème reste l'expérimentation. Cependant cette méthode utilisant des applications complètes présente plusieurs inconvénients majeurs: complexité des applications pour faire, par exemple, de la simulation, ou une analyse détaillée de la performance de l'application; impossibilité d'avoir une vue précise de l'interaction; et enfin difficulté à prédire la performance d'une autre application n'existant pas dans la collection initiale.Cette thèse effectue une caractérisation systématique des applications en quatre étapes: extraction de code, analyse de performance, caractérisation mémoire, et prédiction de performance au niveau matériel. Afin de prédire la performance d'un code à une autre fréquence, cette thèse combine analyses statique et dynamique, ainsi que de la caractérisation mémoire pour proposer l'outil Capacity, destiné à la prédiction de performance au niveau matériel et à la découverte de connaissance. L'outil proposé est à la fois plus précis et plus rapide que les simulations, plus informatif que de simples expériences ou micro-expériences. Il est également utile et instructif pour diagnostiquer les problèmes de performance de code. Aujourd'hui, cet outil est utilisé par la technologie Cape-sim d'Intel pour simuler la performance d'un code à une autre fréquence.Understanding the interaction between applications, compilers, and architecture is a fundamental issue to generate better products: applications, compilers, and processors. One of the traditional tools to approach this problem is benchmarking. However, this approach through full applications has several key drawbacks. First, full applications are complex and hard to use as test codes for simulation, or detailed performance analysis. Second, dealing with full applications does not allow having an accurate view of the interaction. In the end, it is fairly hard to predict the performance for another application, which is not present in the original benchmark suite. This thesis performs a systematic characterization of applications in four steps: code extraction, performance analysis, memory characterization, and hardware performance prediction. In order to predict a code's performance at another frequency, this thesis combines static and dynamic analysis with memory characterization to propose the Capacity tool, a framework for hardware performance prediction and knowledge discovery. The proposed tool is more accurate and faster than simulations, more informative than simple benchmarking, or micro-benchmarking. Furthermore, it is useful and enlightening for a range of performance investigations. Currently, the framework is used by the Intel Cape-sim technology to simulate a software system's performance at another frequency.VERSAILLES-BU Sciences et IUT (786462101) / SudocSudocFranceF
Transformation et optimisation des programmes pour le parallélisme d'instructions
Nous commencerons d'abord par l'introduction des techniques de transformation et d'optimisation a haut niveau au chapitre 2. la présentation des architectures auxquelles nous nous intéressons, les processeurs super scalaires et vliw, est présentée dans le chapitre 3. après avoir aborde les principales machines, nous présentons la méthode de la simulation des unités fonctionnelles qui est voisine des tables de réservation réduites. Dans le quatrième chapitre, nous introduisons les techniques existantes d'extraction de dépendances de données pour qu'elles puissent être utilisées dans les phases de transformation et d'optimisation. Le chapitre suivant résumera les différentes méthodes de la transformation de code source. Nous avons utilisé sage++ comme base de travail pour réaliser les transformations, les parallelisations et les optimisations de code source (tops) dai99. sage++ fournit une abstraction du programme source, qui facilite la manipulation de code source. Le chapitre 6 détaillera les techniques d'élimination de code redondant en intégrant le pipeline logiciel afin de minimiser les opérations de chargement et déchargement dans la boucle pipelinée. Dans le chapitre 7, nous donnons les résultats expérimentaux des performances qui intègrent différentes transformations et les méthodes d'optimisation que nous avons développées...VERSAILLES-BU Sciences et IUT (786462101) / SudocSudocFranceF
Study of back-end compilers for multi-processor system-on-chip architecture
Afin d'entretenir la hausse régulière des performances des calculateurs tout en maîtrisant leur consommation énergétique, l'industrie des microprocesseurs développe des architectures permettant de traiter de plus en plus de tâches en parallèle. Ainsi, les futures générations de puces regrouperont jusqu'à plusieurs centaines de cœurs indépendants, parfois fonctionnellement hétérogènes. Pour ne pas exiger comme pré-requis à leur programmation une connaissance détaillée de leur fonctionnement interne, ces futurs processeurs imposent de fait une évolution de la chaîne de compilation. Dans cette thèse, nous proposons avec la présentation d'une extension pour le compilateur GCC plusieurs axes d'évolution de la phase d'adaptation du programme à l'architecture cible. Afin d'analyser et de transformer le programme à compiler, nous décrivons tout d'abord une représentation intermédiaire qui offre une vue hiérarchique du parallélisme exploitable. L'accent est mis ensuite sur la caractérisation des éléments parallèles détectés, et les informations collectées sont réutilisées dans une nouvelle technique d'ordonnancement statique qui peut exploiter plusieurs degrés de parallélisme. Nous abordons aussi l'ordonnancement dynamique et la génération de code pour architectures hétérogènes telles l'IBM Cell BE et les machines dotées d'un accélérateur NVIDIA. Le modèle d'exécution sous-jacent est supporté par un environnement de programmation et un oracle qui permettent d'ajuster le schéma d'exécution à la volée. Nous terminons par une évaluation expérimentale de toutes ces contributions, confirmant ainsi leur pertinence dans une chaîne de compilation pour architectures massivement parallèles.In order to maintain the continuous growth of the performance of computers while keeping their energy consumption under control, the microchip industry develops architectures capable of processing more and more tasks concurrently. Thus, the next generations of microprocessors may count hundreds of independent cores that may differ in their functions and features. As an extensive knowledge of their internals cannot be a prerequisite to their programming, these forthcoming computers necessitate the compilation flow to evolve. In this thesis, through the presentation of an extension of the GCC compiler, we propose several axes of evolution for the part of a compiler which adapts the input program to the target architecture. In order to analyze and transform a program, we describe first an intermediate representation that offers a hierarchical view of the parallelism available. Then, we put the emphasis on the characterization of the detected parallel constructs, and the information gathered are used in new static scheduling technique which can deal with multiple levels of parallelism. We also address dynamic scheduling and code generation for heterogeneous architectures such as the IBM Cell BE and computers featuring a NVIDIA accelerator. The underlying execution model is supported by a programming framework and a performance predictor which can adjust the execution scheme on the fly. We conclude with an experimental evaluation of all our contributions, thus confirming their relevance in a functional compilation flow for massively parallel architectures.VERSAILLES-BU Sciences et IUT (786462101) / SudocSudocFranceF
Stability analysis and improvement of the block Gram-Schmidt algorithm
The advent of supercomputers with hierarchical memory systems has imposed the use of block algorithms for the linear algebra algorithms. Although block algorithms may result in impressive improvements in performance, their numerical properties are quite different from their scalar counterpart and deserve an in depth study. In this paper, the numerical stability of Block Gram Schmidt orthogonalization is studied and a variant is proposed which has numerical properties similar to the classical Modified-Gram-Schmidt while retaining most of the performance advantages of the block formulation
Etude de l'interaction bas niveau entre le parallélisme d'instructions et les caches
Les problèmes d ordonnancement (d instructions ou de tâches) étudiées dans la littérature considèrent majoritairement une connaissance parfaite du temps d exécution de chaque instruction. Or, la présence d un cache ne permet pas la connaissance à priori des délais d accès à la hiérarchie mémoire. L incertitude de la localisation des données dans la hiérarchie mémoire conduit à l incertitude des délais consommés par les instructions d accès mémoire. Ainsi, les modèles théoriques d ordonnancement étudiés sont bien simplifiés, ne considèrent que des latences fixes pour les différentes instructions. Or en réalité les effets de caches sur les ordonnancements d instructions font varier les temps d exécution des programmes induisant l impossible de faire une analyse temporelle du code et une sous-utilisation des ressources. Nous proposons une optimisation qui prend en compte les effets de cache lors de la compilation et nous y associons les optimisations de pré-chargement de données de manière linéaire. De plus, nous constatons que l ajout d instruction de pré-chargement de données dans le code bas niveau permet de couvrir les latences d accès à la mémoire. Cependant, la littérature ne décrit que les méthodes d accès linéaire et ne propose que peu de solutions pour les accès non linéaires. Dans ce contexte, nous proposons une méthode d analyse de flux d adresses accédées durant l exécution. Cette méthode est basée sur l analyse spectrale. Celle-ci permet de détecter les patterns répétitifs et donc de prédire les prochaines adresses accédées. En dernier, la granularité d accès aux données est un point souvent négligé lors de l insertion d instruction de pré-chargement dans le code bas niveau. Or, il nous semble nécessaire de prendre en compte ce paramètre afin de proposer des solutions plus appropriées. Pour cela nous nous somme basées sur une granularité gros grain pour prefetcher des bloques de données. Nous avons montré l efficacité de la méthode sur la multiplication matricielle creuse. Plus de 1400 matrices furent utilisées et nous avons développé un test de régularité de données afin de classifier ces matrices.The scheduling problems (of instructions or tasks) that are studied in the litterature consider a well knowledge of execution time of each instruction. However, adding a cache to a processor does not permit in advance to know the access delay to the memory hierarchy. The uncertainty of the data localisation in memory hierarchy induces uncertainty of the memory instruction delays. Thus, the studied theorical scheduling models are simple, and they only consider fixed latency for memory instructions. In fact, the cache effects on instruction scheduling vary the program execution time inducing the impossibility to perform a temporal analysis of the generated code and then a resource under-utilisation. We propose an optimisation that takes into account the cache effects during the compilation time. Then, we combine the linear prefetch optimisation with it. Moreover, we note that the addition of the data prefetch instructions permits to overlap the memory access latency. However, litterature describes only linear access prefetch and does not offer alternative for the non-linear accesses. In this context, we propose an analysis method of the accessed address stream based on the spectral analysis. It permits to detect the repetitive patterns if they exist. Based on these repetitive patterns, data becomes prediction possible. This may leads to prefetch repetitive irregular patterns. Finally, the granularity of data accesses is often neglected when the prefetch optimisation is applied. However, this parameter can be used to propose an adapted optimisation. Indeed, in opposition to the classical fine level granularity of data prefetching, we propose to prefetch at large grain granularity. In other word, instead of prefetching cache-lines, we propose to prefetch a whole memory block. We perform experiments on the sparse matrix vector multiplication. In addition, we developed a test of data regularity to classify the matrices.VERSAILLES-BU Sciences et IUT (786462101) / SudocSudocFranceF
- …