Befintliga vektoriseringstekniker är ineffektiva för slingor som uppvisar liten loop-nivå parallellism men vissa begränsade superword-nivå parallellism (SLP). Vi visar att en effektiv vektorisering av sådana loopar kräver partiella vektoroperationer som ska utföras korrekt och effektivt, där graden av partiell SIMD-parallalism är mindre än SIMD-datapatterns bredd. Vi presenterar en enkel men effektiv SLP-kompilatorteknik som kallas PAVER (PArtial VEctorizeR), formulerad och implementerad i LLVM som en generalisering av den traditionella SLP-algoritmen, för att optimera sådana delvis vektoriserbara loopar. Nyckelidén är att maximera SIMD-utnyttjandet genom att bredda vektorinstruktionerna som används samtidigt som man minimerar de overheads som orsakas av minnesåtkomst, packning/uppackning och/eller maskering, utan att införa nya minnesfel eller nya numeriska undantag. För en uppsättning av 9 C/C++/Fortran-tillämpningar med partiell SIMD-parallalism uppnår PAVER betydligt bättre kernel- och helprogramhastigheter än LLVM på både Intels AVX och ARM:s NEON.
I REF införs för att säkerställa ett korrekt och effektivt genomförande av partiella vektoroperationer på SIMD-förlängningar.
A Compiler Approach for Exploiting Partial SIMD Parallelism
{'venue': 'TACO', 'journal': None, 'mag_field_of_study': ['Computer Science']}