Intel hà publicatu l'ISPC 1.26 (Implicit SPMD Program Compiler), cuncipitu per compilà u codice C cù l'estensioni di prugrammazione parallela SPMD (Single Program, Multiple Data), chì permettenu l'esecuzione parallela di parechje istanze di un unicu prugramma cù diversi insemi di dati d'input. U codice di u prugettu hè scrittu in C++ è hè distribuitu sottu a licenza BSD. Supporta Linux, Windows, macOS è FreeBSD.
I prugrammi C cù estensioni SPMD sò compilati per l'esekzione nantu à unità di calculu SIMD furnite da u CPU è a GPU, chì permette di utilizà miccanismi di vectorization SIMD senza ottimisazioni di livellu bassu è l'usu esplicitu di l'istruzzioni SIMD in u codice. Per scrive funzioni parallelizable, a sintassi familiari è l'idiomi di a lingua C sò utilizati - e funzioni SPMD interagiscenu direttamente cù funzioni è strutture scritte in C / C ++. Debuggers esistenti ponu esse usatu per debug prugrammi.
ISPC usa l'infrastruttura LLVM cum'è backend per a generazione di codice è ottimisazione. Istruzzioni vettoriali x86 (SSE2, SSE4, AVX, AVX2, AVX512) è ARM (NEON) sò supportati, è ancu i calculi di scaricamentu à u latu GPU (Intel Gen9 è Xe). In architetture cù blocchi vettoriali SSE chì processanu 4 elementi à volta, l'usu di ISPC permette di ottene l'accelerazione di l'esekzione di u prugramma da 3 o più volte, è in architetture cù blocchi vettoriali AVX chì processanu 8 elementi à volta, l'accelerazione pò ghjunghje à 5- 6 volte. Inoltre, in più di a dimensione di u bloccu di vettore, a scala hè ancu assicurata da l'esekzione nantu à diversi core di processore.
Innuvazioni chjave aghjunte in a versione ISPC 1.26:
- Supportu migliuratu per l'architettura ARM:
- U cumpurtamentu di a bandiera "--arch=arm" hè stata cambiata, chì hè issa assuciata cù l'architettura ARMv8 (32-bit), micca ARMv7 (per ARMv8 in modalità 64-bit, a bandiera "--arch=aarch64" deve sempre esse usata).
- U supportu per i processori ARMv7 Cortex-a9 è Cortex-a15 hè statu discontinuatu.
- Aghjunghje supportu per i processori Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, è ancu novi processori Apple ARM.
- Aggiunti novi obiettivi di custruzzione: neon-i16x16 è neon-i8x32.
- Aggiuntu supportu per operazioni basate nantu à l'istruzzioni vettoriali ARM SDOT è UDOT.
- L'ottimisazione hè stata realizata, u rendiment per ARMv8 hè aumentatu da 13% in media.
- Un novu tipu di destinazione di custruzzione hè statu aghjuntu - "generic", chì permette di ottimisà l'architettura interna di u compilatore è simplificà l'aghjunzione di novi miri di custruzzione. L'idea hè di supportà i miri di basa per capacità hardware specifiche, in cima à quali miri cù ottimisazioni specifiche ponu esse facilmente custruiti. U supportu per l'architettura ARM hè stata cambiata à l'usu di mira generica.
- U generatore di codice hà avutu u so ciclu è a funzione unrolling aghjustatu per riduce a dimensione di u codice resultanti in u modu di ottimisazione "-O1". Generazione di codice mejorata per e funzioni integrate count_leading_zeros è count_trailing_zeros, è ancu quandu si rinvianu strutture da e funzioni è quandu salvate o caricate dati cù tipi int8/int16.
- Supportu allargatu per l'intrinsics LLVM, attivatu da specificà a bandiera "--enable-llvm-intrinsics".
- A catena di strumenti LLVM aghjurnata à a versione 18.1.8 cù patches. Aggiunta macro per detectà a versione LLVM utilizata in ISPC.
- Hè permessu di applicà l'attributu "__attribute__((deprecated))" à e funzioni per stampà un avvisu quandu a funzione hè chjamata.
- Eliminatu build target avx512knl-x16 (KNL).
- Aggiunta l'opzione "--darwin-version-min" per specificà a versione minima supportata di a piattaforma di destinazione per macOS è iOS.
Source: opennet.ru
