Intel компаниясы C кодын SPMD (Single Program, Multiple Data) параллель бағдарламалау кеңейтімдерімен жинақтауға арналған ISPC 1.26 (Implicit SPMD Program Compiler) шығарды, бұл кіріс деректерінің әртүрлі жиынтықтарымен бір бағдарламаның бірнеше данасын параллель орындауға мүмкіндік береді. Жоба коды C++ тілінде жазылған және BSD лицензиясы бойынша таратылады. Linux, Windows, macOS және FreeBSD жүйелерінде жұмысты қолдайды.
SPMD кеңейтімдері бар C бағдарламалары CPU және GPU қамтамасыз ететін SIMD есептеу бірліктерінде орындау үшін құрастырылған, бұл SIMD векторлау механизмдерін төменгі деңгейлі оңтайландырусыз және кодта SIMD нұсқауларын анық пайдаланусыз пайдалануға мүмкіндік береді. Параллельденетін функцияларды жазу үшін Си тілінің таныс синтаксисі мен идиомалары пайдаланылады - 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.26 нұсқасында қосылған негізгі инновациялар:
- ARM архитектурасына жақсартылған қолдау:
- "--arch=arm" жалауының әрекеті өзгертілді, ол енді ARMv8 емес, ARMv32 (7-бит) архитектурасымен байланысты (8-биттік режимдегі ARMv64 үшін "--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 түрлерімен деректерді сақтау немесе жүктеу кезінде жақсартылған код жасау.
- "--enable-llvm-intrinsics" жалаушасын көрсету арқылы қосылған LLVM ішкі элементтеріне арналған кеңейтілген қолдау.
- LLVM құралдар тізбегі патчтары бар 18.1.8 нұсқасына жаңартылды. ISPC-де пайдаланылатын LLVM нұсқасын анықтау үшін макрос қосылды.
- Функция шақырылған кезде ескертуді басып шығару үшін функцияларға "__атрибут__((ескірген))" төлсипатын қолдануға рұқсат етілген.
- Құрылым мақсаты avx512knl-x16 (KNL) жойылды.
- MacOS және iOS үшін мақсатты платформаның ең аз қолдау көрсетілетін нұсқасын көрсету үшін "--darwin-version-min" опциясы қосылды.
Ақпарат көзі: opennet.ru
