Automatic SIMD Vectorization
Total Page:16
File Type:pdf, Size:1020Kb
Die approbierte Originalversion dieser Dissertation ist an der Hauptbibliothek der Technischen Universität Wien aufgestellt (http://www.ub.tuwien.ac.at). The approved original version of this thesis is available at the main library of the Vienna University of Technology (http://www.ub.tuwien.ac.at/englweb/). TECHNISCHE UNIVERSITÄT WIEN ru VIENNA UNIVERSITY OF VIENNA TECHNOLOGY Dissertation Automatic SIMD Vectorization ausgeführt zum Zwecke der Erlangung des akademischen Grades eines Doktors der technischen Wissenschaften unter der Leitung von Ao. Univ.-Prof. Dipl.-Ing. Dr. techn. Christoph W. Überhuber E101 - Institut für Analysis und Scientific Computing eingereicht an der Technischen Universität Wien Fakultät für Informatik von Dipl.-Ing. Jürgen Lorenz Matrikelnummer 9525135 Zenogasse 3/4 1120 Wien Wien, am 16. März 2004 Kurzfassung Automatisch generierter numerischer Quellcode kann von handelsüblichen Compilern nicht optimal verarbeitet werden. Algorithmische Strukturen werden nur unzureichend erkannt und dementsprechend schlecht ausgenutzt. Es werden daher spezialisierte Com- pilertechniken benötigt um zu einem zufriedenstellend effizienten Zielcode zu gelangen. Die immer weiter fortschreitende Zunahme der Bedeutung von Multimedia- Anwendungen hat zur Entwicklung von SIMD-Befehlssatzerweiterungen auf allen gängigen Mikroprozessoren geführt. Die konventionellen Vektorisierungsmethoden der handelsüblichen Compiler sind jedoch nicht in der Lage, Parallelismus in einem längeren numerischen Straight-Line-Code zu erkennen. In dieser Dissertation werden Techniken, die speziell die Übersetzung numerischer Rou- tinen zum Ziel haben, vorgestellt. Die automatische 2-fach-SIMD-Vektorisierung ent- deckt den in einer Routine vorhandenen SIMD-Parallelismus und garantiert einen zu- friedenstellenden Grad der Nutzung von SIMD-Befehlen. Die Gucklock-Optimierung ersetzt bestimmte Kombinationen von Instruktionen durch effizientere. Für den letz- ten Teil der Übersetzung werden synthèse-spefizische Techniken eingesetzt, die deutlich zur Steigerung der Qualität des übersetzten Programmcodes - über das Maß han- delsüblicher Übersetzer hinaus - beitragen. Die in dieser Dissertation präsentierten Konzepte stellen die Grundlage des Special Purpose Compilers MAP [70, 71, 72, 73, 75] dar, der speziell für die effiziente Vekto- risierung großer numerischer Straight-Line-Codes entwickelt wurde. MAP unterstützt die führenden automatischen Performance-Tuning-Softwareprodukte: FFTW1, SPIRAL2 und ATLAS3. Damit werden die wichtigsten Algorithmen der numerischen linearen Al- gebra und der digitalen Signalverarbeitung abgedeckt. Zu den praktischen Ergebnissen dieser Dissertation zählen: (i) die schnellsten derzeit verfügbaren FFT-Codes für AMD Athlon basierte Systeme; (ii) automatisch erzeug- te FFT-Codes für den Intel Pentium 4, die vergleichbare Leistung wie die schnellsten handoptimierten Codes liefern und {in) die schnellsten derzeit verfügbaren FFT-Codes für den IBM PowerPC 440 FP2 Prozessor, der im derzeit von IBM entwickelten Super- computer BlueGene/L Verwendung findet. Die experimentellen Resultate wurden durch Anwendung des MAP Special Purpose Compilers auf von FFTW (Frigo and Johnson [35]), SPIRAL (Moura et al. [88]) und ATLAS (Whaley et al. [115]) erzeugten Code erzielt. 1FFTW ist die Abkürzung von "Fastest Fourier Transform in the West" (schnellste Fourier- Transformation des Westens). 2SPIRAL ist die Abkürzung von "Signal Processing Algorithms Implementation Research for Adaptive Libraries" (Implementierungsforschung an Signalverarbeitungsalgorithmen für adap- tive Software). 3ATLAS ist die Abkürzung von "Automatically Tuned Linear Algebra Software" (automa- tisch angepasste Software für Probleme der Linearen Algebra). Summary General purpose compilers produce suboptimal object code when applied to automat- ically generated numerical source code. Moreover, general purpose compilers have natural limits in deducing and utilizing information about the structure of the imple- mented algorithms. Specialized compilation techniques, as introduced in this thesis, are needed to realize such structural transformations. Increasing focus on multimedia applications has resulted in the addition of short vector SIMD extensions to most existing general-purpose microprocessors. This added functionality comes primarily with the addition of short vector SIMD instructions. Un- fortunately, access to these instructions is limited to proprietary language extensions, in-line assembly, and library calls. Generally, it has been assumed that vector com- pilers provide the most promising means of exploiting multimedia instructions. But although vectorization technology is well understood, it is inherently complex and frag- ile. Conventional vectorizers are incapable of locating SIMD style parallelism within a basic block without introducing unacceptably large overhead. Without the adoption of SIMD extensions, 50% to 75% of a machine's possible performance is wasted, even in conjunction with state-of-the-art performance tuning software. Automatic exploitation of SIMD instructions therefore requires new compiler technology. This thesis presents techniques tailor-made for the compilation of numerical straight line code: (i) Automatic 2-way SIMD vectorization extracts SIMD parallelism out of numerical straight line code in a way that guarantees a satisfactory level of SIMD utilization, (ii) Peephole optimization rewrites the SIMD vectorized code in a do- main specific manner to further improve efficiency. (iii) Backend specific techniques are used for compiling the vectorized and optimized code, yielding object code whose performance is significantly better than the performance of code produced by general purpose compilers. The new compiler techniques presented in this thesis form the basis of the "MAP Vectorizer and Backend" [70, 71, 72, 73, 75], a special purpose compiler, which was designed especially for the efficient vectorization and backend optimization of large basic blocks of numerical straight line code. MAP is currently applicable to the state- of-the-art performance tuning systems FFTW4, SPIRAL5 and ATLAS6. Thus, MAP is covering a broad range of highly important algorithms in the fields of digital signal processing and numerical linear algebra. The experimental results were obtained using the MAP vectorizer and backend in connection with FFTW [35], SPIRAL [88] and ATLAS [115]. 4FFTW is the abbreviation of "Fastest Fourier Transform in the West". 5SPIRAL is the abbreviation of "Signal Processing Algorithms Implementation Research for Adaptive Libraries". 6ATLAS is the abbreviation of "Automatically Tuned Linear Algebra Software ". Contents Kurzfassung / Summary 2 Introduction 8 1 Hardware vs. Algorithms 14 1.1 Current Hardware Trends 14 1.2 Performance Implications 16 1.3 Automatic Performance Tuning 21 2 Standard Hardware 27 2.1 Processors • • • 27 2.2 Advanced Architectural Features 31 2.3 The Memory Hierarchy 33 3 Short Vector Hardware 36 3.1 Short Vector Extensions 37 3.2 Intel's Streaming SIMD Extensions 42 3.3 AMD's 3DNow! 47 3.4 The IBM BlueGene/L Supercomputer 48 3.5 Vector Computers vs. Short Vector SIMD 48 4 Fast Algorithms for Linear Transforms 52 4.1 Discrete Linear Transforms . 52 5 Matrix Multiplication 58 5.1 The Problem Setting 58 6 A Portable SIMD API 61 6.1 Definition of the Portable SIMD API 62 7 Automatic Vectorization of Straight-Line Code 67 7.1 Vectorization of Straight Line Code 68 7.2 The Vectorization Approach 68 7.3 Benefits of The MAP Vectorizer 69 7.4 Virtual Machine Models 70 7.5 The Vectorization Engine 75 7.6 Pairing Rules 83 CONTENTS 5 8 Rewriting and Optimization 93 8.1 Optimization Goals 94 8.2 Peephole Optimization 94 8.3 Transformation Rules 96 8.4 The Scheduler 101 9 Backend Techniques for Straight-Line Code 107 9.1 Optimization Techniques Used in MAP 107 9.2 Backend Optimization Goals 108 9.3 One Time Optimizations 109 9.4 Feedback Driven Optimizations 114 10 Experimental Results 118 10.1 Experimental Layout 118 10.2 BlueGene/L Experiments 119 10.3 Experiments on IA-32 Architectures 121 Conclusion and Outlook 129 A The Kronecker Product Formalism 130 A.I Notation 131 A.2 Extended Subvector Operations 134 A.3 Kronecker Products 134 A.4 Stride Permutations 138 A.5 Twiddle Factors and Diagonal Matrices 142 B Compiler Techniques 144 B.I Register Allocation and Memory Accesses 144 B.2 Instruction Scheduling 145 C Performance Assessment 147 C.I Short Vector Performance Measures 149 C.2 Empirical Performance Assessment 149 D Short Vector Instruction Set 157 D.I The Intel Streaming SIMD Extensions 2 157 E The Portable SIMD API 161 E.I Intel Streaming SIMD Extensions 2 161 E.2 BG/L Double FPU SIMD Extensions 163 F SPIRAL Example Code 167 F.I Scalar C Code 167 F.2 Short Vector Code 170 6 CONTENTS G FFTW Example Code 175 G.I Scalar C Code 175 G.2 Short Vector Code 176 H ATLAS Example Code 179 H.I Scalar C Code 179 H.2 Short Vector Code 181 Table of Abbreviations 186 Bibliography 187 Curriculum Vitae 197 Acknowledgements First of all, I would like to express my sincere gratitude to my Ph. D. advisor Christoph Ueberhuber, who gave me the opportunity of working in the ASCOT team operating in the interesting research field of scientific computing. I espe- cially want to express my gratitude for leading my first steps in the area of high performance computing and for giving me the possibility to work at the forefront of scientific research. He supported my efforts with great dedication, not only during the work on my thesis, but also