´Etude et impl©mentation de l'algorithme du simplexe standard sur

download ´Etude et impl©mentation de l'algorithme du simplexe standard sur

of 102

  • date post

    05-Jan-2017
  • Category

    Documents

  • view

    223
  • download

    4

Embed Size (px)

Transcript of ´Etude et impl©mentation de l'algorithme du simplexe standard sur

  • Etude et implementation de lalgorithme

    du simplexe standard sur GPUs

    Xavier Meyer

    Memoire

    presente a la Faculte de sciences de lUniversite de Genevepour lobtention dune matrise en sciences informatiques

    Professeurs responsables :Prof. Bastien Chopard (CUI, UNIGE)

    Prof. Paul Albuquerque (hepia, HES-SO//Geneve)

    Geneve, le 4 fevrier 2011

  • Table des matieres

    Glossary 5

    1 Introduction 11.1 Motivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2 Algorithme du simplexe 42.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Programmation lineaire . . . . . . . . . . . . . . . . . . . . . . . 42.3 Representation geometrique . . . . . . . . . . . . . . . . . . . . . 5

    2.3.1 Representation . . . . . . . . . . . . . . . . . . . . . . . . 52.3.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3.3 Generalisation . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.4 Methode standard . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4.1 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . 82.4.2 Recherche de loptimum . . . . . . . . . . . . . . . . . . . 102.4.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.4 Cas particuliers . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.5 Methode du simplexe revise . . . . . . . . . . . . . . . . . . . . . 172.5.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 172.5.2 Decomposition du probleme . . . . . . . . . . . . . . . . . 172.5.3 Choix de la variable entrante . . . . . . . . . . . . . . . . 182.5.4 Choix de la variable sortante . . . . . . . . . . . . . . . . 192.5.5 Mise a jour du probleme . . . . . . . . . . . . . . . . . . . 192.5.6 Optimisation importante . . . . . . . . . . . . . . . . . . 19

    3 CUDA 213.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    3.2.1 Vue globale . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2.2 Organisation des taches . . . . . . . . . . . . . . . . . . . 223.2.3 Memoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3.3 Modele de programmation . . . . . . . . . . . . . . . . . . . . . . 273.3.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3.2 Branchements . . . . . . . . . . . . . . . . . . . . . . . . . 283.3.3 Cooperation entre les taches . . . . . . . . . . . . . . . . . 283.3.4 Cycle pour une instruction et latence . . . . . . . . . . . . 303.3.5 Occupation . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    2

  • 4 Implementations 314.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2 Choix de la methode du simplexe . . . . . . . . . . . . . . . . . . 31

    4.2.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2.2 Simplexe standard . . . . . . . . . . . . . . . . . . . . . . 324.2.3 Simplexe revise . . . . . . . . . . . . . . . . . . . . . . . . 334.2.4 Choix de la methode . . . . . . . . . . . . . . . . . . . . . 33

    4.3 Etude de performance de CUDA . . . . . . . . . . . . . . . . . . 344.3.1 Operations principales . . . . . . . . . . . . . . . . . . . . 344.3.2 Recherche du maximum . . . . . . . . . . . . . . . . . . . 354.3.3 Pivotage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    4.4 Implementation sur un GPU . . . . . . . . . . . . . . . . . . . . 364.4.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 364.4.2 Algorithme principal . . . . . . . . . . . . . . . . . . . . . 374.4.3 Recherche dune solution initiale faisable . . . . . . . . . . 404.4.4 Recherche de la solution optimale . . . . . . . . . . . . . . 414.4.5 Communications CPU - GPU . . . . . . . . . . . . . . . . 41

    4.5 Ameliorations de limplementation . . . . . . . . . . . . . . . . . 454.5.1 Difficultes rencontrees . . . . . . . . . . . . . . . . . . . . 454.5.2 Ameliorations de lalgorithme du simplexe . . . . . . . . . 474.5.3 Optimisations des kernel . . . . . . . . . . . . . . . . . . 50

    4.6 Implementation multi-GPU . . . . . . . . . . . . . . . . . . . . . 534.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 534.6.2 Decoupe du probleme . . . . . . . . . . . . . . . . . . . . 534.6.3 Architecture et communication multi-GPU . . . . . . . . 584.6.4 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5 Modeles de performance 655.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.2 Particularite lie a CUDA . . . . . . . . . . . . . . . . . . . . . . . 65

    5.2.1 Echanges de donnees CPU-GPU . . . . . . . . . . . . . . 655.2.2 Modeliser un Kernel . . . . . . . . . . . . . . . . . . . . . 66

    5.3 Simplexe sur un GPU . . . . . . . . . . . . . . . . . . . . . . . . 685.3.1 Recherche de la variable entrante : steepest edge . . . . . 685.3.2 Recherche de la variable sortante : expand . . . . . . . . . 695.3.3 Mise a jour de la matrice : pivotage . . . . . . . . . . . . 705.3.4 Modele de performance general . . . . . . . . . . . . . . . 71

    5.4 Simplexe multi-GPU . . . . . . . . . . . . . . . . . . . . . . . . . 725.4.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 725.4.2 Recherche de la variable entrante : steepest-edge . . . . . 735.4.3 Recherche de la variable sortante : expand . . . . . . . . . 735.4.4 Mise a jour de la matrice : pivotage . . . . . . . . . . . . 745.4.5 Modele de performance general . . . . . . . . . . . . . . . 74

    5.5 Application du modele : mesures theoriques . . . . . . . . . . . . 745.5.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 745.5.2 Temps par iteration . . . . . . . . . . . . . . . . . . . . . 755.5.3 Temps pour resoudre un probleme . . . . . . . . . . . . . 755.5.4 Speedup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    3

  • 6 Mesures 786.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.2 Implementation de reference . . . . . . . . . . . . . . . . . . . . . 786.3 Mesures de fonctionnement . . . . . . . . . . . . . . . . . . . . . 79

    6.3.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.3.2 Ensemble de donnes . . . . . . . . . . . . . . . . . . . . . 796.3.3 Resultats . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    6.4 Mesures de performance . . . . . . . . . . . . . . . . . . . . . . . 806.4.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.4.2 Environnement de mesures . . . . . . . . . . . . . . . . . 806.4.3 Ensemble de donnees . . . . . . . . . . . . . . . . . . . . . 816.4.4 Resultats . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    6.5 Analyse des resultats . . . . . . . . . . . . . . . . . . . . . . . . . 856.5.1 Influence de la densite . . . . . . . . . . . . . . . . . . . . 856.5.2 Comparaison du modele et des resultats . . . . . . . . . . 866.5.3 Gain apporte par lutilisation de GPUs . . . . . . . . . . 88

    7 Conclusion 907.1 Resume du travail realise . . . . . . . . . . . . . . . . . . . . . . 907.2 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    7.2.1 CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917.2.2 Simplexe . . . . . . . . . . . . . . . . . . . . . . . . . . . 927.2.3 Choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927.2.4 Resultats et modele de performance . . . . . . . . . . . . 93

    7.3 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    4

  • Glossaire

    block Groupe de taches execute sur un streaming multiprocessor (CUDA). 2427, 29, 30, 35, 42, 48, 6165, 69

    CC Compute Capabilities - version dun device (CUDA). 22

    CLP COIN-OR Linear Programming - implementation du simplexe revise. 7378, 80, 82, 84

    COIN-OR Computational Infrastructure for Operations Research - projet opensource. 73, 84

    CUBLAS Basic Linear Algebra Subprograms for CUDA - librairie pour CUDA.32, 35, 42, 65

    device unite de calcul graphique (CUDA). 22, 25, 35, 37, 40, 49, 55, 56, 60, 67

    expand EXPanding-tolerance ANti-Degeneracy procedure - methode de choixde la variable sortante. 52, 53, 55, 64, 68, 70, 74, 85

    FLOPS Floating point operations Per Second - mesure de vitesse dun systemeinformatique. 21, 75, 87

    GPGPU General-Purpose Computing on Graphics Processing Units - calculsur GPU. 2, 3, 21, 33, 60, 70, 83, 86

    grid Groupe de blocks (CUDA). 25

    kernel Fonction CUDA. 22, 23, 31, 32, 35, 37, 4042, 48, 49, 6067, 69, 70, 75,80, 84, 85

    latence Temps mis par une lecture en memoire globale (CUDA). 27, 29, 30,48, 49, 62, 63, 65, 66, 84, 87

    SIMD Simple Instruction Multiple Data - type de parallelisme. 1, 27

    SIMT Simple Instruction Multiple Thread - type de parallelisme. 1, 21, 27, 33,83

    SM Streaming multiprocessor - multiprocesseur dun GPU gerant 8 curs. 6164, 75

    speedup Acceleration - mesure de parallelisme. 2, 70, 77, 82, 84, 86

    steepest edge methode de choix de la variable entrante. 46, 48, 5153, 63, 68,74, 77, 85

    warp Sous-ensemble de taches (CUDA). 2430, 43, 48, 6163, 65

    5

  • Resume

    Lalgorithme du simplexe est une des methodes les plus utilisees dans le cadrede la recherche operationnelle. La complexite des problemes a resoudre evolueconstamment, de telle sorte que les implementations existantes saverent par-fois trop lente. En parallele, la technologie evolue et met a notre disposition denouveaux outils. Nous nous interessons, dans ce travail, a limplementation delalgorithme du simplexe sur unite de calcul graphique. Ces unites de calcul dis-posent dune architecture particuliere qui permet