Pagrindinis skirtumas - nuo mašinos priklausomas ir nuo mašinos nepriklausomas kodo optimizavimas
Kompiuterinės programos yra nurodymai, pateikti aparatinei įrangai, atlikti užduotis. Šios programos dažniausiai rašomos aukšto lygio kalbomis, o kompiuteris tos kalbos nesupranta. Todėl kompiliatorius naudojamas paversti tas instrukcijas mašininiu ar tiksliniu kodu. Norint sukurti tikslinį kodą, jis eina per kelis etapus. Kodo optimizavimas yra vienas iš jų. Yra du optimizavimo būdai, pavyzdžiui, nuo mašinos priklausomas ir nuo mašinos nepriklausomas kodo optimizavimas. Esminis skirtumas tarp mašinos priklausomo ir nuo mašinos nepriklausomo kodo optimizavimo yra tas, kad objekto kodui taikoma nuo mašinos priklausanti optimizacija, o tarpiniam kodui - nepriklausoma nuo mašinos.
TURINYS
1. Apžvalga ir pagrindiniai skirtumai
2. Kas yra nuo mašinos priklausomo kodo optimizavimas
3. Kas yra nuo mašinos nepriklausomas kodo optimizavimas
4. Panašumai tarp mašinų priklausomų ir nuo mašinų nepriklausomų kodų optimizavimo
5. Gretimas palyginimas - priklausomas nuo mašinos ir nuo mašinos nepriklausomas kodo optimizavimas lentelių pavidalu
6. Santrauka
Kas yra nuo mašinos priklausomo kodo optimizavimas?
Konvertuodamas šaltinio kodą į objekto kodą arba tikslinį kodą, kompiliatorius pereina kelis etapus. Pirma, šaltinio kodas suteikiamas leksiniam analizatoriui, kuris gamina žetonus. Tada išvestis suteikiama sintaksės analizatoriui, kuris tiria, ar sugeneruoti žetonai yra logine tvarka. Ta išvestis suteikiama semantiniam analizatoriui. Tarkime, kad yra kodo dalis kaip p = q + r;
Čia p, q yra sveiki skaičiai, bet r yra plūdė. Naudojant semantinį analizatorių, c sveiko skaičiaus kintamasis paverčiamas plūdine. Todėl ji atlieka semantinę analizę. Semantinio analizatoriaus išvestis eina į tarpinio kodo generatorių. Jis grąžina tarpinį kodą, kuris tada eina į kodo optimizavimo priemonę. Kodo optimizavimas yra neesminių programos sakinių pašalinimo procesas, nekeičiant tikrojo šaltinio kodo reikšmės. Tai nėra privalomas optimizavimas, tačiau jis gali pagerinti tikslinio kodo veikimo laiką. Kodo optimizatoriaus išvestis suteikiama kodų generatoriui ir galiausiai sukuriamas tikslinis kodas.
01 pav. Kompiliatoriaus fazės
Optimizuojant nuo mašinos kodą, optimizavimas taikomas šaltinio kodui. Skiriant pakankamai išteklių, galima pagerinti programos vykdymą atliekant šį optimizavimą.
Kas yra nuo mašinos nepriklausomas kodo optimizavimas?
Kai atliekamas tarpinio kodo optimizavimas, jis vadinamas mašinos nepriklausomu kodo optimizavimu. Yra įvairių būdų, kaip pasiekti automatinį kodo optimizavimą. Jie aprašyti naudojant šiuos pavyzdžius.
Perskaitykite žemiau esančias kodo eilutes.
už (j = 0; j <10; j ++) {
b = x + 2;
a [j] = 5 * j;
}
Pagal pirmiau pateiktą kodą b = x + 2 skaičiuojamas vėl ir vėl kiekvienoje iteracijoje. Apskaičiavus b, jis nesikeičia. Taigi, ši linija gali būti dedama už kilpos taip.
b = x + 2;
už (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Tai vadinama kodo judėjimu.
Perskaitykite žemiau esančias kodo eilutes.
j = 5;
jei (j == 10) {
a = b + 20;
}
Pagal pirmiau pateiktą kodą „if block“niekada nevykdys, nes j vertė niekada nebus lygi 10. Ji jau inicializuota į reikšmę 5. Taigi, jei bloką galima pašalinti. Ši technika yra negyvas kodo pašalinimas.
Kitas metodas yra stiprumo mažinimas. Aritmetinėms operacijoms, tokioms kaip dauginimas, reikia daugiau atminties, laiko ir procesoriaus ciklų. Šias brangias išraiškas galima pakeisti tokiomis pigiomis išraiškomis kaip b = a * 2; arba gali būti pakeistas pridėjimu, b = a + a;
Žr. Žemiau pateiktą kodą.
už (j = 1; j <= 5; j ++) {
vertė = j * 5;
}
Vietoj padauginimo kodą galima pakeisti taip.
int temp = 5;
už (j = 1; j <= 5; j ++) {
temp = temp + 5;
reikšmė = temp;
}
Galima įvertinti išraiškas, kurios yra konstantos vykdymo metu. Tai vadinama nuolatiniu lankstymu. Galima teigti, kad b [j + 1] = c [j + 1];
Vietoj to, jį galima pakeisti taip.
n = j +1;
b [n] = c [n];
Kilpos gali būti tokios.
už (j = 0; j <5; j ++) {
printf („a / n“);
}
už (j = 0; j <5; j ++) {
printf („b / n“);
}
Spausdinant a ir b, abiejų versijų skaičius yra vienodas. Abi gali būti sujungtos į vieną kilpai taip.
už (j = 0; j <5; j ++) {
printf („a / n“);
printf („b / n“);
}
Kita svarbi technika yra „Common sub express“pašalinimas. Skaičiavimui reikia pakeisti tapačias išraiškas vienu kintamuoju. Nurodykite žemiau pateiktą kodą.
a = b * c + k;
d = b * c + m;
Šį kodą galima konvertuoti taip.
temp = b * c;
a = temp + k;
d = temp + m;
Nereikia vėl ir vėl skaičiuoti b * c. Padaugintą vertę galima išsaugoti kintamajame ir pakartotinai naudoti.
Kuo panašus yra mašinų priklausomas ir nepriklausomas nuo mašinos optimizavimas?
Abu jie priklauso kodo optimizavimui
Koks skirtumas tarp nuo mašinos priklausomo ir nuo mašinos nepriklausomo kodo optimizavimo?
Skirtingas straipsnis viduryje prieš lentelę
Mašinos priklausomybė nuo mašinos nepriklausomo kodo optimizavimo |
|
Objekto kodui taikoma nuo mašinos priklausanti kodo optimizacija. | Tarpiniam kodui taikoma nuo mašinos nepriklausoma kodo optimizacija. |
Įtraukimas į aparatinę įrangą | |
Nuo mašinos priklausomas optimizavimas apima procesoriaus registrus ir absoliučios atminties nuorodas. | Mašinos nepriklausomas kodo optimizavimas neapima procesoriaus registrų ar absoliučios atminties nuorodų. |
Santrauka - nuo mašinos priklausomas ir nuo mašinos nepriklausomas kodo optimizavimas
Kodo optimizavimas susideda iš dviejų optimizavimo būdų, būtent nuo mašinos priklausomo ir nuo mašinos nepriklausomo kodo optimizavimo. Skirtumas tarp nuo mašinos priklausomo ir nuo mašinos nepriklausomo kodo optimizavimo yra tas, kad objekto kodui taikoma nuo mašinos priklausanti optimizacija, o tarpiniam kodui - nuo mašinos nepriklausoma kodo optimizacija.
Atsisiųskite „Machine Dependent vs Machine Independent Code Optimization“PDF versiją
Galite atsisiųsti šio straipsnio PDF versiją ir naudoti ją neprisijungus, kaip nurodyta citatos pastaboje. Atsisiųskite PDF versiją čia Skirtumas tarp priklausomų nuo mašinų ir nuo mašinų nepriklausomo kodo optimizavimo