GCC-ке компиляция процесін параллельдеу үшін қолдауды қосу жобасы

Ғылыми жобаның бөлігі ретінде Параллельді GCC Компиляция процесін бірнеше параллель ағындарға бөлуге мүмкіндік беретін GCC мүмкіндігін қосу жұмысы басталды. Қазіргі уақытта көп ядролы жүйелерде құрастыру жылдамдығын арттыру үшін make утилитасы әрқайсысы жеке код файлын құрастыратын бөлек компилятор процестерін іске қосуды пайдаланады. Жаңа жоба компилятор деңгейінде параллелизацияны қамтамасыз етумен тәжірибе жасауда, бұл көп ядролы жүйелердегі өнімділікті жақсартуға мүмкіндік береді.

Тестілеу үшін дайындалған ағындар санын орнату үшін «—param=num-threads=N» жаңа параметрін ұсынатын GCC жеке параллельді тармағы. Бастапқы кезеңде біз процедурааралық оңтайландыруларды әрбір функция үшін циклдік түрде шақырылатын және оңай параллельдеуге болатын бөлек ағындарға көшіруді жүзеге асырдық. Функциялардың бір-бірімен әрекеттесуін бағалайтын аппараттық құралға тәуелсіз оңтайландыруға жауапты GIMPLE операциялары бөлек ағындарға орналастырылған.

Келесі кезеңде сонымен қатар аппараттық платформаның сипаттамаларын ескере отырып, процедурааралық RTL оңтайландыруларын бөлек ағындарға жылжыту жоспарлануда. Осыдан кейін біз шақыру ерекшеліктеріне қарамастан функцияның ішіндегі кодқа қолданылатын процедураішілік оңтайландыруларды (IPA) параллелизациялауды жүзеге асыруды жоспарлап отырмыз. Қазіргі уақытта шектеуші сілтеме көп ағынды режимде жұмыс істегенде қоқыс жинау операцияларын өшіретін жаһандық құлыпты қосқан қоқыс жинағыш болып табылады (болашақта қоқыс жинағыш GCC көп ағынды орындауға бейімделеді).

Өнімділіктегі өзгерістерді бағалау үшін 100 мыңнан астам код жолын және 1700 функцияны қамтитын gimple-match.c файлын жинайтын сынақ жинағы дайындалды. 5 физикалық ядросы және 8250 виртуалды (Hyperthreading) бар Intel Core i4-8U процессоры бар жүйедегі сынақтар 7 ағынды іске қосқанда 4-ден 2 секундқа дейін және 3 іске қосу кезінде 4 секундқа дейін процедураішілік GIMPLE оңтайландыруларының орындалу уақытының азайғанын көрсетті. жіптер, яғни. Қарастырылып отырған құрастыру кезеңінің жылдамдығының артуы тиісінше 1.72 және 2.52 есеге қол жеткізілді. Сондай-ақ сынақтар Hyperthreading көмегімен виртуалды ядроларды пайдалану өнімділіктің жоғарылауына әкелмейтінін көрсетті.

GCC-ке компиляция процесін параллельдеу үшін қолдауды қосу жобасы

Жалпы құрастыру уақыты шамамен 10%-ға қысқарды, бірақ болжамдарға сәйкес, RTL оңтайландыруларын параллельдеу нақты нәтижелерге қол жеткізуге мүмкіндік береді, өйткені бұл кезең құрастыру кезінде айтарлықтай көп уақытты алады. Шамамен RTL параллелизациясынан кейін жалпы жинау уақыты 1.61 есе қысқарады. Осыдан кейін IPA оңтайландыруларын параллельдеу арқылы құрастыру уақытын тағы 5-10%-ға қысқартуға болады.

GCC-ке компиляция процесін параллельдеу үшін қолдауды қосу жобасы

Ақпарат көзі: opennet.ru

пікір қалдыру