Rilascio del compilatore ISPC 1.25, sviluppato da Intel per il linguaggio C con estensioni SPMD.

La società Intel ha rilasciato il compilatore ISPC 1.25 (Implicit SPMD Program Compiler), progettato per costruire codice in linguaggio C con estensioni per la programmazione parallela SPMD (Single Program, Multiple Data), che consentono di eseguire in parallelo più istanze dello stesso programma con diverse serie di dati in ingresso. Il codice del progetto è scritto in C++ e distribuito sotto licenza BSD. È supportato in Linux, Windows, macOS e FreeBSD.

I programmi in C con estensioni SPMD vengono compilati per l'esecuzione su blocchi di calcolo SIMD forniti da CPU e GPU, permettendo di sfruttare i meccanismi di vettorizzazione SIMD senza ottimizzazioni a basso livello e senza l'uso esplicito delle istruzioni SIMD nel codice. Per scrivere funzioni parallele si utilizza la sintassi e le idiome familiari del linguaggio C; le funzioni SPMD interagiscono direttamente con le funzioni e le strutture scritte in C/C++. Per il debug dei programmi possono essere utilizzati i debugger esistenti.

Per la generazione del codice e l'ottimizzazione in ISPC viene utilizzata l'infrastruttura LLVM. Sono supportate le istruzioni vettoriali x86 (SSE2, SSE4, AVX, AVX2, AVX512) e ARM (NEON), oltre all'allocazione dei calcoli su GPU (Intel Gen9 e Xe). Su architetture con blocchi vettoriali SSE, che elaborano 4 elementi alla volta, l'utilizzo di ISPC permette di ottenere un'accelerazione delle prestazioni del programma di 3 volte o più, mentre su architetture con blocchi vettoriali AVX, che elaborano 8 elementi alla volta, l'accelerazione può raggiungere 5-6 volte. Oltre alla dimensione del blocco vettoriale, la scalabilità è garantita anche grazie all'esecuzione su diversi core del processore.

Le principali novità introdotte nella versione ISPC 1.25:

  • Nella dichiarazione di variabili e funzioni è ora consentita l’indicazione degli attributi «noescape», «address_space(N)», «external_only» e «unmangled» utilizzando la parola chiave «__attribute__».
  • Aggiunta la supporto per l'uso di template nelle dichiarazioni di vettori e array.
  • Garantita la generazione di messaggi di errore in caso di utilizzo di tipi incompatibili nelle dichiarazioni delle variabili.
  • Migliorata la generazione del codice per i cicli foreach. Aumentata l'efficienza della generazione del codice basata su set di istruzioni AVX2 e AVX512.
  • La compilazione anticipata della libreria standard (stdlib) è fornita durante la fase di build di ISPC, anziché durante la compilazione dei progetti. Questa modifica ha ridotto il tempo di costruzione del 5-60%, a seconda delle dimensioni del codice che viene compilato.
  • Sono stati aggiunti nuovi obiettivi di build: xe2hpg-x16 e xe2hpg-x32 per GPU Intel Xe2 Battlemage, xe2lpg-x16 e xe2lpg-x32 per GPU Intel Xe2 Lunar Lake. Sono stati inoltre aggiunti i riferimenti arrowlake, lunarlake e graniterapids per le CPU Intel ArrowLake, LunarLake e GraniteRapids.
  • I seguenti obiettivi di build sono stati dichiarati obsoleti: avx512knl-x16, gen9-x8 e gen9-x16.
  • Nella libreria standard sono state aggiunte operazioni atomiche per l'addizione, la sottrazione, la ricerca del minimo e massimo per i dati con tipi float e double.
  • È stata aggiunta l'opzione della riga di comando "-ffunction-sections" per generare ogni funzione in una sezione separata.
  • È stata fornita la possibilità di compilare ISPC in due modalità: "slim" e "composite" (predefinita). La seconda modalità si distingue per l'integrazione delle librerie stdlib e binutils in un singolo file eseguibile, anziché fornirle come file separati.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster