Հիմնական տարբերություն – Մեքենայից կախված ընդդեմ մեքենայի անկախ կոդի օպտիմիզացման
Համակարգչային ծրագրերը հրահանգների մի շարք են, որոնք տրվում են ապարատային, առաջադրանքներ կատարելու համար: Այս ծրագրերը հիմնականում գրված են բարձր մակարդակի լեզուներով, իսկ համակարգիչը չի հասկանում այդ լեզուն։ Հետևաբար, կոմպիլյատորն օգտագործվում է այդ հրահանգները մեքենայի կոդի կամ թիրախային կոդի վերածելու համար: Այն անցնում է մի քանի փուլով, որպեսզի ստեղծվի թիրախային կոդը: Կոդի օպտիմալացումը դրանցից մեկն է: Գոյություն ունեն երկու օպտիմիզացման տեխնիկա, ինչպիսիք են՝ մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացումը: Մեքենայից կախված և մեքենայից անկախ կոդերի օպտիմալացման հիմնական տարբերությունն այն է, որ մեքենայից կախված օպտիմիզացումը կիրառվում է օբյեկտի կոդի վրա, մինչդեռ մեքենայի անկախ կոդի օպտիմալացումը կիրառվում է միջանկյալ կոդի վրա:
Ի՞նչ է մեքենայական կոդերի օպտիմիզացումը:
Կոդը օբյեկտի կամ թիրախային կոդի փոխարկելու ժամանակ կոմպիլյատորն անցնում է մի քանի փուլով: Նախ, սկզբնական կոդը տրվում է Lexical անալիզատորին, որն արտադրում է նշաններ: Այնուհետև ելքը տրվում է շարահյուսական անալիզատորին, որը ուսումնասիրում է, թե արդյոք գեներացված նշանները գտնվում են տրամաբանական կարգի մեջ: Այդ ելքը տրվում է իմաստային անալիզատորին։ Ենթադրենք, որ կա կոդի մի կտոր p=q + r;
Այստեղ p, q-ն ամբողջ թվեր են, բայց r-ը լողացող է: Օգտագործելով իմաստային անալիզատորը, c ամբողջ թվային փոփոխականը վերածվում է float-ի: Հետևաբար, այն կատարում է իմաստային վերլուծություն: Իմաստային անալիզատորի ելքը գնում է միջանկյալ կոդերի գեներատոր: Այն վերադարձնում է միջանկյալ կոդ, որն այնուհետև գնում է կոդի օպտիմիզատոր: Կոդի օպտիմիզացումը ոչ էական ծրագրային հայտարարությունների վերացման գործընթաց է՝ առանց իրական աղբյուրի կոդի իմաստը փոխելու: Դա պարտադիր օպտիմիզացում չէ, բայց կարող է բարելավել թիրախային կոդի գործարկման ժամանակը:Կոդի օպտիմիզատորի ելքը տրվում է կոդի գեներատորին, և վերջապես ստեղծվում է թիրախային կոդը:
Նկար 01. Կազմողի փուլեր
Մեքենայից կախված կոդերի օպտիմիզացման ժամանակ օպտիմալացումը կիրառվում է սկզբնաղբյուրի վրա: Բավարար քանակությամբ ռեսուրսների հատկացումը կարող է բարելավել ծրագրի կատարումն այս օպտիմալացման մեջ:
Ի՞նչ է մեքենայական անկախ կոդի օպտիմիզացումը:
Երբ օպտիմիզացումը կատարվում է միջանկյալ կոդի վրա, այն կոչվում է մեքենայի անկախ կոդի օպտիմալացում: Մեքենայից անկախ կոդի օպտիմիզացման հասնելու տարբեր մեթոդներ կան: Դրանք նկարագրված են հետևյալ օրինակներով։
Կարդացեք կոդի հետևյալ տողերը:
համար (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Ըստ վերոնշյալ կոդի b=x+2-ը կրկին ու կրկին հաշվարկվում է յուրաքանչյուր կրկնության մեջ: Երբ b-ն հաշվարկվի, այն չի փոխվում: Այսպիսով, այս տողը կարող է տեղադրվել օղակից դուրս հետևյալ կերպ.
b=x+2;
համար (j=0; j< 10; j++)
{a[j]=5j;
}
Սա կոչվում է կոդի շարժում:
Կարդացեք կոդի հետևյալ տողերը:
j=5;
եթե (j==10) {
a=b+20;
}
Ըստ վերը նշված կոդի՝ «եթե բլոկը» երբեք չի գործարկվի, քանի որ j արժեքը երբեք հավասար չի լինի 10-ի: Այն արդեն իսկ սկզբնավորվել է 5-ի արժեքով: Հետևաբար, եթե բլոկը կարող է հեռացվել: Այս տեխնիկան մեռած կոդերի վերացում է:
Մյուս մեթոդը ուժի նվազեցումն է: Բազմապատկման նման թվաբանական գործողությունները պահանջում են ավելի շատ հիշողություն, ժամանակ և պրոցեսորի ցիկլեր: Այս թանկարժեք արտահայտությունները կարող են փոխարինվել էժան արտահայտություններով, ինչպիսիք են b=a2; կամ կարող է փոխարինվել գումարմամբ, b=a + a;
Դիտեք ստորև բերված կոդը:
համար (j=1; j <=5; j ++) {
արժեք=j5;
}
Բազմապատկման փոխարեն կոդը կարելի է փոխել հետևյալ կերպ.
int ջերմաստիճան=5;
համար (j=1; j<=5; j++) {
ջերմաստիճան=ջերմաստիճան + 5;
արժեք=ջերմաստիճան;
}
Հնարավոր է գնահատել այն արտահայտությունները, որոնք հաստատուն են գործարկման ժամանակ: Այն կոչվում է մշտական ծալում: Այնտեղ կարելի է նշել, ինչպիսիք են b[j+1]=c [j+1];
Փոխարենը, այն կարելի է փոխել հետևյալ կերպ.
n=j +1;
b[n]=c[n];
Կարող են լինել հետևյալ օղակները.
համար (j=0; j<5; j++) {
printf(«a\n»);
}
համար (j=0; j <5; j++) {
printf(«b\n»);
}
Տպել a և b, երկուսն էլ ունեն նույն թվով կրկնություններ: Երկուսն էլ կարող են համակցվել մեկ օղակի հետ հետևյալ կերպ:
համար (j=0; j <5; j++) {
printf(«a \n»);
printf(«b\n»);
}
Մեկ այլ կարևոր տեխնիկա է Common sub-արտահայտության վերացումը: Այն պետք է փոխարինել նույնական արտահայտությունները մեկ փոփոխականով՝ հաշվարկը կատարելու համար: Տե՛ս ստորև նշված կոդը։
a=bc + k;
d=b c + m;
Այս կոդը կարող է փոխակերպվել հետևյալ կերպ.
ջերմաստիճան=bc;
a=ջերմաստիճան + k;
d=ջերմաստիճան + մ;
Պարտադիր չէ կրկին ու կրկին հաշվարկել bc: Բազմապատկված արժեքը կարող է պահվել փոփոխականում և նորից օգտագործվել։
Ո՞րն է նմանությունը մեքենայական կախվածության և մեքենայից անկախ կոդի օպտիմալացման միջև:
Երկուսն էլ պատկանում են կոդի օպտիմալացմանը
Ո՞րն է տարբերությունը մեքենայից կախված և մեքենայից անկախ ծածկագրի օպտիմալացման միջև:
Մեքենայից կախված ընդդեմ մեքենայի անկախ կոդի օպտիմիզացում |
|
Մեքենայից կախված կոդի օպտիմիզացում կիրառվում է օբյեկտի կոդի վրա: | Մեքենայից անկախ կոդի օպտիմիզացում կիրառվում է միջանկյալ կոդի վրա: |
Ներգրավվածություն Սարքավորումների հետ | |
Մեքենայից կախված օպտիմալացումը ներառում է պրոցեսորի ռեգիստրներ և բացարձակ հիշողության հղումներ: | Մեքենայից անկախ կոդի օպտիմալացումը չի ներառում պրոցեսորի ռեգիստրներ կամ բացարձակ հիշողության հղումներ: |
Ամփոփում – Մեքենայից կախված ընդդեմ մեքենայի անկախ կոդերի օպտիմիզացում
Կոդերի օպտիմիզացումը բաղկացած է երկու օպտիմիզացման տեխնիկայից, մասնավորապես՝ մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացումից: Մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացման միջև տարբերությունն այն է, որ մեքենայից կախված օպտիմիզացումը կիրառվում է օբյեկտի կոդի վրա, մինչդեռ մեքենայի անկախ կոդի օպտիմալացումը կիրառվում է միջանկյալ կոդի վրա:
Ներբեռնեք Machine Dependent vs Machine Independent Code Optimization-ի PDF տարբերակը
Դուք կարող եք ներբեռնել այս հոդվածի PDF տարբերակը և օգտագործել այն անցանց նպատակներով՝ ըստ մեջբերումների: Խնդրում ենք ներբեռնել PDF տարբերակը այստեղ Տարբերությունը մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացման միջև