GCCga kompilyatsiya jarayonini parallellashtirishni qo'llab-quvvatlash loyihasi

Tadqiqot loyihasining bir qismi sifatida Parallel GCC GCCga kompilyatsiya jarayonini bir nechta parallel iplarga bo'lish imkonini beruvchi xususiyatni qo'shish ishlari boshlandi. Hozirgi vaqtda ko'p yadroli tizimlarda qurish tezligini oshirish uchun make yordam dasturi alohida kompilyator jarayonlarini ishga tushirishdan foydalanadi, ularning har biri alohida kod faylini yaratadi. Yangi loyiha kompilyator darajasida parallellashtirishni ta'minlash bo'yicha tajriba o'tkazmoqda, bu ko'p yadroli tizimlarda ish faoliyatini yaxshilashi mumkin.

Sinov uchun tayyorlangan GCC ning alohida parallellashtiruvchi filiali, u iplar sonini o'rnatish uchun yangi "-param=num-threads=N" parametrini taklif qiladi. Dastlabki bosqichda biz protseduralararo optimallashtirishni har bir funktsiya uchun tsiklik deb ataladigan va osongina parallellashtirilishi mumkin bo'lgan alohida iplarga o'tkazishni amalga oshirdik. Funksiyalarning bir-biri bilan o'zaro ta'sirini baholaydigan apparatdan mustaqil optimallashtirish uchun mas'ul bo'lgan GIMPLE operatsiyalari alohida mavzularga joylashtirilgan.

Keyingi bosqichda, shuningdek, apparat platformasining xususiyatlarini inobatga olgan holda, protseduralararo RTL optimallashtirishni alohida oqimlarga o'tkazish rejalashtirilgan. Shundan so'ng, biz qo'ng'iroqning o'ziga xos xususiyatlaridan qat'i nazar, funktsiya ichidagi kodga qo'llaniladigan intraprotsessual optimallashtirishlarni (IPA) parallellashtirishni amalga oshirishni rejalashtirmoqdamiz. Hozircha cheklovchi havola axlat yig'uvchisidir, u ko'p tarmoqli rejimda ishlayotganda axlat yig'ish operatsiyalarini o'chirib qo'yadigan global qulfni qo'shdi (kelajakda axlat yig'uvchi GCCning ko'p tarmoqli bajarilishi uchun moslashtiriladi).

Ishlashdagi o'zgarishlarni baholash uchun 100 mingdan ortiq kod satri va 1700 funksiyani o'z ichiga olgan gimple-match.c faylini yig'uvchi test to'plami tayyorlandi. 5 ta jismoniy yadroli va 8250 ta virtual (Hyperthreading) Intel Core i4-8U protsessorli tizimda oΚ»tkazilgan testlar GIMPLE ichidagi protsessual optimallashtirishlarning bajarilish vaqti 7 ta ipni ishga tushirishda 4 dan 2 sekundgacha va 3 sekund ishlaganda 4 soniyagacha kamayganligini koΚ»rsatdi. iplar, ya'ni. Ko'rib chiqilayotgan yig'ish bosqichi tezligini mos ravishda 1.72 va 2.52 baravar oshirishga erishildi. Sinovlar shuni ko'rsatdiki, Hyperthreading bilan virtual yadrolardan foydalanish unumdorlikni oshirishga olib kelmaydi.

GCCga kompilyatsiya jarayonini parallellashtirishni qo'llab-quvvatlash loyihasi

Qurilishning umumiy vaqti taxminan 10% ga qisqardi, ammo prognozlarga ko'ra, RTL optimallashtirishni parallellashtirish yanada aniq natijalarga erishishga imkon beradi, chunki bu bosqich kompilyatsiya paytida sezilarli darajada ko'proq vaqtni oladi. Taxminan RTL parallelizatsiyasidan so'ng, yig'ishning umumiy vaqti 1.61 martaga qisqaradi. Shundan so'ng, IPA optimallashtirishni parallellashtirish orqali qurilish vaqtini yana 5-10% ga qisqartirish mumkin bo'ladi.

GCCga kompilyatsiya jarayonini parallellashtirishni qo'llab-quvvatlash loyihasi

Manba: opennet.ru

a Izoh qo'shish