Kompania Intel publikoi kompilatorin ISPC 1.26 (Implicit SPMD Program Compiler), i cili është projektuar për të ndërtuar kodin në gjuhën C me zgjerime të programimit paralel SPMD (Single Program, Multiple Data), që lejojnë ekzekutimin paralel të disa egzemplarëve 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.
Novitetet kryesore të shtuar në versionin ISPC 1.26:
- Përmirësimi i mbështetjes për arkitekturën ARM:
- Sjellja e flagut «âarch=arm» Ă«shtĂ« ndryshuar, i cili tani Ă«shtĂ« i lidhur me arkitekturĂ«n ARMv8 (32-bit), ndryshe nga ARMv7 (pĂ«r ARMv8 nĂ« modalitetin 64-bit si dhe mĂ« herĂ«t duhet tĂ« pĂ«rdoret flagu «âarch=aarch64»).
- ĂshtĂ« ndĂ«rprerĂ« mbĂ«shtetja pĂ«r procesorĂ«t ARMv7 Cortex-a9 dhe Cortex-a15.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, si dhe pĂ«r procesorĂ«t e rinj ARM tĂ« Apple.
- Janë shtuar objektiva të rinj ndërtimi: neon-i16x16 dhe neon-i8x32.
- Shtuar mbështetje për operacionet në bazë të instrukcioneve vektoriale ARM SDOT dhe UDOT.
- Janë bërë optimizime, performanca për ARMv8 është rritur mesatarisht me 13%.
- ĂshtĂ« shtuar njĂ« lloj i ri objektivash ndĂ«rtimi â «generic», qĂ« ka lejuar optimizimin e arkitekturĂ«s sĂ« brendshme tĂ« kompilatorit dhe thjeshtimin e integrimit tĂ« objektivave tĂ« rinj tĂ« ndĂ«rtimit. Ideja Ă«shtĂ« tĂ« mbĂ«shteten objektivat bazĂ« pĂ«r mundĂ«sitĂ« specifike tĂ« harduerit, mbi tĂ« cilat lehtĂ«sisht mund tĂ« krijohen objektiva me optimizime tĂ« veçanta. MbĂ«shtetje pĂ«r arkitekturĂ«n ARM Ă«shtĂ« transferuar nĂ« objektivat generic.
- NĂ« gjeneratorin e kodit Ă«shtĂ« bĂ«rĂ« pĂ«rshtatje e shpĂ«rndarjes sĂ« cikleve dhe funksioneve pĂ«r tĂ« reduktuar madhĂ«sinĂ« e kodit pĂ«rfundimtar nĂ« modalitetin e optimizimit «-O1». ĂshtĂ« pĂ«rmirĂ«suar gjenerimi i kodit pĂ«r funksionet e integruara count_leading_zeros dhe count_trailing_zeros, si dhe kur kthehen struktura nga funksionet dhe kur ruhet ose ngarkohet tĂ« dhĂ«na me llojet int8/int16.
- ĂshtĂ« zgjeruar mbĂ«shtetje pĂ«r funksionet e integruara (intrinsics) LLVM, tĂ« cilat aktivizohen me specifikimin e flagut «âenable-llvm-intrinsics».
- Instrumentari LLVM Ă«shtĂ« pĂ«rditĂ«suar nĂ« versionin 18.1.8 me patches. ĂshtĂ« shtuar makrosi pĂ«r tĂ« pĂ«rcaktuar versionin e LLVM tĂ« pĂ«rdorur nĂ« ISPC.
- ĂshtĂ« lejuar pĂ«rdorimi i atributit «__attribute__((deprecated))» pĂ«r funksionet pĂ«r tĂ« dhĂ«nĂ« paralajmĂ«rimin gjatĂ« thirrjes sĂ« funksionit.
- ĂshtĂ« hequr objektivi i ndĂ«rtimit avx512knl-x16 (KNL).
- ĂshtĂ« shtuar opsioni «âdarwin-version-min» pĂ«r tĂ« pĂ«rcaktuar versionin minimal tĂ« mbĂ«shtetur tĂ« platformĂ«s objektive pĂ«r macOS dhe iOS.
Burimi: opennet.ru
