Տարբերությունը մեքենայից կախված և մեքենայական անկախ կոդի օպտիմալացման միջև

Բովանդակություն:

Տարբերությունը մեքենայից կախված և մեքենայական անկախ կոդի օպտիմալացման միջև
Տարբերությունը մեքենայից կախված և մեքենայական անկախ կոդի օպտիմալացման միջև

Video: Տարբերությունը մեքենայից կախված և մեքենայական անկախ կոդի օպտիմալացման միջև

Video: Տարբերությունը մեքենայից կախված և մեքենայական անկախ կոդի օպտիմալացման միջև
Video: Архитектура ЭВМ | Основы Операционных Систем 04 | Ассемблер 2024, Դեկտեմբեր
Anonim

Հիմնական տարբերություն – Մեքենայից կախված ընդդեմ մեքենայի անկախ կոդի օպտիմիզացման

Համակարգչային ծրագրերը հրահանգների մի շարք են, որոնք տրվում են ապարատային, առաջադրանքներ կատարելու համար: Այս ծրագրերը հիմնականում գրված են բարձր մակարդակի լեզուներով, իսկ համակարգիչը չի հասկանում այդ լեզուն։ Հետևաբար, կոմպիլյատորն օգտագործվում է այդ հրահանգները մեքենայի կոդի կամ թիրախային կոդի վերածելու համար: Այն անցնում է մի քանի փուլով, որպեսզի ստեղծվի թիրախային կոդը: Կոդի օպտիմալացումը դրանցից մեկն է: Գոյություն ունեն երկու օպտիմիզացման տեխնիկա, ինչպիսիք են՝ մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացումը: Մեքենայից կախված և մեքենայից անկախ կոդերի օպտիմալացման հիմնական տարբերությունն այն է, որ մեքենայից կախված օպտիմիզացումը կիրառվում է օբյեկտի կոդի վրա, մինչդեռ մեքենայի անկախ կոդի օպտիմալացումը կիրառվում է միջանկյալ կոդի վրա:

Ի՞նչ է մեքենայական կոդերի օպտիմիզացումը:

Կոդը օբյեկտի կամ թիրախային կոդի փոխարկելու ժամանակ կոմպիլյատորն անցնում է մի քանի փուլով: Նախ, սկզբնական կոդը տրվում է 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 տարբերակը այստեղ Տարբերությունը մեքենայից կախված և մեքենայից անկախ կոդի օպտիմալացման միջև

Խորհուրդ ենք տալիս: