Verschil Tussen Machine-afhankelijke En Machine-onafhankelijke Code-optimalisatie

Inhoudsopgave:

Verschil Tussen Machine-afhankelijke En Machine-onafhankelijke Code-optimalisatie
Verschil Tussen Machine-afhankelijke En Machine-onafhankelijke Code-optimalisatie

Video: Verschil Tussen Machine-afhankelijke En Machine-onafhankelijke Code-optimalisatie

Video: Verschil Tussen Machine-afhankelijke En Machine-onafhankelijke Code-optimalisatie
Video: Afhankelijke- en onafhankelijke variabele 2024, April
Anonim

Belangrijkste verschil - Machine-afhankelijk versus machine-onafhankelijke code-optimalisatie

Computerprogramma's zijn sets instructies die aan hardware worden gegeven om taken uit te voeren. Deze programma's zijn meestal geschreven in talen van hoog niveau, en de computer begrijpt die taal niet. Daarom wordt een compiler gebruikt om die instructies om te zetten in machinecode of doelcode. Het doorloopt verschillende fasen om de doelcode te bouwen. Code-optimalisatie is er een van. Er zijn twee optimalisatietechnieken, zoals machine-afhankelijke en machine-onafhankelijke code-optimalisatie. Het belangrijkste verschil tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie is dat de machine-afhankelijke optimalisatie wordt toegepast op objectcode, terwijl machine-onafhankelijke code-optimalisatie wordt toegepast op de tussencode.

INHOUD

1. Overzicht en belangrijkste verschil

2. Wat is machine-afhankelijke code-optimalisatie

3. Wat is machine-onafhankelijke code-optimalisatie

4. Overeenkomsten tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie

5. Vergelijking zij aan zij - Machine-afhankelijke versus machine-onafhankelijke code-optimalisatie in tabelvorm

6. Samenvatting

Wat is machine-afhankelijke code-optimalisatie?

Bij het converteren van de broncode naar objectcode of doelcode doorloopt de compiler verschillende fasen. Eerst wordt de broncode aan Lexical analyzer gegeven, die tokens produceert. Vervolgens wordt de uitvoer gegeven aan de syntaxisanalysator die onderzoekt of de gegenereerde tokens in logische volgorde staan. Die output wordt aan de semantische analysator gegeven. Stel dat er een stukje code is als p = q + r;

Hier zijn p, q gehele getallen, maar r is een float. Met behulp van de semantische analysator wordt de c integer-variabele geconverteerd naar een float. Daarom doet het de semantische analyse. De output van de semantische analysator gaat naar de tussenliggende codegenerator. Het retourneert een tussencode die vervolgens naar de code-optimizer gaat. Code-optimalisatie is het proces waarbij de niet-essentiële programma-instructies worden verwijderd zonder de betekenis van de feitelijke broncode te veranderen. Het is geen verplichte optimalisatie, maar het kan de looptijd van de doelcode verbeteren. De uitvoer van de code-optimizer wordt aan de codegenerator gegeven en ten slotte wordt de doelcode gebouwd.

Verschil tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie
Verschil tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie

Figuur 01: fasen van de compiler

Bij machine-afhankelijke code-optimalisatie wordt optimalisatie toegepast op de broncode. Door voldoende middelen toe te wijzen, kan de uitvoering van het programma bij deze optimalisatie worden verbeterd.

Wat is machineonafhankelijke codeoptimalisatie?

Wanneer optimalisatie wordt uitgevoerd op de tussencode, wordt dit de machine-onafhankelijke code-optimalisatie genoemd. Er zijn verschillende technieken om machineonafhankelijke code-optimalisatie te bereiken. Ze worden beschreven aan de hand van de volgende voorbeelden.

Lees de onderstaande regels code.

voor (j = 0; j <10; j ++) {

b = x + 2;

a [j] = 5 * j;

}

Volgens de bovenstaande code wordt b = x + 2 keer op keer berekend in elke iteratie. Als b eenmaal is berekend, verandert deze niet. Deze lijn kan dus als volgt buiten de lus worden geplaatst.

b = x + 2;

voor (j = 0; j <10; j ++)

{a [j] = 5 * j;

}

Dit wordt codebeweging genoemd.

Lees de onderstaande regels code.

j = 5;

if (j == 10) {

a = b + 20;

}

Volgens bovenstaande code zal 'if block' nooit worden uitgevoerd omdat j-waarde nooit gelijk zal zijn aan 10. Het is al geïnitialiseerd op de waarde 5. Daarom kan dit if-blok worden verwijderd. Deze techniek is het elimineren van dode code.

Een andere methode is krachtvermindering. Rekenkundige bewerkingen zoals vermenigvuldiging vereisen meer geheugen, tijd en CPU-cycli. Deze dure uitdrukkingen kunnen worden vervangen door goedkope uitdrukkingen zoals b = a * 2; of kan worden vervangen door optellen, b = a + a;

Raadpleeg de onderstaande code.

voor (j = 1; j <= 5; j ++) {

waarde = j * 5;

}

In plaats van de vermenigvuldiging kan de code als volgt worden gewijzigd.

int temp = 5;

voor (j = 1; j <= 5; j ++) {

temp = temp + 5;

waarde = temp;

}

Het is mogelijk om de uitdrukkingen te evalueren die tijdens runtime constanten zijn. Het wordt constant vouwen genoemd. Er kan worden gezegd zoals b [j + 1] = c [j + 1];

In plaats daarvan kan het als volgt worden gewijzigd.

n = j +1;

b [n] = c [n];

Er kunnen als volgt lussen zijn.

voor (j = 0; j <5; j ++) {

printf ("a / n");

}

voor (j = 0; j <5; j ++) {

printf ("b / n");

}

Als u a en b afdrukt, hebben beide hetzelfde aantal iteraties. Beide kunnen als volgt worden gecombineerd tot één for-lus.

voor (j = 0; j <5; j ++) {

printf ("a / n");

printf ("b / n");

}

Een andere belangrijke techniek is de eliminatie van de gemeenschappelijke subuitdrukking. Het is om de identieke uitdrukkingen te vervangen door een enkele variabele om de berekening uit te voeren. Raadpleeg de balgcode.

a = b * c + k;

d = b * c + m;

Deze code kan als volgt worden omgezet.

temp = b * c;

a = temp + k;

d = temp + m;

Het is niet nodig om b * c steeds opnieuw te berekenen. De vermenigvuldigde waarde kan worden opgeslagen in een variabele en opnieuw worden gebruikt.

Wat is de overeenkomst tussen machine-afhankelijke en machine-onafhankelijke codeoptimalisatie?

Beide behoren tot Code Optimization

Wat is het verschil tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie?

Diff Artikel Midden voor Tafel

Machine-afhankelijk versus machine-onafhankelijke code-optimalisatie

Machine-afhankelijke code-optimalisatie wordt toegepast op objectcode. Machine-onafhankelijke code-optimalisatie wordt toegepast op tussenliggende code.
Betrokkenheid bij hardware
Machine-afhankelijke optimalisatie omvat CPU-registers en absolute geheugenreferenties. Machine-onafhankelijke code-optimalisatie omvat geen CPU-registers of absolute geheugenreferenties.

Samenvatting - Machine-afhankelijke versus machine-onafhankelijke code-optimalisatie

Code-optimalisatie bestaat uit twee optimalisatietechnieken, namelijk machine-afhankelijke en machine-onafhankelijke code-optimalisatie. Het verschil tussen machine-afhankelijke en machine-onafhankelijke code-optimalisatie is dat de machine-afhankelijke optimalisatie wordt toegepast op objectcode, terwijl de machine-onafhankelijke code-optimalisatie wordt toegepast op tussenliggende code.

Download de pdf-versie van Machine Dependent vs Machine Independent Code Optimization

U kunt de PDF-versie van dit artikel downloaden en voor offline doeleinden gebruiken volgens de citatienota. Download hier de pdf-versie. Verschil tussen machine-afhankelijke en machine-onafhankelijke codeoptimalisatie

Aanbevolen: