Abstract-Just-in-Time (JIT) kompilatorteknik erbjuder portabilitet samtidigt som den underlättar mål- och kontextspecifik specialisering. Single-Instruction-Multiple-Data (SIMD) hårdvara är allestädes närvarande och markant olika, men kan vara svårt för JIT-kompilatorer att effektivt rikta på grund av resurs- och budgetbegränsningar. Vi presenterar vår design för en synergistisk auto-vektoriserande sammanställningsschema. Systemet består av ett aggressivt, generiskt offline-steg i kombination med ett lätt, målspecifikt online-steg. Vår metod utnyttjar de optimerade mellanliggande resultat som tillhandahålls av det första steget i olika SIMD-arkitekturer från olika leverantörer, med olika egenskaper som sträcker sig från olika vektorstorlekar, minnesjustering och åtkomstbegränsningar, till speciella beräkningsmässiga idiomer. Vi visar effektiviteten i vår design med hjälp av en uppsättning kärnor som utövar den innersta loopen, ytterloopen, samt rak kod vektorisering, alla automatiskt extraheras av den gemensamma offline sammanställning skede. Detta resulterar i prestanda jämförbar med den som tillhandahålls av specialiserade monolitiska offline kompilatorer. Vårt ramverk genomförs med hjälp av verktyg och standarder med öppen källkod, vilket främjar driftskompatibilitet och utvidgningsförmåga. Generera kod för SIMD hårdvara har traditionellt förlitat sig på målspecifik manuell optimering, med hjälp av en uppsjö av inneboende funktioner eller aggressiva offline kompilator optimeringar. Båda strategierna lider av en brist på portabilitet en smärtsam brist med tanke på mångfalden och den ständigt föränderliga karaktären hos SIMD-arkitekturer. Å andra sidan blir virtuella maskiner allmänt förekommande, vilket ger portabilitet samtidigt som de underliggande fysiska maskinerna hålls gömda från programmerare och offline kompilatorer. Detta skapar ett problem för sofistikerade kodoptimeringar som beror på detaljerna i den underliggande maskinen. Just-in-time sammanställning teknik håller löftet om att effektivt stödja olika arkitekturer, men är vanligtvis begränsas av mängden tillgängliga resurser. Vi föreslår en sammansatt sammanställning teknik, som beskrivs i Figur 1, kan inte bara rikta olika SIMD hårdvara, men gör det effektivt. Detta uppnås genom att utnyttja och komplettera traditionella offlinekompilatorer, vilket ger en prestandaportabel och interoperabel lösning. Vårt huvudmål är att underlätta bärbar vektorisering mellan olika SIMD-mål i olika vektorstorlekar. Vårt tillvägagångssätt är baserat på begreppet split-sammanställning [6], där källkod genomgår två (eller fler) separata men ändå synergistiska sammanställning stadier innan slutligen översättas till maskinkod. I vår design är optimeringarna noggrant samordnade och fördelade över dessa sammanställningssteg. Vårt split vektoriseringsramverk uppnår samtidigt följande fyra delmål: prestanda konkurrenskraftig med infödd sammanställning, försumbar JIT sammanställningstid, låg overhead för skalära utförande, och bytekod komprimering. Vårt arbete bidrar till följande: 1) Utformning av en split vektorisering ram som kan automatiskt vektorisera skalär källkod, som omfattar toppmodern vektorisering kapacitet, inklusive avancerade åtkomster, yttre slingor, samt inom slingor eller straight-line-kod. 2) En öppen, interoperabel ram för att mixa-och-matcha offline och online sammanställningsverktyg, utnyttja fördelarna med både i samband med automatisk vektorisering. 3) En studie av hur split-kompilering vektorisering jämförs med monolitisk, fast-mål, helt offline sammanställning, på en mängd olika kärnor utövar olika SIMD-funktioner och utvärderas på en rad mål med olika vektorstorlekar och begränsningar minne anpassning. Resten av detta dokument är organiserat enligt följande: Avsnitt II ger relevant bakgrund om vektorisering. Vi presenterar sedan split-vektorisering och relaterade designval i Avsnitt III. I Avsnitt IV beskriver vi vår experimentella miljö och sedan utvärderar vi våra experimentella resultat i Avsnitt V. I Avsnitt VI jämför vi vårt arbete med tidigare konst och presenterar våra slutsatser i Avsnitt VII. Målet med vektorisering är att ersätta flera (dynamiska) förekomster av samma skalära instruktion fungerar upprepade gånger på olika dataelement med en enda vektor Instruktion som 151 978-1-61284-357-5/11/$26.00 ©2011 IEEE
Det utvidgades vidare till ett system som utnyttjar de optimerade mellanliggande resultat som tillhandahålls av det första steget mellan olika SIMD-arkitekturer från olika leverantörer, med olika egenskaper som sträcker sig från olika vektorstorlekar, minnesjustering och åtkomstbegränsningar, till särskilda beräkningsmässiga idiomer.
Vapor SIMD: Auto-vectorize once, run everywhere
{'venue': 'International Symposium on Code Generation and Optimization (CGO 2011)', 'journal': 'International Symposium on Code Generation and Optimization (CGO 2011)', 'mag_field_of_study': ['Computer Science']}