Нашри компилятори ISPC 1.26, ки аз ҷониби Intel барои забони C бо васеъшавии SPMD таҳия шудааст

Intel ISPC 1.26 (Implicit SPMD Program Compiler) -ро нашр кард, ки барои ҷамъ кардани коди C бо васеъшавии барномасозии параллелӣ SPMD (Single Program, Multiple Data) тарҳрезӣ шудааст, ки имкон медиҳад, иҷрои мувозии якчанд мисолҳои як барнома бо маҷмӯи гуногуни додаҳои воридотӣ. Рамзи лоиҳа дар C++ навишта шудааст ва таҳти иҷозатномаи BSD паҳн карда мешавад. Корҳоро дар Linux, Windows, macOS ва FreeBSD дастгирӣ мекунад.

Барномаҳои C бо васеъшавии SPMD барои иҷро дар воҳидҳои ҳисоббарории SIMD, ки аз ҷониби CPU ва GPU пешниҳод шудаанд, тартиб дода шудаанд, ки ба шумо имкон медиҳад, ки механизмҳои векторизатсияи SIMD бе оптимизатсияи сатҳи паст ва истифодаи возеҳи дастурҳои SIMD дар код истифода баред. Барои навиштани функсияҳои параллелизатсияшаванда, синтаксис ва идиомаҳои шиноси забони Си истифода мешаванд - функсияҳои SPMD мустақиман бо функсияҳо ва сохторҳои дар C/C++ навишташуда ҳамкорӣ мекунанд. Дебаггерҳои мавҷударо барои ислоҳи барномаҳо истифода бурдан мумкин аст.

ISPC инфрасохтори LLVM-ро ҳамчун пуштибонии тавлиди код ва оптимизатсия истифода мебарад. Дастурҳои вектории x86 (SSE2, SSE4, AVX, AVX2, AVX512) ва ARM (NEON) дастгирӣ карда мешаванд, инчунин ҳисобҳои борфарорӣ ба тарафи GPU (Intel Gen9 ва Xe). Дар меъморӣ бо блокҳои вектории SSE, ки дар як вақт 4 элементро коркард мекунанд, истифодаи ISPC имкон медиҳад, ки суръатбахшии иҷрои барномаро 3 маротиба ё бештар аз он ба даст оранд ва дар меъморӣ бо блокҳои вектории AVX дар як вақт 8 элементро коркард мекунанд, суръат метавонад ба 5- 6 маротиба. Ғайр аз он, ба ғайр аз андозаи блоки векторӣ, миқёскунӣ инчунин тавассути иҷро дар ядроҳои гуногуни протсессор таъмин карда мешавад.

Навовариҳои асосӣ дар версияи ISPC 1.26:

  • Дастгирии мукаммал барои меъмории ARM:
    • Рафтори парчами "--arch=arm" тағир дода шуд, ки ҳоло бо меъмории ARMv8 (32-бит) алоқаманд аст, на ARMv7 (барои ARMv8 дар реҷаи 64-бит, парчами "--arch=aarch64" бояд ҳамчунон истифода шавад).
    • Дастгирии коркардкунандагони ARMv7 Cortex-a9 ва Cortex-a15 қатъ карда шуд.
    • Дастгирии иловагӣ барои коркардкунандагони Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, инчунин протсессори нави Apple ARM.
    • Ҳадафҳои нави сохтмон илова карда шуданд: neon-i16x16 ва neon-i8x32.
    • Дастгирии иловагӣ барои амалиётҳо дар асоси дастурҳои вектории ARM SDOT ва UDOT.
    • Оптимизатсия анҷом дода шуд, иҷрои ARMv8 ба ҳисоби миёна 13% афзоиш ёфт.
  • Навъи нави ҳадафҳои сохтмон илова карда шуд - "умумӣ", ки имкон медиҳад, ки меъмории дохилии компилятор оптимизатсия ва илова кардани ҳадафҳои нави сохтмонро содда кунад. Идеяи он аст, ки ҳадафҳои асосӣ барои қобилиятҳои мушаххаси сахтафзор дастгирӣ карда шаванд, ки бар болои он ҳадафҳо бо оптимизатсияи мушаххас метавонанд ба осонӣ сохта шаванд. Дастгирии меъмории ARM ба истифодаи ҳадафҳои умумӣ гузашт.
  • Генератори код барои кам кардани андозаи коди натиҷавӣ дар ҳолати оптимизатсияи "-O1" ҳалқа ва кушодани функсияи худро тасҳеҳ кардааст. Тавлиди коди беҳтаршуда барои функсияҳои дарунсохт count_leading_zeros ва count_trailing_zeros, инчунин ҳангоми баргардонидани сохторҳо аз функсияҳо ва ҳангоми нигоҳдорӣ ё боркунии маълумот бо намудҳои int8/int16.
  • Дастгирии васеъ барои intrinsics LLVM, ки бо нишон додани парчами "--enable-llvm-intrinsics" фаъол карда шудааст.
  • Асбобҳои LLVM ба версияи 18.1.8 бо часбчаҳо нав карда шуданд. Барои ошкор кардани версияи LLVM, ки дар ISPC истифода мешавад, макрос илова карда шуд.
  • Иҷозат дода мешавад, ки атрибути "__attribute__(((кӯҳнашуда))" ба функсияҳо барои чопи огоҳӣ ҳангоми даъват шудани функсия истифода шавад.
  • Ҳадафи сохтани avx512knl-x16 (KNL) хориҷ карда шуд.
  • Опсияи "--darwin-version-min" илова карда шуд, то версияи ҳадди ақали дастгирӣшавандаи платформаи мақсаднокро барои macOS ва iOS муайян кунад.

Манбаъ: opennet.ru

Илова Эзоҳ