Computerprogramma's zijn instructiesets die aan hardware worden gegeven om taken uit te voeren. Deze programma's zijn meestal geschreven in hoogstaande talen 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-afhankelijk en machineonafhankelijke code-optimalisatie. De belangrijk verschil tussen machine-afhankelijke en machine-onafhankelijke code optimalisatie is dat de machine-afhankelijke optimalisatie wordt toegepast op objectcode, terwijl machineonafhankelijke code-optimalisatie wordt toegepast op de tussencode.
1. Overzicht en belangrijkste verschil
2. Wat is computerafhankelijke codeopstelling
3. Wat is Machine Independent Code Optimization?
4. Overeenkomsten tussen machine-afhankelijk en Machine Independent Code Optimization
5. Vergelijking zij aan zij - afhankelijk van de machine versus Onafhankelijke codering van de machine in tabelvorm
6. Samenvatting
Bij het converteren van de broncode naar objectcode of doelcode, doorloopt de compiler verschillende fasen. Eerst wordt de broncode gegeven aan Lexical analyzer die tokens produceert. Vervolgens wordt de uitvoer gegeven aan een syntaxisanalysator die onderzoekt of de gegenereerde tokens in logische volgorde zijn. Die output wordt aan de semantische analysator gegeven. Neem aan dat er een stuk 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-integervariabele geconverteerd naar een float. Daarom doet het de semantische analyse. De uitvoer van de semantische analysator gaat naar de tussencodegenerator. Het retourneert een tussencode die vervolgens naar de code optimizer gaat. Code-optimalisatie is het proces waarbij de niet-essentiële programma-instructies worden geëlimineerd zonder de betekenis van de werkelijke 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 tot slot wordt de doelcode gebouwd.
Figuur 01: Fasen van de compiler
Bij machine-afhankelijke code-optimalisatie wordt optimalisatie toegepast op de broncode. Het toewijzen van voldoende hoeveelheid resources kan de uitvoering van het programma in deze optimalisatie verbeteren.
Wanneer optimalisatie wordt uitgevoerd op de tussencode, wordt dit de computeronafhankelijke code-optimalisatie genoemd. Er zijn verschillende technieken voor het realiseren van machineonafhankelijke code-optimalisatie. Ze worden beschreven aan de hand van de volgende voorbeelden.
Lees de regels van de code in.
voor (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Volgens de bovenstaande code wordt b = x + 2 telkens opnieuw berekend in elke iteratie. Nadat b is berekend, verandert dit niet. Dus, deze lijn kan 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 regels van de code in.
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 naar de waarde 5. Daarom kan dit blok worden verwijderd. Deze techniek is eliminatie van dode code.
Een andere methode is krachtreductie. Rekenkundige bewerkingen zoals vermenigvuldigen 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 optelling, 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 constanten tijdens runtime zijn. Het heet constant vouwen. Er kan worden vermeld 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 lussen zijn als volgt.
voor (j = 0; j<5; j++)
printf ( “\ n”);
voor (j = 0; j <5; j++)
printf ( “b \ n”);
Het afdrukken van a en b, beide hebben hetzelfde aantal herhalingen. Beide kunnen als volgt worden gecombineerd tot één lus.
voor (j = 0; j <5; j++)
printf ("een \ n");
printf ( “b \ n”);
Een andere belangrijke techniek is de Gemeenschappelijke subuitdrukkingsecretie. Het is om de identieke expressies te vervangen door een enkele variabele om de berekening uit te voeren. Raadpleeg de onderstaande code.
a = b * c + k;
d = b * c + m;
Deze code kan als volgt worden geconverteerd.
temp = b * c;
a = temp + k;
d = temp + m;
Het is niet vereist om b * c opnieuw en opnieuw te berekenen. De vermenigvuldigde waarde kan worden opgeslagen in een variabele en opnieuw worden gebruikt.
Afhankelijk van de machine versus onafhankelijke code-optimalisatie van de machine | |
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 houdt geen CPU-registers of absolute geheugenreferenties in. |
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 machineonafhankelijke code-optimalisatie wordt toegepast op de tussencode.
U kunt de PDF-versie van dit artikel downloaden en gebruiken voor offline doeleinden, zoals per citaatnotitie. Download hier de PDF-versie Verschil tussen machine-afhankelijk en Machine Independent Code Optimization
1. "Compilerontwerp | Code optimalisatie. "GeeksforGeeks. Beschikbaar Hier
2.Point, zelfstudies. "Compilerontwerp - Code-optimalisatie." Www.tutorialspoint.com, Tutorials Point, 15 aug. 2017. Beschikbaar Hier
3.Estudies4you. "JNTUH CSE Study Material." Verschil tussen afhankelijk machine en optimalisatie van onafhankelijke code. Beschikbaar Hier
1.'Compiler 'door I, Surachit, (CC BY-SA 3.0) via Commons Wikimedia