SPMD genişləndirmələri ilə C dili üçün Intel tərəfindən hazırlanmış ISPC 1.26 kompilyatorunun buraxılışı

Intel, C kodunu SPMD (Single Program, Multiple Data) paralel proqramlaşdırma uzantıları ilə yığmaq üçün nəzərdə tutulmuş ISPC 1.26 (İmplicit SPMD Program Compiler) nəşr etdi ki, bu da eyni proqramın bir neçə nümunəsinin müxtəlif giriş məlumat dəstləri ilə paralel icrasına imkan verir. Layihə kodu C++ dilində yazılmışdır və BSD lisenziyası altında paylanmışdır. Linux, Windows, macOS və FreeBSD-də işi dəstəkləyir.

SPMD genişləndirmələri olan C proqramları CPU və GPU tərəfindən təmin edilən SIMD hesablama vahidlərində icra üçün tərtib edilmişdir ki, bu da aşağı səviyyəli optimallaşdırmalar və kodda SIMD təlimatlarının açıq şəkildə istifadəsi olmadan SIMD vektorlaşdırma mexanizmlərindən istifadə etməyə imkan verir. Paralelləşdirilə bilən funksiyaları yazmaq üçün C dilinin tanış sintaksisi və idiomlarından istifadə olunur - SPMD funksiyaları C/C++ dilində yazılmış funksiya və strukturlarla birbaşa qarşılıqlı əlaqədədir. Mövcud debuggers proqramları sazlamaq üçün istifadə edilə bilər.

ISPC kodun yaradılması və optimallaşdırılması üçün LLVM infrastrukturundan backend kimi istifadə edir. x86 (SSE2, SSE4, AVX, AVX2, AVX512) və ARM (NEON) vektor təlimatları, həmçinin GPU tərəfinə yükləmə hesablamaları (Intel Gen9 və Xe) dəstəklənir. Eyni anda 4 elementi emal edən SSE vektor blokları olan arxitekturalarda ISPC-dən istifadə proqramın icra sürətini 3 və ya daha çox dəfə artırmağa imkan verir, eyni vaxtda 8 elementi emal edən AVX vektor blokları olan arxitekturalarda isə sürətlənmə 5-ə çata bilər. 6 dəfə. Üstəlik, vektor blokunun ölçüsünə əlavə olaraq, müxtəlif prosessor nüvələrində icra etməklə miqyaslama da təmin edilir.

ISPC 1.26 versiyasına əlavə edilmiş əsas yeniliklər:

  • ARM arxitekturası üçün təkmilləşdirilmiş dəstək:
    • "--arch=arm" bayrağının davranışı dəyişdirilib, o, indi ARMv8 deyil, ARMv32 (7-bit) arxitekturası ilə əlaqələndirilir (8-bit rejimdə ARMv64 üçün "--arch=aarch64" bayrağı hələ də istifadə edilməlidir).
    • ARMv7 Cortex-a9 və Cortex-a15 prosessorlarına dəstək dayandırılıb.
    • Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520 prosessorları, həmçinin yeni Apple ARM prosessorları üçün əlavə dəstək.
    • Yeni qurma hədəfləri əlavə edildi: neon-i16x16 və neon-i8x32.
    • ARM SDOT və UDOT vektor təlimatlarına əsaslanan əməliyyatlar üçün əlavə dəstək.
    • Optimallaşdırma aparıldı, ARMv8 üçün performans orta hesabla 13% artdı.
  • Kompilyatorun daxili arxitekturasını optimallaşdırmağa və yeni qurma hədəflərinin əlavə edilməsini sadələşdirməyə imkan verən yeni tipli qurma hədəfləri əlavə edildi - "ümumi". İdeya, xüsusi avadanlıq imkanları üçün əsas hədəfləri dəstəkləməkdir, bunun üzərinə xüsusi optimallaşdırma ilə hədəflər asanlıqla qurula bilər. ARM arxitekturasına dəstək ümumi hədəflərdən istifadəyə keçib.
  • Kod generatorunda "-O1" optimallaşdırma rejimində yaranan kodun ölçüsünü azaltmaq üçün onun döngəsi və açılma funksiyası düzəldilmişdir. count_leading_zeros və count_trailing_zeros daxili funksiyaları üçün, həmçinin strukturları funksiyalardan qaytararkən və int8/int16 növləri ilə məlumatları saxlayarkən və ya yükləyərkən təkmilləşdirilmiş kod generasiyası.
  • "--enable-llvm-intrinsics" bayrağının göstərilməsi ilə aktivləşdirilmiş LLVM intrinsics üçün genişləndirilmiş dəstək.
  • LLVM alətlər silsiləsi yamaqlarla 18.1.8 versiyasına yeniləndi. ISPC-də istifadə olunan LLVM versiyasını aşkar etmək üçün makro əlavə edildi.
  • Funksiya çağırılan zaman xəbərdarlıq çap etmək üçün funksiyalara "__attribute__((köhnəlmiş))" atributunun tətbiqinə icazə verilir.
  • Quraşdırma hədəfi avx512knl-x16 (KNL) silindi.
  • macOS və iOS üçün hədəf platformanın minimum dəstəklənən versiyasını müəyyən etmək üçün "--darwin-version-min" seçimi əlavə edildi.

Mənbə: opennet.ru

Добавить комментарий