Intel публикува компилатора ISPC 1.24, който прилага модела за паралелизиране на SPMD

Intel публикува ISPC 1.24 (Implicit SPMD Program Compiler), който компилира C код с разширения за поддръжка на метода за паралелно програмиране SPMD (Single Program, Multiple Data), при който множество екземпляри на една и съща програма се изпълняват паралелно с различни набори от входни данни данни. Кодът на проекта е написан на C++ и се разпространява под BSD лиценз. Работи в Linux, Windows, macOS и FreeBSD.

C програма с SPMD разширения е компилирана за изпълнение на SIMD изчислителни единици, осигурени от CPU и GPU, което ви позволява да използвате SIMD векторни механизми в програми без оптимизации на ниско ниво и изрично използване на SIMD инструкции в кода. За да се напишат паралелизирани функции, се използват познатият синтаксис и идиоми на езика C. Тези SPMD функции могат да се интегрират с C/C++ приложения и директно да взаимодействат с техните функции и структури. Съществуващите дебъгери могат да се използват за отстраняване на грешки в програми.

Инфраструктурата LLVM се използва като бекенд за генериране на код и оптимизация. Поддържа се използването на x86 (SSE2, SSE4, AVX, AVX2, AVX512) и ARM (NEON) векторни инструкции, както и разтоварване на изчисления към страната на GPU (Intel Gen9 и Xe). При архитектури с SSE векторни единици, които обработват 4 елемента наведнъж, използването на ISPC може да ускори изпълнението на програмата с 3 или повече пъти, а при архитектури с AVX векторни единици, които обработват 8 елемента наведнъж, ускорението може да бъде 5- 6 пъти. Освен това, в допълнение към размера на векторния блок, мащабирането се постига и чрез изпълнение на различни процесорни ядра.

Ключови иновации, добавени в ISPC версия 1.24:

  • Добавена е поддръжка за нетипизирани параметри във функционални шаблони. Вече можете да използвате унифицирани цели числа и изброени стойности (с флага „uniform“) като параметри на шаблона.
  • Добавени функции за точки за типове int8 и int16 със знак и без знак, които използват инструкциите AVX-VNNI и AVX512-VNN.
  • Добавени са дефиниции на макроси, които определят ограничения върху размерността на числата.
  • Добавени са нови целеви платформи: avx2vnni-i32x4, avx2vnni-i32x8, avx2vnni-i32x16 с поддръжка на инструкцията AVX-VNNI и avx512icl-x4, avx512icl-x8, avx512icl-x16, avx512icl-x32, 512 с поддръжка на AV X64-VNNI инструкция.
  • Проблемите с използването на ненужни векторни инструкции при генериране на код за GPU са разрешени.
  • Флагът "--pic" на командния ред е създаден да съответства на флага "-fpic" в Clang и GCC, а флагът "--PIC" е направен да съответства на флага "-fPIC".

Източник: opennet.ru

Купете надежден хостинг за сайтове с DDoS защита, VPS VDS сървъри 🔥 Купете надежден уеб хостинг със защита от DDoS атаки, VPS VDS сървъри | ProHoster