Spelling suggestions: "subject:"progress threads"" "subject:"cprogress threads""
1 |
Recouvrement des Collectives MPI Non-bloquantes sur Processeur Manycore / MPI Non-Blocking Collective Overlap on Manycore ProcessorTaboada, Hugo 11 December 2018 (has links)
Les supercalculateurs utilisés dans le HPC sont constitués de plusieurs machines inter-connectées. Généralement, elles sont programmées à l'aide de MPI qui spécifie une interface de programmation échanger des messages entre les machines. Les opérations MPI non-bloquantes ont été proposées pour recouvrir les communications par du calcul afin d'en amortir le coût. Initialement, ces opérations étaient uniquement disponibles pour les opérations entre 2 processus MPI : les communications point-à-point. L'extension des communications non-bloquantes aux opérations impliquant plus de 2 processus MPI, les opérations collectives, est apparue dans la version 3.0 de la norme MPI en 2012. Cela a ouvert la possibilité de recouvrir les communications collectives non-bloquantes par du calcul. Cependant, ces opérations consomment plus de temps CPU que les opérations point-à-point. Nous proposons d'aborder ce problème sous plusieurs angles. D'une part, nous nous concentrons sur le placement des threads de progression générés par les collectives MPI non-bloquantes. Pour cela, nous proposons deux algorithmes de placement des threads de progression pour toutes les collectives MPI non-bloquantes. Le premier est de regrouper les threads de progression sur des cœurs libres. Le second est de placer les threads de progression sur les hyper-threads. Pour être plus efficace, nous nous concentrons ensuite sur l'optimisation de deux types d'algorithme utilisés pour les opérations collectives : les algorithmes en arbre et les algorithmes en chaîne. D'autre part, nous avons aussi étudié l'ordonnancement des threads de progression afin d'éviter l'exécution de threads inutiles à la progression de l'algorithme. Pour cela, nous proposons d'abord d'utiliser un mécanisme permettant de suspendre l'ordonnancement de ces threads, puis de forcer l'ordonnancement optimal des threads de progression de façon statique à l'aide de sémaphores. Enfin, une politique d'ordonnancement avec des priorités a été mise en place comme preuve de concept. / Supercomputers used in HPC are composed of severals inter-connected machines. Usually, they are programmed using MPI which specify an API for messages exchanges between machines. To amortize the cost of MPI collective operations, non-blocking collectives have been proposed so as to allow communications to be overlapped with computation. Initially, these operations were only available for communication between 2 MPI processes : point-to-point communications. Non-blocking communications were expanded to collective communications in 2012 with MPI 3.0. This opens up the possibility to overlap non-blocking collective communications with computation. However, these operations are more CPU-hungry than point-to-point communications. We propose to approach this problem from several angles. On the one hand, we focus on the placement of progress threads generated by the MPI non-blocking collectives. We propose two progress threads placements algorithms for all non-blocking collectives. We either bind them on free cores, or we bind them on the hyper-threads. Then, we focus on optimizing two types of algorithms used by collective operations: tree-based algorithms and chain-based algorithms. On the other hand, we also study the scheduling of progress threads to avoid their execution when it is unecessary to the advancement of the collective algorithm. For that, we propose first to use a mechanism to suspend the scheduling of these threads, and then we force their optimal scheduling statically by using semaphores. Finally, we introduce a proof of concept scheduling policy with priorities.
|
Page generated in 0.0716 seconds