Sleutelverskil – Masjienafhanklike vs Masjien-onafhanklike kodeoptimalisering
Rekenaarprogramme is stelle instruksies wat aan hardeware gegee word om take uit te voer. Hierdie programme word meestal in hoëvlaktale geskryf, en die rekenaar verstaan nie daardie taal nie. Daarom word 'n samesteller gebruik om daardie instruksies in masjienkode of teikenkode om te skakel. Dit gaan deur verskeie fases om die teikenkode te bou. Kode-optimalisering is een van hulle. Daar is twee optimaliseringstegnieke soos, masjienafhanklike en masjienonafhanklike kodeoptimalisering. Die sleutelverskil tussen masjienafhanklike en masjienonafhanklike kodeoptimalisering is dat die masjienafhanklike optimalisering op objekkode toegepas word, terwyl masjienonafhanklike kodeoptimalisering op die tussenkode toegepas word.
Wat is masjienafhanklike kode-optimering?
Wanneer die bronkode na objekkode of teikenkode omgeskakel word, gaan die samesteller deur verskeie fases. Eerstens word die bronkode aan Lexical analiseerder gegee wat tokens produseer. Dan word die uitset gegee aan sintaksanaliseerder wat ondersoek of die gegenereerde tokens in logiese volgorde is. Daardie uitset word aan die semantiese ontleder gegee. Aanvaar dat daar 'n stukkie kode is as p=q + r;
Hier is p, q heelgetalle, maar r is 'n dryfveer. Deur die semantiese ontleder te gebruik, word die c heelgetalveranderlike omgeskakel na 'n float. Daarom doen dit die semantiese ontleding. Die uitset van die semantiese ontleder gaan na die Intermediêre kodegenerator. Dit gee 'n intermediêre kode terug wat dan na kode-optimaliseerder gaan. Kode-optimering is die proses om die nie-noodsaaklike programstellings uit te skakel sonder om die betekenis van werklike bronkode te verander. Dit is nie 'n verpligte optimalisering nie, maar dit kan die looptyd van die teikenkode verbeter. Die uitset van die kode-optimeerder word aan die kodegenerator gegee, en uiteindelik word die teikenkode gebou.
Figuur 01: Fases van die samesteller
In masjienafhanklike kode-optimering word optimalisering op die bronkode toegepas. Die toekenning van voldoende hoeveelheid hulpbronne kan die uitvoering van die program in hierdie optimalisering verbeter.
Wat is masjienonafhanklike kodeoptimering?
Wanneer optimalisering op die tussenkode gedoen word, word dit die masjienonafhanklike kodeoptimering genoem. Daar is verskillende tegnieke vir die bereiking van masjien-onafhanklike kode-optimalisering. Hulle word beskryf deur die volgende voorbeelde te gebruik.
Lees onderste reëls kode.
vir (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Volgens bogenoemde kode word b=x+2 telkens in elke iterasie bereken. Sodra b bereken is, verander dit nie. Dus, hierdie lyn kan soos volg buite die lus geplaas word.
b=x+2;
vir (j=0; j< 10; j++)
{a[j]=5j;
}
Dit word kodebeweging genoem.
Lees onderste reëls kode.
j=5;
if (j==10) {
a=b+20;
}
Volgens bogenoemde kode sal 'if blok' nooit uitgevoer word nie, want j waarde sal nooit gelyk wees aan 10 nie. Dit is reeds geïnisialiseer na die waarde 5. Daarom kan hierdie as blok verwyder word. Hierdie tegniek is uitskakeling van dooie kode.
Nog 'n metode is sterktevermindering. Rekenkundige bewerkings soos vermenigvuldiging vereis meer geheue, tyd en SVE-siklusse. Hierdie duur uitdrukkings kan vervang word deur goedkoop uitdrukkings soos b=a2; of kan vervang word deur optelling, b=a + a;
Verwys die onderstaande kode.
vir (j=1; j <=5; j ++) {
value=j5;
}
In plaas van die vermenigvuldiging, kan die kode soos volg verander word.
int temp=5;
vir (j=1; j<=5; j++) {
temp=temp + 5;
waarde=temperatuur;
}
Dit is moontlik om die uitdrukkings wat konstantes is tydens looptyd te evalueer. Dit word konstante vou genoem. Daar kan gestel word soos b[j+1]=c [j+1];
In plaas daarvan kan dit soos volg verander word.
n=j +1;
b[n]=c[n];
Daar kan lusse soos volg wees.
vir (j=0; j<5; j++) {
printf(“a\n”);
}
vir (j=0; j <5; j++) {
printf(“b\n”);
}
Druk van a en b, het albei dieselfde aantal iterasies. Albei kan soos volg tot een vir lus gekombineer word.
vir (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Nog 'n belangrike tegniek is die uitskakeling van die algemene sub-uitdrukking. Dit is om die identiese uitdrukkings met 'n enkele veranderlike te vervang om die berekening te doen. Verwys na die onderstaande kode.
a=bc + k;
d=b c + m;
Hierdie kode kan soos volg omgeskakel word.
temp=bc;
a=temp + k;
d=temp + m;
Dit is nie nodig om bc weer en weer te bereken nie. Die vermenigvuldigde waarde kan in 'n veranderlike gestoor en hergebruik word.
Wat is die ooreenkoms tussen masjienafhanklike en masjienonafhanklike kodeoptimalisering?
Albei hierdie behoort aan kode-optimering
Wat is die verskil tussen masjienafhanklike en masjienonafhanklike kodeoptimalisering?
Masjinafhanklike vs Masjien-onafhanklike kode-optimering |
|
Masjienafhanklike kode-optimering word op objekkode toegepas. | Masjien-onafhanklike kode-optimering word op intermediêre kode toegepas. |
Betrokkenheid by hardeware | |
Masjienafhanklike optimalisering behels SVE-registers en absolute geheueverwysings. | Masjinonafhanklike kode-optimering behels nie SVE-registers of absolute geheueverwysings nie. |
Opsomming – Masjienafhanklike vs Masjien-onafhanklike kodeoptimalisering
Kode-optimering bestaan uit twee optimaliseringstegnieke, naamlik masjienafhanklike en masjienonafhanklike kodeoptimering. Die verskil tussen masjienafhanklike en masjienonafhanklike kodeoptimalisering is dat die masjienafhanklike optimalisering op objekkode toegepas word, terwyl die masjienonafhanklike kodeoptimalisering op intermediêre kode toegepas word.
Laai die PDF-weergawe van Masjienafhanklike vs Masjien-onafhanklike kodeoptimering af
Jy kan die PDF-weergawe van hierdie artikel aflaai en dit vir vanlyn doeleindes gebruik soos per aanhalingsnota. Laai asseblief PDF-weergawe hier af Verskil tussen masjienafhanklike en masjienonafhanklike kodeoptimalisering