Intel ha publicado ISPC 1.24 (Compilador de programas SPMD implícito), que compila código C con extensiones para admitir el método de programación paralela SPMD (Programa único, datos múltiples), en el que se ejecutan múltiples instancias del mismo programa en paralelo con diferentes conjuntos de entradas. datos. El código del proyecto está escrito en C++ y distribuido bajo licencia BSD. Trabajar en Linux, Windows, macOS y FreeBSD.
Se compila un programa C con extensiones SPMD para su ejecución en unidades computacionales SIMD proporcionadas por la CPU y GPU, lo que le permite usar mecanismos de vectorización SIMD en programas sin optimizaciones de bajo nivel y sin uso explícito de instrucciones SIMD en el código. Para escribir funciones paralelizables, se utilizan la sintaxis y los modismos familiares del lenguaje C. Estas funciones SPMD pueden integrarse con aplicaciones C/C++ e interactuar directamente con sus funciones y estructuras. Los depuradores existentes se pueden utilizar para depurar programas.
La infraestructura LLVM se utiliza como backend para la generación y optimización de código. Se admite el uso de instrucciones vectoriales x86 (SSE2, SSE4, AVX, AVX2, AVX512) y ARM (NEON), así como la descarga de cálculos al lado de la GPU (Intel Gen9 y Xe). En arquitecturas con unidades vectoriales SSE que procesan 4 elementos a la vez, el uso de ISPC puede acelerar la ejecución del programa 3 o más veces, y en arquitecturas con unidades vectoriales AVX que procesan 8 elementos a la vez, la aceleración puede ser 5- 6 veces. Además, además del tamaño del bloque vectorial, también se logra el escalado mediante la ejecución en diferentes núcleos de procesador.
Innovaciones clave agregadas en ISPC versión 1.24:
- Se agregó soporte para parámetros sin tipo en plantillas de funciones. Ahora puede utilizar valores enteros unificados y enumerados (con el indicador "uniforme") como parámetros de plantilla.
- Se agregaron funciones de puntos para los tipos int8 e int16 con y sin signo que usan las instrucciones AVX-VNNI y AVX512-VNN.
- Se agregaron definiciones de macros que definen restricciones en la dimensión de los números.
- Se agregaron nuevas plataformas de destino: avx2vnni-i32x4, avx2vnni-i32x8, avx2vnni-i32x16 con soporte para la instrucción AVX-VNNI y avx512icl-x4, avx512icl-x8, avx512icl-x16, avx512icl-x32, 512 con soporte para AVX64- VNI instrucción.
- Se han resuelto los problemas con el uso de instrucciones vectoriales innecesarias al generar código para la GPU.
- El indicador de línea de comando "--pic" está diseñado para coincidir con el indicador "-fpic" en Clang y GCC, y el indicador "--PIC" está diseñado para coincidir con el indicador "-fPIC".
Fuente: opennet.ru
