Ծրագիր՝ ավելացնելու աջակցություն GCC-ին կազմման գործընթացի զուգահեռացման համար

Որպես հետազոտական ​​նախագծի մի մաս Զուգահեռ GCC Աշխատանքները սկսվել են GCC-ին մի ֆունկցիա ավելացնելու համար, որը թույլ է տալիս կոմպիլյացիայի գործընթացը բաժանել մի քանի զուգահեռ թելերի: Ներկայումս բազմամիջուկ համակարգերի վրա կառուցման արագությունը մեծացնելու համար make utility-ն օգտագործում է առանձին կոմպիլյատորների գործընթացների գործարկում, որոնցից յուրաքանչյուրը ստեղծում է առանձին կոդային ֆայլ: Նոր նախագիծը փորձարկում է կոմպիլյատորների մակարդակում զուգահեռացում ապահովելու ուղղությամբ, ինչը պոտենցիալ կբարելավի բազմաբնույթ համակարգերի աշխատանքը:

Փորձարկման համար պատրաստված GCC-ի առանձին զուգահեռացնող ճյուղ, որն առաջարկում է նոր պարամետր «—param=num-threads=N»՝ թելերի քանակը սահմանելու համար։ Սկզբնական փուլում մենք իրականացրեցինք միջընթացակարգային օպտիմալացումների փոխանցումը առանձին թելերի մեջ, որոնք կոչվում են ցիկլային կարգով յուրաքանչյուր ֆունկցիայի համար և կարելի է հեշտությամբ զուգահեռացնել։ GIMPLE գործողությունները, որոնք պատասխանատու են ապարատային անկախ օպտիմալացումների համար, որոնք գնահատում են ֆունկցիաների փոխազդեցությունը միմյանց հետ, տեղադրվում են առանձին թելերում:

Հաջորդ փուլում նախատեսվում է նաև միջգործընթացային RTL օպտիմալացումները տեղափոխել առանձին թելեր՝ հաշվի առնելով ապարատային հարթակի բնութագրերը։ Դրանից հետո մենք նախատեսում ենք իրականացնել ֆունկցիայի ներսում կոդի վրա կիրառվող ներգործընթացային օպտիմալացումների (IPA) զուգահեռացում՝ անկախ զանգի առանձնահատկություններից։ Առայժմ սահմանափակող օղակը աղբահանողն է, որն ավելացրել է գլոբալ կողպեք, որն անջատում է աղբի հավաքման գործողությունները բազմաթելային ռեժիմով աշխատելիս (ապագայում աղբահավաքիչը կհարմարեցվի GCC-ի բազմաթելային կատարման համար):

Կատարման փոփոխությունները գնահատելու համար պատրաստվել է թեստային փաթեթ, որը հավաքում է gimple-match.c ֆայլը, որը ներառում է ավելի քան 100 հազար տող կոդ և 1700 գործառույթ։ 5 ֆիզիկական միջուկներով և 8250 վիրտուալ (Hyperthreading) Intel Core i4-8U պրոցեսորով համակարգի վրա փորձարկումները ցույց են տվել Intra Procedural GIMPLE օպտիմալացումների կատարման ժամանակի նվազում 7-ից 4 վայրկյան, երբ աշխատում է 2 թեմա և մինչև 3 վայրկյան, երբ աշխատում է 4-ը: թելեր, այսինքն. Դիտարկվող հավաքման փուլի արագության աճը ձեռք է բերվել համապատասխանաբար 1.72 և 2.52 անգամ: Թեստերը նաև ցույց են տվել, որ Hyperthreading-ով վիրտուալ միջուկների օգտագործումը չի հանգեցնում կատարողականի բարձրացման:

Ծրագիր՝ ավելացնելու աջակցություն GCC-ին կազմման գործընթացի զուգահեռացման համար

Ընդհանուր կառուցման ժամանակը կրճատվել է մոտավորապես 10%-ով, սակայն, ըստ կանխատեսումների, RTL-ի օպտիմալացումների զուգահեռացումը թույլ կտա ավելի շոշափելի արդյունքների հասնել, քանի որ այս փուլը զգալիորեն ավելի շատ ժամանակ է պահանջում կազմման ընթացքում: Մոտավորապես RTL-ի զուգահեռացումից հետո հավաքման ընդհանուր ժամանակը կկրճատվի 1.61 անգամ: Դրանից հետո հնարավոր կլինի կրճատել կառուցման ժամանակը ևս 5-10%-ով՝ զուգահեռելով IPA-ի օպտիմալացումները։

Ծրագիր՝ ավելացնելու աջակցություն GCC-ին կազմման գործընթացի զուգահեռացման համար

Source: opennet.ru

Добавить комментарий