Spelling suggestions: "subject:"programmation générative"" "subject:"programmation génératives""
11 |
Méthodes de génération automatique de code appliquées à l’algèbre linéaire numérique dans le calcul haute performance / Automatic code generation methods applied to numerical linear algebra in high performance computingMasliah, Ian 26 September 2016 (has links)
Les architectures parallèles sont aujourd'hui présentes dans tous les systèmes informatiques, allant des smartphones aux supercalculateurs en passant par les ordinateurs de bureau. Programmer efficacement ces architectures en fonction des applications requiert un effort pluridisciplinaire portant sur les langages dédiés (Domain Specific Languages - DSL), les techniques de génération de code et d'optimisation, et les algorithmes numériques propres aux applications. Dans cette thèse, nous présentons une méthode de programmation haut niveau prenant en compte les caractéristiques des architectures hétérogènes et les propriétés existantes des matrices pour produire un solveur générique d'algèbre linéaire dense. Notre modèle de programmation supporte les transferts explicites et implicites entre un processeur (CPU) et un processeur graphique qui peut être généraliste (GPU) ou intégré (IGP). Dans la mesure où les GPU sont devenus un outil important pour le calcul haute performance, il est essentiel d'intégrer leur usage dans les plateformes de calcul. Une architecture récente telle que l'IGP requiert des connaissances supplémentaires pour pouvoir être programmée efficacement. Notre méthodologie a pour but de simplifier le développement sur ces architectures parallèles en utilisant des outils de programmation haut niveau. À titre d'exemple, nous avons développé un solveur de moindres carrés en précision mixte basé sur les équations semi-normales qui n'existait pas dans les bibliothèques actuelles. Nous avons par la suite étendu nos travaux à un modèle de programmation multi-étape ("multi-stage") pour résoudre les problèmes d'interopérabilité entre les modèles de programmation CPU et GPU. Nous utilisons cette technique pour générer automatiquement du code pour accélérateur à partir d'un code effectuant des opérations point par point ou utilisant des squelettes algorithmiques. L'approche multi-étape nous assure que le typage du code généré est valide. Nous avons ensuite montré que notre méthode est applicable à d'autres architectures et algorithmes. Les routines développées ont été intégrées dans une bibliothèque de calcul appelée NT2.Enfin, nous montrons comment la programmation haut niveau peut être appliquée à des calculs groupés et des contractions de tenseurs. Tout d'abord, nous expliquons comment concevoir un modèle de container en utilisant des techniques de programmation basées sur le C++ moderne (C++-14). Ensuite, nous avons implémenté un produit de matrices optimisé pour des matrices de petites tailles en utilisant des instructions SIMD. Pour ce faire, nous avons pris en compte les multiples problèmes liés au calcul groupé ainsi que les problèmes de localité mémoire et de vectorisation. En combinant la programmation haut niveau avec des techniques avancées de programmation parallèle, nous montrons qu'il est possible d'obtenir de meilleures performances que celles des bibliothèques numériques actuelles. / Parallelism in today's computer architectures is ubiquitous whether it be in supercomputers, workstations or on portable devices such as smartphones. Exploiting efficiently these systems for a specific application requires a multidisciplinary effort that concerns Domain Specific Languages (DSL), code generation and optimization techniques and application-specific numerical algorithms. In this PhD thesis, we present a method of high level programming that takes into account the features of heterogenous architectures and the properties of matrices to build a generic dense linear algebra solver. Our programming model supports both implicit or explicit data transfers to and from General-Purpose Graphics Processing Units (GPGPU) and Integrated Graphic Processors (IGPs). As GPUs have become an asset in high performance computing, incorporating their use in general solvers is an important issue. Recent architectures such as IGPs also require further knowledge to program them efficiently. Our methodology aims at simplifying the development on parallel architectures through the use of high level programming techniques. As an example, we developed a least-squares solver based on semi-normal equations in mixed precision that cannot be found in current libraries. This solver achieves similar performance as other mixed-precision algorithms. We extend our approach to a new multistage programming model that alleviates the interoperability problems between the CPU and GPU programming models. Our multistage approach is used to automatically generate GPU code for CPU-based element-wise expressions and parallel skeletons while allowing for type-safe program generation. We illustrate that this work can be applied to recent architectures and algorithms. The resulting code has been incorporated into a C++ library called NT2. Finally, we investigate how to apply high level programming techniques to batched computations and tensor contractions. We start by explaining how to design a simple data container using modern C++14 programming techniques. Then, we study the issues around batched computations, memory locality and code vectorization to implement a highly optimized matrix-matrix product for small sizes using SIMD instructions. By combining a high level programming approach and advanced parallel programming techniques, we show that we can outperform state of the art numerical libraries.
|
12 |
A DSEL in C++ for lowest-order methods for diffusive problem on general meshes / Programmation générative appliquée au prototypage d'Applications performantes sur des architectures massivement parallèles pour l'approximation volumes finis de systèmes physiques complexesGratien, Jean-Marc 27 May 2013 (has links)
Les simulateurs industriels deviennent de plus en plus complexes car ils doivent intégrer de façon performante des modèles physiques complets et des méthodes de discrétisation évoluées. Leur mise au point nécessite de gérer de manière efficace la complexité des modèles physiques sous-jacents, la complexité des méthodes numériques utilisées, la complexité des services numériques de bas niveau nécessaires pour tirer parti des architectures matérielle modernes et la complexité liée aux langages informatiques. Une réponse partielle au problème est aujourd'hui fournie par des plate-formes qui proposent des outils avancés pour gérer de façon transparente la complexité liée au parallélisme. Cependant elles ne gèrent que la complexité du matériel et les services numériques de bas niveau comme l'algèbre linéaire. Dans le contexte des méthodes Éléments Finis (EF), l'existence d'un cadre mathématique unifié a permis d'envisager des outils qui permettent d'aborder aussi la complexité issue des méthodes numériques et celle liée aux problèmes physiques, citons, par exemple, les projets Freefem++, Getdp, Getfem++, Sundance, Feel++ et Fenics. Le travail de thèse a consisté à étendre cette approche aux méthodes d'ordre bas pour des systèmes d'EDPs, méthodes qui souffraient jusqu'à maintenant d'une absence d'un cadre suffisamment général permettant son extension à des problèmes différents. Des travaux récents ont résolue cette difficulté, par l'introduction d'une nouvelle classe de méthodes d'ordre bas inspirée par les éléments finis non conformes. Cette formulation permet d'exprimer dans un cadre unifié les schémas VF multi-points et les méthodes DFM/VFMH. Ce nouveau cadre a permis la mise au point d'un langage spécifique DSEL en C++ qui permet de développer des applications avec un haut niveau d'abstraction, cachant la complexité des méthodes numériques et des services bas niveau garanties de haute performances. La syntaxe et les techniques utilisées sont inspirée par celles de Feel++. Le DSEL a été développé à partir de la plate-forme Arcane, et embarqué dans le C++. Les techniques de DSEL permettent de représenter un problème et sa méthode de résolution avec une expression, parsée à la compilation pour générer un programme, et évaluée à l'exécution pour construire un système linéaire que l'on peut résoudre pour trouver la solution du problème. Nous avons mis au point notre DSEL à l'aide d'outils standard issus de la bibliothèque Boost puis l'avons validé sur divers problèmes académiques non triviaux tels que des problèmes de diffusion hétérogène et le problème de Stokes. Dans un deuxième temps, dans le cadre du projet ANR HAMM (Hybrid Architecture and Multiscale Methods), nous avons validé notre approche en complexifiant le type de méthodes abordées et le type d'architecture matérielle cible pour nos programmes. Nous avons étendu le formalisme mathématique sur lequel nous nous basons pour pouvoir écrire des méthodes multi-échelle puis nous avons enrichi notre DSEL pour pouvoir implémenter de telles méthodes. Afin de pouvoir tirer partie de façon transparente des performances de ressources issues d'architectures hybrides proposant des cartes graphiques de type GPGPU, nous avons mis au point une couche abstraite proposant un modèle de programmation unifié qui permet d'accéder à différents niveaux de parallélisme plus ou moins fin en fonction des spécificités de l'architecture matérielle cible. Nous avons validé cette approche en évaluant les performances de cas tests utilisant des méthodes multi-échelle sur des configurations variés de machines hétérogènes. Pour finir nous avons implémenté des applications variées de type diffusion-advection-réaction, de Navier-Stokes incompressible et de type réservoir. Nous avons validé la flexibilité de notre approche et la capacité qu'elle offre à appréhender des problèmes variés puis avons étudié les performances des diverses implémentations. / Industrial simulation software has to manage : the complexity of the underlying physical models, usually expressed in terms of a PDE system completed with algebraic closure laws, the complexity of numerical methods used to solve the PDE systems, and finally the complexity of the low level computer science services required to have efficient software on modern hardware. Nowadays, this complexity management becomes a key issue for the development of scientific software. Some frameworks already offer a number of advanced tools to deal with the complexity related to parallelism in a transparent way. However, all these frameworks often provide only partial answers to the problem as they only deal with hardware complexity and low level numerical complexity like linear algebra. High level complexity related to discretization methods and physical models lack tools to help physicists to develop complex applications. New paradigms for scientific software must be developed to help them to seamlessly handle the different levels of complexity so that they can focus on their specific domain. Generative programming, component engineering and domain-specific languages (either DSL or DSEL) are key technologies to make the development of complex applications easier to physicists, hiding the complexity of numerical methods and low level computer science services. These paradigms allow to write code with a high level expressive language and take advantage of the efficiency of generated code for low level services close to hardware specificities. In the domain of numerical algorithms to solve partial differential equations, their application has been up to now limited to Finite Element (FE) methods, for which a unified mathematical framework has been existing for a long time. Such kinds of DSL have been developed for finite element or Galerkin methods in projects like Freefem++, Getdp, Getfem++, Sundance, Feel++ and Fenics. A new consistent unified mathematical frame has recently emerged and allows a unified description of a large family of lowest-order methods. This framework allows then, as in FE methods, the design of a high level language inspired from the mathematical notation, that could help physicists to implement their application writing the mathematical formulation at a high level. We propose to develop a language based on that frame, embedded in the C++ language. Our work relies on a mathematical framework that enables us to describe a wide family of lowest order methods including multiscale methods based on lowest order methods. We propose a DSEL developed on top of Arcane platform, based on the concepts presented in the unified mathematical frame and on the Feel++ DSEL. The DSEL is implemented with the Boost.Proto library by Niebler, a powerful framework to build a DSEL in C++. We have proposed an extension of the computational framework to multiscale methods and focus on the capability of our approach to handle complex methods.Our approach is extended to the runtime system layer providing an abstract layer that enable our DSEL to generate efficient code for heterogeneous architectures. We validate the design of this layer by benchmarking multiscale methods. This method provides a great amount of independent computations and is therefore the kind of algorithms that can take advantage efficiently of new hybrid hardware technology. Finally we benchmark various complex applications and study the performance results of their implementations with our DSEL.
|
Page generated in 0.1002 seconds