LLVM жобасы гетерогенді жүйелер үшін бағдарламалауды жеңілдетуге бағытталған және CPU, GPU, FPGA және доменге тән аппараттық жеделдеткіштер үшін кодты генерациялау құралдарын қамтамасыз ететін HPVM 2.0 (гетерогенді параллельді виртуалды машина) компиляторын шығарды. Жоба коды Apache 2.0 лицензиясы бойынша таратылады.
Гетерогенді параллель жүйелер үшін бағдарламалау әртүрлі параллельдік модельдерді (CPU ядролары, векторлық нұсқаулар, GPU және т.б.), әртүрлі нұсқаулар жиындары және әртүрлі жады иерархияларын пайдаланатын бір жүйеде құрамдас бөліктердің болуымен қиындайды. Әрбір жүйе осындай құрамдастардың өзіндік комбинациясын пайдаланады. HPVM жобасының негізгі идеясы компиляция кезінде параллельді бағдарламалардың біртұтас көрінісін пайдалану болып табылады, оны параллельді есептеулерді қолдайтын аппараттық құралдардың әртүрлі түрлеріне қолдануға болады, соның ішінде GPU, векторлық нұсқаулар, көп ядролы процессорлар, FPGA және әртүрлі мамандандырылған үдеткіш чиптер.
Басқа жүйелерден айырмашылығы, HPVM гетерогенді есептеулерді ұйымдастыру үшін үш мүмкіндікті біріктіруге әрекет жасады: бағдарламалау тіліне және аппараттық құралға тәуелсіз аралық ұсыну (IR), виртуалды нұсқаулар жинағы архитектурасы (V-ISA) және орындау уақытын жоспарлау:
- HPVM IR иерархиялық деректер ағынының графигін енгізу арқылы LLVM IR кеңейтеді, тапсырма, деректер және құбыр деңгейлерінде параллельділікке мүмкіндік береді. HPVM IR сонымен қатар векторлық нұсқауларды және ортақ жадты қамтиды. IR негізгі мақсаты тиімді кодты құру және гетерогенді жүйелер үшін оңтайландыру болып табылады.
- Виртуалды нұсқаулар жинағы архитектурасы (V-ISA) төменгі деңгейлі аппараттық құралдардың мәліметтерін қысқартады және параллелизмнің әртүрлі нысандарын және жад архитектураларын тек негізгі параллелизм үлгісін — деректер ағынының графигін пайдалана отырып біріктіреді. V-ISA параллельді есептеуіш жабдығының әртүрлі түрлерінде тасымалдануға мүмкіндік береді және гетерогенді жүйелердің әртүрлі элементтерін пайдаланған кезде тұрақты өнімділікті қамтамасыз етеді. V-ISA сонымен қатар процессорларда, графикалық процессорларда, FPGA құрылғыларында және әртүрлі үдеткіштерде жұмыс істей алатын әмбебап орындалатын кодты жеткізу үшін пайдаланылуы мүмкін.
- Есептеу процесіне арналған икемді жоспарлау саясаты орындалу уақытында қолданылады және бағдарлама ақпаратына (график құрылымы) негізделген де, жүйеде қол жетімді кез келген мақсатты есептеу құрылғыларында орындау үшін жеке бағдарлама түйіндерін құрастыру арқылы да жүзеге асырылады.
Жобаның код генераторлары NVIDIA GPU (cuDNN және OpenCL), Intel AVX векторлық нұсқаулары, FPGA және көп ядролы x86 процессорларында орындау үшін виртуалды ISA көмегімен анықталған қолданба түйіндерін аударуға қабілетті. HPVM аудармашыларының өнімділігі графикалық процессорлар мен векторлық есептеу құрылғылары үшін қолмен жазылған OpenCL кодымен салыстыруға болады.
HPVM 2.0 негізгі жаңа мүмкіндіктері:
- HPVM жүйесінде компиляциялау үшін C/C++ қолданбасының кодын параллелизациялауды жеңілдететін Hetero-C++ тілінің интерфейсі ұсынылады. Hetero-C++ деректер деңгейіндегі параллелизм мен иерархиялық тапсырмалар үшін кеңейтімдерді анықтайды, олар HPVM ағынының графиктеріне түрлендіріледі.
- Intel FPGA құрылғыларында кодты орындауға қолдау көрсететін FPGA сервері қосылды. Орындау үшін OpenCL үшін Intel FPGA SDK пайдаланылады.
- DSE (Design Space Exploration) негізі қосылды, оның ішінде компиляторды оңтайландыру және берілген аппараттық платформа үшін қолданбаларды автоматты түрде баптауға арналған кедергілерді анықтау механизмдері. Рамка Intel FPGA үшін дайын өнімділік үлгісін қамтиды және HPVM қолдайтын кез келген құрылғыда оңтайландыру үшін теңшелетін өңдеушілерді қосуға мүмкіндік береді. Оңтайландыруларды HPVM деректер ағынының графигі мен LLVM деңгейлерінің екеуінде де қолдануға болады.
- LLVM құрамдастары 13.0 нұсқасына жаңартылды.
- Код код базасын, кітапханаларды және утилиталарды шарлауды жеңілдету үшін қайта ұйымдастырылды.
- Тестілеу инфрақұрылымы жақсартылды және әртүрлі HPVM компоненттеріне арналған жаңа сынақтар қосылды.
Ақпарат көзі: opennet.ru
