Proyekto upang magdagdag ng suporta para sa parallelization ng proseso ng compilation sa GCC

Bilang bahagi ng isang proyekto sa pananaliksik Parallel GCC Nagsimula na ang trabaho na magdagdag ng feature sa GCC na nagbibigay-daan sa proseso ng compilation na hatiin sa ilang magkatulad na mga thread. Sa kasalukuyan, upang mapataas ang bilis ng build sa mga multi-core system, ginagamit ng make utility ang paglulunsad ng mga hiwalay na proseso ng compiler, na bawat isa ay bumubuo ng isang hiwalay na code file. Ang bagong proyekto ay nag-eeksperimento sa pagbibigay ng parallelization sa antas ng compiler, na potensyal na mapabuti ang pagganap sa mga multi-core system.

Para sa pagsubok or pagsusuri pinaghandaan isang hiwalay na parallelizing branch ng GCC, na nag-aalok ng bagong parameter na "β€”param=num-threads=N" upang itakda ang bilang ng mga thread. Sa paunang yugto, ipinatupad namin ang paglipat ng mga interprocedural na pag-optimize sa magkakahiwalay na mga thread, na tinatawag na cyclically para sa bawat function at madaling maiparallelize. Ang mga operasyon ng GIMPLE na responsable para sa mga hardware-independent optimization na sinusuri ang pakikipag-ugnayan ng mga function sa isa't isa ay inilalagay sa magkahiwalay na mga thread.

Sa susunod na yugto, pinlano din na ilipat ang mga interprocedural RTL optimization sa magkahiwalay na mga thread, na isinasaalang-alang ang mga katangian ng hardware platform. Pagkatapos noon, plano naming ipatupad ang parallelization ng intraprocedural optimizations (IPA) na inilapat sa code sa loob ng function, anuman ang mga detalye ng tawag. Ang naglilimitang link sa ngayon ay ang garbage collector, na nagdagdag ng pandaigdigang lock na hindi pinapagana ang mga operasyon sa pangongolekta ng basura habang tumatakbo sa multi-threaded mode (sa hinaharap ang garbage collector ay iaakma para sa multi-threaded execution ng GCC).

Upang suriin ang mga pagbabago sa performance, isang test suite ang inihanda na nag-assemble ng gimple-match.c file, na kinabibilangan ng higit sa 100 libong linya ng code at 1700 function. Ang mga pagsubok sa isang system na may Intel Core i5-8250U CPU na may 4 na pisikal na core at 8 virtual (Hyperthreading) ay nagpakita ng pagbaba sa oras ng pagpapatupad ng Intra Procedural GIMPLE optimization mula 7 hanggang 4 na segundo kapag nagpapatakbo ng 2 thread at hanggang 3 segundo kapag tumatakbo sa 4 mga thread, i.e. Ang isang pagtaas sa bilis ng yugto ng pagpupulong na isinasaalang-alang ay nakamit ng 1.72 at 2.52 beses, ayon sa pagkakabanggit. Ipinakita rin ng mga pagsubok na ang paggamit ng mga virtual na core na may Hyperthreading ay hindi humahantong sa pagtaas ng pagganap.

Proyekto upang magdagdag ng suporta para sa parallelization ng proseso ng compilation sa GCC

Ang kabuuang oras ng pagbuo ay nabawasan ng humigit-kumulang 10%, ngunit ayon sa mga pagtataya, ang pag-parallelize ng mga pag-optimize ng RTL ay magbibigay-daan sa pagkamit ng mas nakikitang mga resulta, dahil ang yugtong ito ay tumatagal ng mas maraming oras sa panahon ng compilation. Tinatayang pagkatapos ng parallelization ng RTL, ang kabuuang oras ng pagpupulong ay mababawasan ng 1.61 beses. Pagkatapos nito, posibleng bawasan ang oras ng pagbuo ng isa pang 5-10% sa pamamagitan ng pag-parallelize ng mga IPA optimization.

Proyekto upang magdagdag ng suporta para sa parallelization ng proseso ng compilation sa GCC

Pinagmulan: opennet.ru

Magdagdag ng komento