Intel a publié ISPC 1.31 (Implicit SPMD Program Compiler), conçu pour compiler du code C avec les extensions de programmation parallèle SPMD (Single Program, Multiple Data), qui permettent l'exécution parallèle de plusieurs instances d'un même programme avec différents ensembles de données d'entrée. Le code du projet est écrit en C++ et distribué sous licence BSD. Il prend en charge Linux, Windows, macOS et FreeBSD.
Les programmes C avec extensions SPMD sont compilés pour être exécutés sur des unités de calcul SIMD fournies par le CPU et le GPU, ce qui vous permet d'utiliser les mécanismes de vectorisation SIMD sans optimisations de bas niveau ni utilisation explicite des instructions SIMD dans le code. Pour écrire des fonctions parallélisables, la syntaxe et les idiomes familiers du langage C sont utilisés : les fonctions SPMD interagissent directement avec les fonctions et les structures écrites en C/C++. Les débogueurs existants peuvent être utilisés pour déboguer des programmes.
ISPC utilise l'infrastructure LLVM comme backend pour la génération et l'optimisation de code. Les instructions vectorielles x86 (SSE2, SSE4, AVX, AVX2, AVX512) et ARM (NEON) sont prises en charge, ainsi que le déchargement des calculs côté GPU (Intel Gen9 et Xe). Sur les architectures avec blocs vectoriels SSE traitant 4 éléments à la fois, l'utilisation d'ISPC permet d'obtenir une accélération d'exécution du programme de 3 fois ou plus, et sur les architectures avec blocs vectoriels AVX traitant 8 éléments à la fois, l'accélération peut atteindre 5- 6 fois. De plus, outre la taille du bloc vectoriel, la mise à l'échelle est également assurée par l'exécution sur différents cœurs de processeur.
Principales innovations ajoutées dans la version ISPC 1.31 :
- Добавлена экспериментальная поддержка 64-разрядной little-endian архитектуры PowerPC (ppc64le). По умолчанию осуществляется сборка для POWER ISA 2.7 (POWER8+) с расширениями VSX (Vector Scalar Extension).
- Добавлены новые сборочные цели avx10.2nvl-x4, avx10.2nvl-x8, avx10.2nvl-x16, avx10.2nvl-x32 и avx10.2nvl-x64, реализующие поддержку расширенный наборов инструкций AVX10.2 (Advanced Vector Extensions) и APX (Advanced Performance Extensions) для процессоров на базе микроархитектуры Intel Nova Lake.
- В диспетчеризаторе обеспечен выбор вариантов сборочных целей с поддержкой AMX (avx512spr, avx512gnr, avx10.2dmr) только при реальной поддержке расширений AMX (Advanced Matrix Extensions) в операционной системе и CPU.
- Добавлена опция «—opt=disable-apx» для выборочного отключения отдельных возможностей x86 APX (egpr, ndd, push2pop2, ppx, ccmp, cf, nf, zu и jmpabs), которые по умолчанию включены в поддерживающих APX сборочных целях, таких как avx10.2dmr и avx10.2nvl.
- Добавлены сбалансированный («balanced») и агрессивный («aggressive») режимы оптимизации математических вычислений, включаемые через опцию «—opt=fast-math» и более агрессивные по сравнению с применяемым по умолчанию режимом оптимизации.
- В сандартную библиотеку добавлены новые математические функции:
erf, erfc (функции ошибок Гаусса), expm1 (точное вычисление «exp(x)-1»), log1p («log(1+x)»), sinh, cosh и tanh (гиперболические синус, косинус и тангенс). Повышена точность и производительность функций asin, acos, atan и log. - Значительно повышена производительность 32-битных операций перестановки (shuffles) для сборочной цели avx2-i32x16 и вычислений popcnt для целей avx2-i8x32, avx512skx-x32 и avx512skx-x64.
- Инструментарий LLVM обновлён до находящейся в разработке ветки 23.
Source: opennet.ru
