Kompania Intel publikoi kompjuterin ISPC 1.24 (Kompilatori i Programave Implicit SPMD), i cili siguron ndërtimin e kodit në gjuhën C me zgjerime për mbështetje të metodës së programimit paralel SPMD (Program i Vetëm, Shume Të Dhëna), ku disa instanca të një programi ekzekutohen paralelisht me grupe të ndryshme të dhënash 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.
Programi C me zgjerime SPMD kompilohet për ekzekutimin në blloqet llogaritëse SIMD, të ofruara nga CPU dhe GPU, duke lejuar angazhimin në programe të mekanizmave të vektorizimit SIMD pa optimizime të ulëta dhe përdorimin e drejtpërdrejtë të instrukcioneve SIMD në kod. Për të shkruar funksione të ndara përdoren sintaksa dhe idiomat e njohura të gjuhës C. Funksionet SPMD mund të integrohen me aplikacione në C/C++ dhe të ndërlidhen drejtpërdrejt me funksionet dhe strukturat e tyre. Për debugimin e programeve mund të përdoren debuguesit ekzistues.
Si një backend për gjenerimin e kodit dhe optimizimin përdoret infrastruktura LLVM. Mbështetet përdorimi i instrukcioneve vektoriale x86 (SSE2, SSE4, AVX, AVX2, AVX512) dhe ARM (NEON), si dhe transferimi i llogaritjeve në anën e GPU (Intel Gen9 dhe Xe). Në arkitekturat me blloqe vektorësh SSE, të cilat përpunojnë 4 elemente në një herë, përdorimi i ISPC lejon arritjen e përshpejtimit të ekzekutimit të programit në 3 ose më shumë herë, ndërsa në arkitekturat me blloqe vektorësh AVX, të cilat përpunojnë 8 elemente në një herë, përshpejtimi mund të arrijë nga 5-6 herë. Në këtë rast, përveç madhësisë së bllokut vektor, përmasimi arrin gjithashtu përmes ekzekutimit në bërthamat e ndryshme të procesorit.
Novitetet kryesore të shtuar në versionin ISPC 1.24:
- Shtuar mbështetje për parametra të pa-typuar në funksionet template. Tani mund të përdoren vlera të bashkuara të tërë dhe të listuara si parametra të template (me shenjën "uniform").
- Shtuar funksionet dot për tipet e nënshkruar dhe të pa-nënshkruar int8 dhe int16, ku përdoren instrukcione AVX-VNNI dhe AVX512-VNN.
- Shtuar përcaktime makros që përcaktojnë kufizimet dimensionale të numrave.
- Shtuar platforma të reja të targetuara: avx2vnni-i32x4, avx2vnni-i32x8, avx2vnni-i32x16 me mbështetje për instrukcionin AVX-VNNI, dhe avx512icl-x4, avx512icl-x8, avx512icl-x16, avx512icl-x32, avx512icl-x64 me mbështetje për instrukcionin AVX512-VNNI.
- Zgjidhur problemet me përdorimin e instrukcioneve vektorë të tepërta gjatë gjenerimit të kodit për GPU.
- Flamuri i komandĂ«s sĂ« linjĂ«s "âpic" Ă«shtĂ« pĂ«rputhur me flamurin "-fpic" nĂ« Clang dhe GCC, dhe flamuri "âPIC" Ă«shtĂ« pĂ«rputhur me "-fPIC".
Burimi: opennet.ru
