Intel je objavil ISPC 1.26 (Implicit SPMD Program Compiler), zasnovan za sestavljanje kode C z razširitvami vzporednega programiranja SPMD (Single Program, Multiple Data), ki omogočajo vzporedno izvajanje več primerkov istega programa z različnimi nabori vhodnih podatkov. Projektna koda je napisana v C++ in se distribuira pod licenco BSD. Podpira delo v sistemih Linux, Windows, macOS in FreeBSD.
Programi C z razširitvami SPMD so sestavljeni za izvajanje na računalniških enotah SIMD, ki jih zagotavljata CPE in GPE, kar vam omogoča uporabo mehanizmov vektorizacije SIMD brez optimizacij na nizki ravni in eksplicitne uporabe navodil SIMD v kodi. Za pisanje vzporednih funkcij se uporabljajo znana sintaksa in idiomi jezika C - funkcije SPMD neposredno komunicirajo s funkcijami in strukturami, napisanimi v C/C++. Obstoječe razhroščevalnike je mogoče uporabiti za odpravljanje napak v programih.
ISPC uporablja infrastrukturo LLVM kot zaledje za ustvarjanje kode in optimizacijo. Podprta so vektorska navodila x86 (SSE2, SSE4, AVX, AVX2, AVX512) in ARM (NEON), kot tudi razbremenitev izračunov na strani GPE (Intel Gen9 in Xe). Na arhitekturah z vektorskimi bloki SSE, ki obdelujejo 4 elemente naenkrat, uporaba ISPC omogoča 3- ali večkratno pospešitev izvajanja programa, na arhitekturah z vektorskimi bloki AVX, ki obdelujejo 8 elementov naenkrat, pa lahko pospešek doseže 5-krat. 6-krat. Poleg tega je skaliranje poleg velikosti vektorskega bloka zagotovljeno tudi z izvajanjem na različnih procesorskih jedrih.
Ključne novosti, dodane v različici ISPC 1.26:
- Izboljšana podpora za arhitekturo ARM:
- Obnašanje zastavice "--arch=arm" je spremenjeno, ki je zdaj povezana z arhitekturo ARMv8 (32-bitna), ne ARMv7 (za ARMv8 v 64-bitnem načinu je treba še vedno uporabljati zastavico "--arch=aarch64").
- Podpora za procesorje ARMv7 Cortex-a9 in Cortex-a15 je bila ukinjena.
- Dodana podpora za procesorje Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520 ter nove procesorje Apple ARM.
- Dodani novi cilji gradnje: neon-i16x16 in neon-i8x32.
- Dodana podpora za operacije na podlagi vektorskih navodil ARM SDOT in UDOT.
- Izvedena je bila optimizacija, zmogljivost za ARMv8 se je v povprečju povečala za 13 %.
- Dodan je bil nov tip gradbenih ciljev - "generic", ki omogoča optimizacijo notranje arhitekture prevajalnika in poenostavi dodajanje novih gradbenih ciljev. Ideja je podpreti osnovne cilje za specifične zmogljivosti strojne opreme, na vrhu katerih je mogoče preprosto zgraditi cilje s posebnimi optimizacijami. Podpora za arhitekturo ARM je bila preklopljena na uporabo generičnih ciljev.
- Generator kode ima prilagojeno zanko in odvijanje funkcije, da zmanjša velikost dobljene kode v načinu optimizacije "-O1". Izboljšano generiranje kode za vgrajeni funkciji count_leading_zeros in count_trailing_zeros, kot tudi pri vračanju struktur iz funkcij in pri shranjevanju ali nalaganju podatkov s tipi int8/int16.
- Razširjena podpora za intrinsics LLVM, omogočena z določitvijo zastavice "--enable-llvm-intrinsics".
- Veriga orodij LLVM posodobljena na različico 18.1.8 s popravki. Dodan makro za zaznavanje različice LLVM, uporabljene v ISPC.
- Dovoljena je uporaba atributa "__attribute__((deprecated))" za funkcije za tiskanje opozorila, ko je funkcija poklicana.
- Odstranjen cilj gradnje avx512knl-x16 (KNL).
- Dodana možnost »--darwin-version-min« za določitev najmanjše podprte različice ciljne platforme za macOS in iOS.
Vir: opennet.ru
