Kompania Intel publikoi kompilatorin ISPC 1.25 (Implicit SPMD Program Compiler), i cili është i dedikuar për ndërtimin e kodit në gjuhën C me zgjerime të programimit paralel SPMD (Single Program, Multiple Data), që lejojnë ekzekutimin paralel të disa kopjeve të një programi me grupe të ndryshme të të dhënave hyrëse. Kodi i projektit është shkruar në gjuhën C++ dhe shpërndahet nën licencën BSD. Mbështetet puna në Linux, Windows, macOS dhe FreeBSD.
Programet C me zgjerime SPMD kompilohet pĂ«r tĂ« funksionuar nĂ« blloqet llogaritĂ«se SIMD, qĂ« ofrohen nga CPU dhe GPU, çka lejon pĂ«rdorimin e mekanizmave tĂ« vektorizimit SIMD pa optimizime tĂ« nivelit tĂ« ulĂ«t dhe aplikimin e qartĂ« tĂ« instrukcioneve SIMD nĂ« kod. PĂ«r tĂ« shkruar funksione tĂ« ndara, pĂ«rdoret sintaksa dhe idiomat e njohura tĂ« gjuhĂ«s C â funksionet SPMD ndĂ«rveprojnĂ« drejtpĂ«rdrejt me funksionet dhe strukturat e shkruara nĂ« C/C++. PĂ«r debugimin e programeve mund tĂ« pĂ«rdoren debugerĂ« ekzistues.
Si backend për gjenerimin e kodit dhe optimizimin në ISPC përdoret infrastruktura LLVM. Mbështeten instrukcionet vektoriale x86 (SSE2, SSE4, AVX, AVX2, AVX512) dhe ARM (NEON), si dhe transferimi i llogaritjeve në GPU (Intel Gen9 dhe Xe). Në arktitekturat me blloqe vektoriale SSE, të cilat trajtojnë 4 elemente njëherësh, përdorimi i ISPC mund të arrijë një shpejtësi ekzekutimi të programit deri në 3 ose më shumë herë, ndërsa në arkitekturat me blloqe vektoriale AVX, të cilat trajtojnë 8 elemente njëherësh, shpejtësia mund të arrijë 5-6 herë. Në të njëjtën kohë, përveç madhësisë së bllokut vektorial, shkallëzimi gjithashtu sigurohet përmes ekzekutimit në bërthama të ndryshme procesori.
Risi kryesore të shtuara në versionin ISPC 1.25:
- Në shpalljen e variablave dhe funksioneve, lejohet përcaktimi i atributeve 'noescape', 'address_space(N)', 'external_only' dhe 'unmangled' përmes fjalës kyçe '__attribute__'.
- E shtuar mbështetje për përdorimin e shablonëve për shpalljen e vektorëve dhe arrave.
- Siguruar shfaqjen e mesazheve të gabimeve kur përdoren tipe të papajtueshëm në shpalljen e variablave.
- Përmirësuar gjenerimi i kodit për ciklet foreach. Rritur eficiencën e gjenerimit të kodit në bazë të grupeve të instrukcioneve AVX2 dhe AVX512.
- Siguruar kompilimin e parashikueshëm të bibliotekës standarte (stdlib), e cila ekzekutohet në fazën e ndërtimit të ISPC, duhekurse gjatë kompilimit të projekteve. Ky ndryshim ka lejuar një reduktim të kohës së ndërtimit nga 5-60%, në varësi të madhësisë së kodit të ndërtuar.
- Shtuar qëllime të reja ndërtimi: xe2hpg-x16 dhe xe2hpg-x32 për GPU Intel Xe2 Battlemage, xe2lpg-x16 dhe xe2lpg-x32 për GPU Intel X Xe2 Lunar Lake. Shtuar gjithashtu definicionet arrowlake, lunarlake dhe graniterapids për CPU Intel ArrowLake, LunarLake dhe GraniteRapids.
- Deklaruar si të vjetruara qëllimet e ndërtimit avx512knl-x16, gen9-x8 dhe gen9-x16.
- Në bibliotekën standarde për të dhëna me tipe float dhe double janë shtuar operacione atomike të mbledhjes, zbritjes, gjetjes së minimumit dhe maksimumit.
- Shtuar opsioni i komandës së linjës '-ffunction-sections' për të gjeneruar çdo funksion në një seksion të veçantë.
- Ofruar mundësia e ndërtimit të ISPC në dy mënyra 'slim' dhe 'composite' (në mënyrë të paracaktuar). Mënyra e dytë dallon nga integrimi i bibliotekave stdlib dhe binutils në një skedar ekzekutiv të vetëm, në vend që t'i ofrojë ato në formë skedari të veçantë.
Burimi: opennet.ru
