Decoupling the optimization space of tensor computation for a better understanding of performance on Intel CPU - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2022

Decoupling the optimization space of tensor computation for a better understanding of performance on Intel CPU

Découpler l'espace d'optimisation des calculs de tenseurs pour une meilleure compréhension de la performance sur CPU

Résumé

This work focuses on the problem of optimizing a class of programs we call tensor computation, which includes matrix multiplication, tensor contraction (which is a generalization of matrix multiplication), and convolution.One of the key points of our methodology is the use of what we call a microkernel, a small optimized block of code that serves as a building block for the whole program.We present a pipeline called TTiLE that automatically generates a specialized code for a given problem size.We separate the optimization scheme into two phases : first we select the microkernel with an empiric search.Then we select the outer levels.In this last phase, we leverage some of the work done in performance modelization.This methodology allows us to match the performance of state-of-the-art tools on recent architectures.To explore our design space and evaluate our search strategy, we crafted a dedicated code generation and evaluation platform.In the process of this exploration, we had to reconsider the way we evaluate a search process.We introduce a clear cut between what we call the search space and the search heuristic.We characterize a search space by its distribution, which is evaluated empirically by random sampling.This distribution is then used as a baseline - a search heuristic is worth using only if, for the same number of tests, it can converge toward a better candidate than a random search.This evaluation process allows us to characterize which choices do improve the search by rising the density of good candidates in the space, and which ones do not.Some of the choices we did early in our research, such as generating only perfectly nested or nearly perfectly nested loops, proved to have little to no positive impact on the final performance.Our results show that the combination of a very straightforward code generation scheme, a restriction to use only selected microkernels at the inner level, and a random search of the outer levels of the loop nest converges very quickly toward candidates that are competitive with the state of the art (mainly AutoTVM/Ansor, but also Halide and OneDNN) on Intel CPU, both in parallel and sequential settings.The main takeaway of this thesis is the coupling between space definition and exploration.That is, the performance of a given space exploration heuristic (be it guided by a deterministic model, or based on a learning algorithm) strongly depends on the configuration of the space we are looking into.A very loose restriction of a space where a huge proportion of candidates are inadequate imposes the need for a sophisticated search.On the contrary, restricting more tightly the space of possible implementations by constraining some design choices can make even naive search strategies, such as random selection, competitive with more elaborated ones.
Ce travail se rapporte au problème de l'optimisation d'une classe de programmes que nous appelons Calculs de tenseur et qui inclut les multiplications de matrice, la contraction de tenseur (une généralisation de la multiplication de matrice) et la convolution.Notre approche s'appuie sur des observations introduites dans GotoBlas et BLIS. Notre méthodologie est basée sur l'utilisation de ce que nous appelons des micro-noyaux. Cela consiste à utiliser un petit morceau de code ultra-optimisé qui sert de brique de base à l'ensemble du programme. Nous présentons un algorithme appelé TTiLE qui génère automatiquement du code spécialisé pour un programme de la classe que nous optimisons et une taille de problème donnée.Le schéma d'optimisation est séparé en deux phases : nous sélectionnons d'abord le micro-noyau sur la base d'une recherche empirique. Ensuite, nous sélectionnons les niveaux supérieurs du nid de boucle.Dans cette deuxième phase nous tirons parti de l'état de l'art existant en modélisation de performance. Cette méthodologie nous permet de concurrencer les outils les plus récents sur des architectures récentes.Afin d'explorer l'espace des solutions possibles et d'évaluer notre stratégie de recherche nous avons développé une bibliothèque de génération de code dédiée ainsi qu'une plateforme d'expérimentation.Au cours de ces travaux, nous avons du reconsidérer la manière dont nous évaluons un processus de recherche. Nous introduisons une distinction nette entre ce que nous appelons l'espace de recherche et l'heuristique de recherche. Nous caractérisons l'espace de recherche par sa distribution.Cette distribution est évaluée empiriquement à l'aide d'un échantillonage aléatoire. Une fois évaluée, nous nous en servons comme d'une référence. Une heuristique est utile uniquement si, pour un nombre d'essai donné, le meilleur résultat obtenu est significativement meilleur que celui qu'on obtiendrait avec une recherche aléatoire.Ce processus d'évaluation nous permet de caractériser quels choix améliorent réellement l'espace de recherche en augmentant la densité de bons candidats. Certains choix faits tôt dans notre recherche tels que s'astreindre à ne générer que des boucles parfaitement imbriqués se sont révélés n'avoir que peu d'impact.Nos résultats prouvent que la combinaison d'une génération de code très simple, de la restriction à des micronoyaux sélectionnés au niveau interne et d'une recherche aléatoire pour les niveaux externes du nid de boucles converge très rapidement vers des candidats compétitifs avec l'état de l'art (essentiellement TVM mais aussi Halide et OneDNN) sur des CPU Intel, à la fois en parallèle et en séquentiel.Des expériences préliminaires montrent de bons résultats sur des architectures ARM également.La leçon prinicipale de cette thèse est le couplage entre la définition de l'espace de recherche et son exploration. Plus précisément, la performance d'une heuristique de recherche (qu'elle soit guidée par un modèle déterministique ou basée sur un algorithme d'apprentissage) dépend fortement de la configuration de l'espace exploré. Un espace peu contraint où une proportion écrasante de candidats sont mauvais rend nécessaire une exploration puissante. Au contraire, un espace plus contraint où certains choix sont restreints en avance peut rendre des stratégies naïve comme une recherche aléatoire compétitive face à des algorithmes beaucoup plus avancés.
Fichier principal
Vignette du fichier
TOLLENAERE_2022_archivage.pdf (2.96 Mo) Télécharger le fichier
Origine : Version validée par le jury (STAR)

Dates et versions

tel-04068053 , version 1 (13-04-2023)

Identifiants

  • HAL Id : tel-04068053 , version 1

Citer

Nicolas Tollenaere. Decoupling the optimization space of tensor computation for a better understanding of performance on Intel CPU. Data Structures and Algorithms [cs.DS]. Université Grenoble Alpes [2020-..], 2022. English. ⟨NNT : 2022GRALM045⟩. ⟨tel-04068053⟩
54 Consultations
59 Téléchargements

Partager

Gmail Facebook X LinkedIn More