Intel은 SPMD(Single Program, Multiple Data) 병렬 프로그래밍 확장 기능을 사용하여 C 코드를 컴파일하도록 설계된 ISPC 1.31(Implicit SPMD Program Compiler)를 발표했습니다. SPMD 확장 기능은 서로 다른 입력 데이터 세트를 사용하는 단일 프로그램의 여러 인스턴스를 병렬로 실행할 수 있도록 합니다. 이 프로젝트 코드는 C++로 작성되었으며 BSD 라이선스에 따라 배포됩니다. ISPC 1.25는 SPMD를 지원합니다. Linux, Windows, macOS 그리고 FreeBSD.
SPMD 확장이 포함된 C 프로그램은 CPU 및 GPU에서 제공하는 SIMD 계산 장치에서 실행되도록 컴파일됩니다. 이를 통해 코드에서 낮은 수준의 최적화 및 명시적인 SIMD 명령 사용 없이 SIMD 벡터화 메커니즘을 사용할 수 있습니다. 병렬화 가능한 함수를 작성하려면 C 언어의 친숙한 구문과 관용구가 사용됩니다. 즉, SPMD 함수는 C/C++로 작성된 함수 및 구조와 직접 상호 작용합니다. 기존 디버거를 사용하여 프로그램을 디버깅할 수 있습니다.
ISPC는 코드 생성 및 최적화를 위한 백엔드로 LLVM 인프라를 사용합니다. x86(SSE2, SSE4, AVX, AVX2, AVX512) 및 ARM(NEON) 벡터 명령이 지원될 뿐만 아니라 계산을 GPU 측(Intel Gen9 및 Xe)으로 오프로드합니다. 한 번에 4개의 요소를 처리하는 SSE 벡터 블록이 있는 아키텍처에서 ISPC를 사용하면 프로그램 실행 가속을 3배 이상 달성할 수 있으며, 한 번에 8개의 요소를 처리하는 AVX 벡터 블록이 있는 아키텍처에서는 가속이 5배 이상 빨라질 수 있습니다. 6 번. 또한 벡터 블록의 크기 외에도 다양한 프로세서 코어에서 실행하여 크기 조정도 보장됩니다.
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.
출처 : opennet.ru
