Lansarea compilatorului ISPC 1.26 dezvoltat de Intel pentru limbajul C cu extensii SPMD

Intel a publicat ISPC 1.26 (Implicit SPMD Program Compiler), conceput pentru a asambla codul C cu extensii de programare paralelă SPMD (Single Program, Multiple Data), care permit executarea în paralel a mai multor instanțe ale aceluiași program cu seturi diferite de date de intrare. Codul proiectului este scris în C++ și distribuit sub licența BSD. Acceptă lucrul pe Linux, Windows, macOS și FreeBSD.

Programele C cu extensii SPMD sunt compilate pentru execuție pe unitățile de calcul SIMD furnizate de CPU și GPU, ceea ce vă permite să utilizați mecanisme de vectorizare SIMD fără optimizări de nivel scăzut și utilizarea explicită a instrucțiunilor SIMD în cod. Pentru a scrie funcții paralelizabile, sunt folosite sintaxa și idiomurile familiare ale limbajului C - funcțiile SPMD interacționează direct cu funcțiile și structurile scrise în C/C++. Depanatoarele existente pot fi folosite pentru a depana programe.

ISPC folosește infrastructura LLVM ca backend pentru generarea și optimizarea codului. Sunt acceptate instrucțiuni vectoriale x86 (SSE2, SSE4, AVX, AVX2, AVX512) și ARM (NEON), precum și descărcarea calculelor către partea GPU (Intel Gen9 și Xe). Pe arhitecturile cu blocuri vectoriale SSE care procesează câte 4 elemente simultan, utilizarea ISPC face posibilă obținerea unei accelerații a execuției programului de 3 sau mai multe ori, iar pe arhitecturile cu blocuri vectoriale AVX care procesează câte 8 elemente simultan, accelerația poate ajunge la 5- de 6 ori. Mai mult decât atât, pe lângă dimensiunea blocului vectorial, scalarea este asigurată și prin execuție pe diferite nuclee de procesor.

Inovații cheie adăugate în ISPC versiunea 1.26:

  • Suport îmbunătățit pentru arhitectura ARM:
    • Comportamentul steagului „--arch=arm” a fost modificat, care este acum asociat cu arhitectura ARMv8 (32 de biți), nu ARMv7 (pentru ARMv8 în modul pe 64 de biți, ar trebui să fie folosit în continuare steagul „--arch=aarch64”).
    • Suportul pentru procesoarele ARMv7 Cortex-a9 și Cortex-a15 a fost întrerupt.
    • S-a adăugat suport pentru procesoarele Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, precum și pentru noi procesoare Apple ARM.
    • S-au adăugat noi ținte de construcție: neon-i16x16 și neon-i8x32.
    • S-a adăugat suport pentru operațiuni bazate pe instrucțiuni vectoriale ARM SDOT și UDOT.
    • Optimizarea a fost efectuată, performanța pentru ARMv8 a crescut cu 13% în medie.
  • A fost adăugat un nou tip de ținte de build - „generic”, care permite optimizarea arhitecturii interne a compilatorului și simplificarea adăugării de noi ținte de build. Ideea este de a sprijini ținte de bază pentru capacități hardware specifice, pe lângă care ținte cu optimizări specifice pot fi construite cu ușurință. Suportul pentru arhitectura ARM a fost trecut la utilizarea țintelor generice.
  • Generatorul de cod a avut bucla și derularea funcției ajustate pentru a reduce dimensiunea codului rezultat în modul de optimizare „-O1”. Generarea de cod îmbunătățită pentru funcțiile încorporate count_leading_zeros și count_trailing_zeros, precum și la returnarea structurilor din funcții și la salvarea sau încărcarea datelor cu tipuri int8/int16.
  • Suport extins pentru intrinseci LLVM, activat prin specificarea indicatorului „--enable-llvm-intrinsics”.
  • Lanțul de instrumente LLVM a fost actualizat la versiunea 18.1.8 cu patch-uri. A fost adăugată o macrocomandă pentru a detecta versiunea LLVM utilizată în ISPC.
  • Permis să aplice atributul „__attribute__((deprecated))” la funcții pentru a imprima un avertisment atunci când funcția este apelată.
  • A fost eliminată ținta de construcție avx512knl-x16 (KNL).
  • S-a adăugat opțiunea „--darwin-version-min” pentru a specifica versiunea minimă acceptată a platformei țintă pentru macOS și iOS.

Sursa: opennet.ru

Adauga un comentariu