Išleistas ISPC 1.26 kompiliatorius, kurį „Intel“ sukūrė C kalbai su SPMD plėtiniais

Intel išleido ISPC 1.26 (Implicit SPMD Program Compiler), skirtą C kodui surinkti su SPMD (Single Program, Multiple Data) lygiagrečiai programavimo plėtiniais, kurie leidžia lygiagrečiai vykdyti kelis tos pačios programos egzempliorius su skirtingais įvesties duomenų rinkiniais. Projekto kodas parašytas C++ kalba ir platinamas pagal BSD licenciją. Palaiko darbą Linux, Windows, macOS ir FreeBSD.

C programos su SPMD plėtiniais yra sudarytos vykdyti SIMD skaičiavimo vienetuose, kuriuos teikia CPU ir GPU, o tai leidžia naudoti SIMD vektorizavimo mechanizmus be žemo lygio optimizavimo ir aiškaus SIMD instrukcijų naudojimo kode. Paralelizuojamoms funkcijoms rašyti naudojama pažįstama C kalbos sintaksė ir idiomos – SPMD funkcijos tiesiogiai sąveikauja su funkcijomis ir struktūromis, parašytomis C/C++. Esami derintuvai gali būti naudojami programoms derinti.

ISPC naudoja LLVM infrastruktūrą kaip kodo generavimo ir optimizavimo pagrindą. Palaikomos x86 (SSE2, SSE4, AVX, AVX2, AVX512) ir ARM (NEON) vektorinės instrukcijos, taip pat skaičiavimų perkėlimas į GPU pusę (Intel Gen9 ir Xe). Architektūrose su SSE vektoriniais blokais, vienu metu apdorojančiais 4 elementus, ISPC naudojimas leidžia pasiekti programos vykdymo pagreitį 3 ar daugiau kartų, o architektūrose su AVX vektoriniais blokais, apdorojančiais 8 elementus vienu metu, pagreitis gali siekti 5- 6 kartus. Be to, be vektorinio bloko dydžio, mastelio keitimą taip pat užtikrina vykdymas skirtinguose procesoriaus branduoliuose.

Pagrindinės naujovės, įtrauktos į ISPC 1.26 versiją:

  • Patobulintas ARM architektūros palaikymas:
    • Buvo pakeista vėliavėlės „--arch=arm“ elgsena, kuri dabar susieta su ARMv8 (32 bitų) architektūra, o ne ARMv7 (ARMv8 64 bitų režimu vis tiek turėtų būti naudojama vėliavėlė „--arch=aarch64“).
    • ARMv7 Cortex-a9 ir Cortex-a15 procesorių palaikymas buvo nutrauktas.
    • Pridėtas Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520 procesorių palaikymas, taip pat nauji Apple ARM procesoriai.
    • Pridėta naujų kūrimo objektų: neon-i16x16 ir neon-i8x32.
    • Pridėtas palaikymas operacijoms, pagrįstoms ARM SDOT ir UDOT vektorinėmis instrukcijomis.
    • Atliktas optimizavimas, ARMv8 našumas padidėjo vidutiniškai 13%.
  • Pridėta naujo tipo kūrimo tikslai – „bendrieji“, leidžiantys optimizuoti vidinę kompiliatoriaus architektūrą ir supaprastinti naujų kūrimo taikinių įtraukimą. Idėja yra palaikyti konkrečių aparatinės įrangos pajėgumų bazinius tikslus, ant kurių būtų galima lengvai sukurti specialius optimizuotus tikslus. ARM architektūros palaikymas pakeistas į bendrųjų taikinių naudojimą.
  • Kodo generatoriaus kilpa ir funkcijos išvyniojimas buvo pakoreguotos, kad sumažintų gauto kodo dydį optimizavimo režimu „-O1“. Patobulintas kodų generavimas integruotoms funkcijoms count_leading_zeros ir count_trailing_zeros, taip pat grąžinant struktūras iš funkcijų ir išsaugant ar įkeliant duomenis su int8/int16 tipais.
  • Išplėstas LLVM intrinsics palaikymas, įgalintas nurodant žymą „--enable-llvm-intrinsics“.
  • LLVM įrankių grandinė atnaujinta į 18.1.8 versiją su pataisomis. Pridėta makrokomanda, skirta aptikti ISPC naudojamą LLVM versiją.
  • Leidžiama funkcijoms taikyti atributą "__attribute__((nebenaudojama))", kad būtų išspausdintas įspėjimas, kai funkcija iškviečiama.
  • Pašalintas versijos tikslas avx512knl-x16 (KNL).
  • Pridėta parinktis „--darwin-version-min“, kad būtų nurodyta mažiausia palaikoma „MacOS“ ir „iOS“ tikslinės platformos versija.

Šaltinis: opennet.ru

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