Intel ha pubblicato il compilatore ISPC 1.24, che implementa il modello di parallelizzazione SPMD

L'azienda Intel ha rilasciato il compilatore ISPC 1.24 (Implicit SPMD Program Compiler), che consente la compilazione di codice in linguaggio C con estensioni per supportare il metodo di programmazione parallela SPMD (Single Program, Multiple Data), in cui più istanze di un'unica programma vengono eseguite in parallelo con set di dati di input differenti. Il codice del progetto è scritto in C++ e distribuito con licenza BSD. È supportato su Linux, Windows, macOS e FreeBSD.

Un programma in C con estensioni SPMD viene compilato per l'esecuzione su unità di calcolo SIMD fornite da CPU e GPU, il che consente di sfruttare i meccanismi di vettorizzazione SIMD nelle applicazioni senza ottimizzazioni a basso livello e senza l'applicazione esplicita di istruzioni SIMD nel codice. Per scrivere funzioni parallelizzabili, viene utilizzata la sintassi e le idiomatiche familiari del linguaggio C. Le funzioni SPMD possono integrarsi con applicazioni C/C++ e interagire direttamente con le loro funzioni e strutture. Possono essere utilizzati debugger esistenti per il debug delle applicazioni.

L'infrastruttura LLVM è utilizzata come backend per la generazione e l'ottimizzazione del codice. È supportato l'uso di istruzioni vettoriali x86 (SSE2, SSE4, AVX, AVX2, AVX512) e ARM (NEON), nonché il trasferimento di calcoli sulla GPU (Intel Gen9 e Xe). Su architetture con blocchi vettoriali SSE, che elaborano 4 elementi alla volta, l'uso di ISPC consente di ottenere un'accelerazione dell'esecuzione del programma di 3 o più volte, mentre su architetture con blocchi vettoriali AVX, che elaborano 8 elementi alla volta, l'accelerazione può arrivare a 5-6 volte. Inoltre, oltre alla dimensione del blocco vettoriale, la scalabilità è raggiunta anche mediante l'esecuzione su diversi core di processore.

Le principali novità introdotte nella versione ISPC 1.24:

  • È stato aggiunto il supporto per parametri non tipizzati nei modelli di funzione. I valori interi unificati e enumerati (con il flag «uniform») possono ora essere utilizzati come parametri di template.
  • Sono state aggiunte funzioni dot per i tipi interi firmati e non firmati int8 e int16, che utilizzano le istruzioni AVX-VNNI e AVX512-VNN.
  • Sono state aggiunte definizioni di macro che definiscono le restrizioni dimensionali dei numeri.
  • Sono state aggiunte nuove piattaforme target: avx2vnni-i32x4, avx2vnni-i32x8, avx2vnni-i32x16 con supporto per l'istruzione AVX-VNNI, e avx512icl-x4, avx512icl-x8, avx512icl-x16, avx512icl-x32, avx512icl-x64 con supporto per l'istruzione AVX512-VNNI.
  • Sono stati risolti problemi con l'uso di istruzioni vettoriali superflue durante la generazione del codice per GPU.
  • Il flag della riga di comando «—pic» è stato allineato al flag «-fpic» in Clang e GCC, mentre il flag «—PIC» è stato allineato a «-fPIC».

Fonte: opennet.ru

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