Intel'i ettevõte on välja andnud ISPC 1.25 (Implicit SPMD Program Compiler) kompilaatori, mis on mõeldud C keeles SPMD (Single Program, Multiple Data) paralleelse programmeerimise laiendustega koodi koostamiseks, mis võimaldavad sama programmi mitme eksemplari paralleelset täitmist erinevate sisendite komplektidega. Projekti kood on kirjutatud C++ keeles ja jagatakse BSD litsentsi alusel. Toetatakse töötamist Linuxis, Windowsis, macOS-is ja FreeBSD-s.
C-programmid, millel on SPMD laiendused, kompileeritakse SIMD arvutusplokkide jaoks, mida pakuvad CPU ja GPU, mis võimaldab kasutada SIMD vektorisüsteeme ilma madala taseme optimeerimisteta ja SIMD juhiste otsest rakendamist koodis. Paralleelseid funktsioone kirjutades kasutatakse tuttavat C keele süntaksit ja idiome — SPMD-funktsioonid suhtlevad otse C/C++ keeles kirjutatud funktsioonide ja struktuuridega. Programmide silumiseks võivad kasutada olemasolevaid silumisseadeid.
ISPC koodi genereerimise ja optimeerimise taustal kasutatakse LLVM infrastruktuuri. Toetatakse x86 (SSE2, SSE4, AVX, AVX2, AVX512) ja ARM (NEON) vektorinstruktsioone, samuti GPU (Intel Gen9 ja Xe) arvutuste väljastamist. SSE vektorplokkide arhitektuuridel, mis töötlevad 4 elementi korraga, võimaldab ISPC saavutada programmide täitmise kiirus kuni 3 korda või enam, samas kui AVX vektorplokkide arhitektuuridel, mis töötlevad 8 elementi korraga, võib kiirus tõusta 5-6 korda. Lisaks vektorploki suurusele tagab skaleeritavuse ka erinevate protsessorituumade kasutamine.
ISPC 1.25 versioonis lisatud peamised uuendused:
- Muuttüüpide ja funktsioonide deklaratsioonide puhul on nüüd lubatud atribuutidega 'noescape', 'address_space(N)', 'external_only' ja 'unmangled' määramine, kasutades võtmesõna '__attribute__'.
- Lisatud on mallide kasutamise tugi vektorite ja massiivide deklareerimisel.
- Tagatakse veateadete väljastamine, kui muutujaid deklareeritakse kokkusobimatute tüüpidega.
- Parandatud on koodi genereerimist foreach tsüklite jaoks. Suurendatud on koodi genereerimise efektiivsust AVX2 ja AVX512 instruktsioonikogude alusel.
- Tagatud on standardraamatukogu (stdlib) ennetav kompileerimine, mis toimub ISPC kogumise etapis, mitte projektide kompileerimise ajal. See muudatus on vähendanud kogumisaega 5-60%, sõltuvalt kompileeritava koodi suurusest.
- Lisatud on uued kogumise sihid: xe2hpg-x16 ja xe2hpg-x32 Intel Xe2 Battlemage GPU jaoks, xe2lpg-x16 ja xe2lpg-x32 Intel Xe2 Lunar Lake GPU jaoks. Samuti on lisatud määratlused arrowlake, lunarlake ja graniterapids Intel ArrowLake, LunarLake ja GraniteRapids CPU jaoks.
- Austatud on vananenud kogumise sihid avx512knl-x16, gen9-x8 ja gen9-x16.
- Standardraamatukogule on lisatud atomaarseadused, mis käsitlevad float ja double tüüpe: liitmine, lahutamine, miinimumi ja maksimumi leidmine.
- Lisatud on käsurea valik «-ffunction-sections», et genereerida iga funktsioon eraldi sektsioonis.
- ISPC kogumist on võimalik teha kahes režiimis: «slim» ja «composite» (vaikimisi). Teine režiim eristub stdlib ja binutils raamatukogude integreerimisega ühte täidetavasse faili, mitte nende pakkumisega eraldi failidena.
Allikas: opennet.ru
