(cid:108)(cid:77)(cid:66)(cid:112)(cid:50)(cid:96)(cid:98)(cid:66)(cid:105)(cid:251) (cid:47)(cid:50) (cid:97)(cid:105)(cid:96)(cid:28)(cid:98)(cid:35)(cid:81)(cid:109)(cid:96)(cid:59) (cid:250)(cid:43)(cid:81)(cid:72)(cid:50) (cid:46)(cid:81)(cid:43)(cid:105)(cid:81)(cid:96)(cid:28)(cid:72)(cid:50) (cid:74)(cid:28)(cid:105)(cid:63)(cid:251)(cid:75)(cid:28)(cid:105)(cid:66)(cid:91)(cid:109)(cid:50)(cid:98)(cid:45) (cid:97)(cid:43)(cid:66)(cid:50)(cid:77)(cid:43)(cid:50)(cid:98) (cid:47)(cid:50) (cid:72)(cid:502)(cid:65)(cid:77)(cid:55)(cid:81)(cid:96)(cid:75)(cid:28)(cid:105)(cid:66)(cid:81)(cid:77) (cid:50)(cid:105) (cid:47)(cid:50) (cid:72)(cid:502)(cid:65)(cid:77)(cid:59)(cid:251)(cid:77)(cid:66)(cid:50)(cid:109)(cid:96) (cid:71)(cid:28)(cid:35)(cid:81)(cid:96)(cid:28)(cid:105)(cid:81)(cid:66)(cid:96)(cid:50) (cid:47)(cid:50)(cid:98) (cid:98)(cid:43)(cid:66)(cid:50)(cid:77)(cid:43)(cid:50)(cid:98) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:77)(cid:59)(cid:251)(cid:77)(cid:66)(cid:50)(cid:109)(cid:96)(cid:45) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:77)(cid:55)(cid:81)(cid:96)(cid:75)(cid:28)(cid:105)(cid:66)(cid:91)(cid:109)(cid:50) (cid:50)(cid:105) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:75)(cid:28)(cid:59)(cid:50)(cid:96)(cid:66)(cid:50) (cid:85)(cid:65)(cid:42)(cid:109)(cid:35)(cid:50)(cid:86) (cid:104)(cid:62)(cid:276)(cid:97)(cid:49) (cid:84)(cid:96)(cid:251)(cid:98)(cid:50)(cid:77)(cid:105)(cid:251)(cid:50) (cid:84)(cid:28)(cid:96) (cid:44) (cid:27)(cid:96)(cid:28)(cid:112)(cid:66)(cid:77)(cid:47) (cid:97)(cid:108)(cid:69)(cid:108)(cid:74)(cid:27)(cid:95)(cid:27)(cid:76) (cid:95)(cid:27)(cid:67)(cid:27)(cid:74) (cid:97)(cid:81)(cid:109)(cid:105)(cid:50)(cid:77)(cid:109)(cid:50) (cid:72)(cid:50) (cid:44) (cid:121)(cid:56) (cid:76)(cid:81)(cid:112)(cid:50)(cid:75)(cid:35)(cid:96)(cid:50) (cid:107)(cid:121)(cid:82)(cid:56) (cid:84)(cid:81)(cid:109)(cid:96) (cid:81)(cid:35)(cid:105)(cid:50)(cid:77)(cid:66)(cid:96) (cid:72)(cid:50) (cid:59)(cid:96)(cid:28)(cid:47)(cid:50) (cid:47)(cid:50) (cid:44) (cid:46)(cid:81)(cid:43)(cid:105)(cid:50)(cid:109)(cid:96) (cid:47)(cid:50) (cid:72)(cid:502)(cid:108)(cid:77)(cid:66)(cid:112)(cid:50)(cid:96)(cid:98)(cid:66)(cid:105)(cid:251) (cid:47)(cid:50) (cid:97)(cid:105)(cid:96)(cid:28)(cid:98)(cid:35)(cid:81)(cid:109)(cid:96)(cid:59) (cid:47)(cid:66)(cid:98)(cid:43)(cid:66)(cid:84)(cid:72)(cid:66)(cid:77)(cid:50)(cid:102)(cid:98)(cid:84)(cid:251)(cid:43)(cid:66)(cid:28)(cid:72)(cid:66)(cid:105)(cid:251) (cid:44) (cid:65)(cid:77)(cid:55)(cid:81)(cid:96)(cid:75)(cid:28)(cid:105)(cid:66)(cid:91)(cid:109)(cid:50) (cid:34)(cid:50)(cid:118)(cid:81)(cid:77)(cid:47) (cid:105)(cid:63)(cid:50) (cid:95)(cid:50)(cid:28)(cid:72)(cid:75) (cid:81)(cid:55) (cid:105)(cid:63)(cid:50) (cid:83)(cid:81)(cid:72)(cid:118)(cid:63)(cid:50)(cid:47)(cid:96)(cid:28)(cid:72) (cid:74)(cid:81)(cid:47)(cid:50)(cid:72)(cid:44) (cid:42)(cid:81)(cid:75)(cid:35)(cid:66)(cid:77)(cid:66)(cid:77)(cid:59) (cid:97)(cid:84)(cid:50)(cid:43)(cid:109)(cid:72)(cid:28)(cid:105)(cid:66)(cid:112)(cid:50) (cid:83)(cid:96)(cid:81)(cid:59)(cid:96)(cid:28)(cid:75) (cid:83)(cid:28)(cid:96)(cid:28)(cid:72)(cid:72)(cid:50)(cid:72)(cid:66)(cid:120)(cid:28)(cid:105)(cid:66)(cid:81)(cid:77) (cid:114)(cid:66)(cid:105)(cid:63) (cid:83)(cid:81)(cid:72)(cid:118)(cid:63)(cid:50)(cid:47)(cid:96)(cid:28)(cid:72) (cid:42)(cid:81)(cid:75)(cid:84)(cid:66)(cid:72)(cid:28)(cid:105)(cid:66)(cid:81)(cid:77) (cid:104)(cid:63)(cid:277)(cid:98)(cid:50) (cid:47)(cid:66)(cid:96)(cid:66)(cid:59)(cid:251)(cid:50) (cid:84)(cid:28)(cid:96) (cid:44) (cid:74)(cid:88) (cid:83)(cid:63)(cid:66)(cid:72)(cid:66)(cid:84)(cid:84)(cid:50) (cid:42)(cid:71)(cid:27)(cid:108)(cid:97)(cid:97) (cid:83)(cid:96)(cid:81)(cid:55)(cid:50)(cid:98)(cid:98)(cid:50)(cid:109)(cid:96)(cid:45) (cid:108)(cid:77)(cid:66)(cid:112)(cid:50)(cid:96)(cid:98)(cid:66)(cid:105)(cid:251) (cid:47)(cid:50) (cid:97)(cid:105)(cid:96)(cid:28)(cid:98)(cid:35)(cid:81)(cid:109)(cid:96)(cid:59) (cid:95)(cid:28)(cid:84)(cid:84)(cid:81)(cid:96)(cid:105)(cid:50)(cid:109)(cid:96)(cid:98) (cid:44) (cid:74)(cid:88) (cid:83)(cid:88) (cid:97)(cid:28)(cid:47)(cid:28)(cid:118)(cid:28)(cid:84)(cid:84)(cid:28)(cid:77) (cid:83)(cid:96)(cid:81)(cid:55)(cid:50)(cid:98)(cid:98)(cid:81)(cid:96)(cid:45) (cid:80)(cid:63)(cid:66)(cid:81) (cid:97)(cid:105)(cid:28)(cid:105)(cid:50) (cid:108)(cid:77)(cid:66)(cid:112)(cid:50)(cid:96)(cid:98)(cid:66)(cid:105)(cid:118)(cid:45) (cid:108)(cid:97)(cid:27) (cid:46)(cid:66)(cid:96)(cid:50)(cid:43)(cid:105)(cid:50)(cid:109)(cid:96) (cid:47)(cid:50) (cid:95)(cid:50)(cid:43)(cid:63)(cid:50)(cid:96)(cid:43)(cid:63)(cid:50) (cid:65)(cid:77)(cid:96)(cid:66)(cid:28)(cid:45) (cid:250)(cid:91)(cid:109)(cid:66)(cid:84)(cid:50) (cid:27)(cid:72)(cid:55)(cid:45) (cid:74)(cid:88) (cid:49)(cid:96)(cid:112)(cid:50)(cid:77) (cid:95)(cid:80)(cid:62)(cid:80)(cid:108) (cid:95)(cid:50)(cid:77)(cid:77)(cid:50)(cid:98)(cid:45) (cid:54)(cid:96)(cid:28)(cid:77)(cid:43)(cid:50) (cid:49)(cid:116)(cid:28)(cid:75)(cid:66)(cid:77)(cid:28)(cid:105)(cid:50)(cid:109)(cid:96)(cid:98) (cid:44) (cid:46)(cid:66)(cid:96)(cid:50)(cid:43)(cid:105)(cid:50)(cid:109)(cid:96) (cid:47)(cid:50) (cid:95)(cid:50)(cid:43)(cid:63)(cid:50)(cid:96)(cid:43)(cid:63)(cid:50) (cid:66)(cid:77)(cid:55)(cid:81)(cid:96)(cid:75)(cid:28)(cid:105)(cid:66)(cid:91)(cid:109)(cid:50) (cid:28)(cid:109) (cid:42)(cid:49)(cid:27)(cid:45) (cid:74)(cid:88) (cid:62)(cid:50)(cid:77)(cid:96)(cid:66) (cid:83)(cid:66)(cid:50)(cid:96)(cid:96)(cid:50) (cid:42)(cid:62)(cid:27)(cid:95)(cid:71)(cid:49)(cid:97) (cid:58)(cid:96)(cid:50)(cid:77)(cid:81)(cid:35)(cid:72)(cid:50)(cid:45) (cid:54)(cid:96)(cid:28)(cid:77)(cid:43)(cid:50) (cid:71)(cid:28)(cid:35)(cid:81)(cid:96)(cid:28)(cid:105)(cid:81)(cid:66)(cid:96)(cid:50) (cid:47)(cid:50)(cid:98) (cid:98)(cid:43)(cid:66)(cid:50)(cid:77)(cid:43)(cid:50)(cid:98) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:77)(cid:59)(cid:251)(cid:77)(cid:66)(cid:50)(cid:109)(cid:96)(cid:45) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:77)(cid:55)(cid:81)(cid:96)(cid:75)(cid:28)(cid:105)(cid:66)(cid:91)(cid:109)(cid:50) (cid:50)(cid:105) (cid:47)(cid:50) (cid:72)(cid:502)(cid:66)(cid:75)(cid:28)(cid:59)(cid:50)(cid:96)(cid:66)(cid:50) (cid:85)(cid:65)(cid:42)(cid:109)(cid:35)(cid:50)(cid:86) (cid:108)(cid:74)(cid:95) (cid:100)(cid:106)(cid:56)(cid:100) This page intentionally left blank APOLLO Automatic Speculative Polyhedral Loop Optimizer This page intentionally left blank Aravind SUKUMARAN RAJAM © all rights reserved, 2015 This page intentionally left blank This work is dedicated to my parents and Little God. Thanks for always being there for me, supporting and guiding me through each and every step of my life. This page intentionally left blank Contents 0 Résumé en Français 1 0.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0.2 Définition du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0.3 Solutions proposées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 0.4 Présentation générale de l’architecture d’Apollo . . . . . . . . . . . . . . 5 0.4.1 Exécution par tranches . . . . . . . . . . . . . . . . . . . . . . . . 7 0.5 Le module statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 0.5.1 Analyse statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 0.5.2 Itérateurs virtuels . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 0.5.3 Le versioning de code et les squelettes . . . . . . . . . . . . . . . . 8 0.6 Le module dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 0.6.1 Profilage de code . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 0.6.2 Calcul du polyèdre de dépendances . . . . . . . . . . . . . . . . . 10 0.6.3 Sélection de l’ordonnancement et du squelette . . . . . . . . . . . 11 0.6.4 JIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 0.6.5 Sauvegarde et point d’exécution sûr . . . . . . . . . . . . . . . . . 11 0.6.6 Parallélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 0.6.7 Vérification dynamique . . . . . . . . . . . . . . . . . . . . . . . . 12 0.6.8 Retour arrière (rollback) . . . . . . . . . . . . . . . . . . . . . . . 12 0.6.9 Terminaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 0.7 Resultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 0.8 Apollo non-linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 0.8.1 Construction du polyèdre de dépendances . . . . . . . . . . . . . . 16 0.9 La modélisation des accès mémoire non-linéaires . . . . . . . . . . . . . . 17 0.9.1 La modélisation des bornes de boucles non-linéaires . . . . . . . . 18 0.9.2 Sauvegarde et point d’exécution sûr . . . . . . . . . . . . . . . . . 20 0.9.3 Vérification dynamique . . . . . . . . . . . . . . . . . . . . . . . . 21 0.10Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 0.11Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1 Introduction 25 1.1 Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 IX 1.2 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.3 Proposed solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2 The Polyhedral Model 31 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2 Mathematical background . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3 Static Control Parts (SCoP) . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.4 DCoP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.5 Loop nest modelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5.1 Iteration space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5.2 Access functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.6 Dependence analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.6.1 Distance vector representation . . . . . . . . . . . . . . . . . . . . 41 2.6.2 Dependence polyhedron . . . . . . . . . . . . . . . . . . . . . . . . 43 2.6.3 Loop scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.6.4 Loop Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.7 Polyhedral Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.7.1 Math libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.7.2 Code analyzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.7.3 DSL Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.7.4 Compilers and related . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.8 Limitations of the polyhedral model . . . . . . . . . . . . . . . . . . . . 56 3 Thread Level Speculation 61 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.1.1 Importance of thread level speculation . . . . . . . . . . . . . . . . 62 3.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.3 Applications of TLS system . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.4 State of the art TLS systems . . . . . . . . . . . . . . . . . . . . . . . . 68 3.4.1 Hardware based . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.4.2 Software based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.5 Limitations of existing TLS systems . . . . . . . . . . . . . . . . . . . . 76 3.5.1 Missed parallelization opportunities . . . . . . . . . . . . . . . . . 76 3.5.2 Data locality is not considered . . . . . . . . . . . . . . . . . . . . 77 3.5.3 Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.5.4 Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 X
Description: