Разлика между машинно-зависимата и машинно-независимата оптимизация на кода

Съдържание:

Разлика между машинно-зависимата и машинно-независимата оптимизация на кода
Разлика между машинно-зависимата и машинно-независимата оптимизация на кода

Видео: Разлика между машинно-зависимата и машинно-независимата оптимизация на кода

Видео: Разлика между машинно-зависимата и машинно-независимата оптимизация на кода
Видео: Моделирование в Статистике 2024, Ноември
Anonim

Ключова разлика – машинно-зависима срещу машинно-независима оптимизация на кода

Компютърните програми са набори от инструкции, дадени на хардуера за изпълнение на задачи. Тези програми са написани предимно на езици от високо ниво и компютърът не разбира този език. Следователно компилаторът се използва за преобразуване на тези инструкции в машинен код или целеви код. Преминава през няколко фази за изграждане на целевия код. Оптимизацията на кода е един от тях. Има две техники за оптимизация като машинно зависима и машинно независима оптимизация на кода. Ключовата разлика между машинно-зависимата и машинно-независимата оптимизация на кода е, че машинно-зависимата оптимизация се прилага към обектния код, докато машинно-независимата оптимизация на кода се прилага към междинния код.

Какво е машинно-зависима оптимизация на код?

Когато преобразува изходния код в обектен код или целеви код, компилаторът преминава през няколко фази. Първо, изходният код се дава на лексикалния анализатор, който произвежда токени. След това изходът се дава на синтактичния анализатор, който проучва дали генерираните токени са в логически ред. Този резултат се дава на семантичния анализатор. Да приемем, че има част от код като p=q + r;

Тук p, q са цели числа, но r е float. Използвайки семантичния анализатор, целочислената променлива 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;

if (j==10) {

a=b+20;

}

Съгласно горния код, ‘if block’ никога няма да се изпълни, защото j стойността никога няма да бъде равна на 10. Той вече е инициализиран на стойност 5. Следователно този if блок може да бъде премахнат. Тази техника е елиминиране на мъртъв код.

Друг метод е намаляване на силата. Аритметичните операции като умножението изискват повече памет, време и процесорни цикли. Тези скъпи изрази могат да бъдат заменени с евтини изрази като b=a2; или може да се замени със събиране, b=a + a;

Вижте кода по-долу.

за (j=1; j <=5; j ++) {

стойност=j5;

}

Вместо умножението, кодът може да се промени както следва.

int temp=5;

за (j=1; j<=5; j++) {

temp=температура + 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, и двете имат еднакъв брой итерации. И двете могат да се комбинират в един for цикъл, както следва.

за (j=0; j <5; j++) {

printf(“a \n”);

printf(“b\n”);

}

Друга важна техника е елиминирането на общия подизраз. Това е да замените идентичните изрази с една променлива, за да направите изчислението. Вижте кода по-долу.

a=bc + k;

d=b c + m;

Този код може да се конвертира по следния начин.

temp=bc;

a=температура + k;

d=температура + m;

Не е необходимо да изчислявате bc отново и отново. Умножената стойност може да се съхранява в променлива и да се използва повторно.

Каква е приликата между машинно-зависимата и машинно-независимата оптимизация на код?

И двете принадлежат към оптимизацията на кода

Каква е разликата между машинно-зависимата и машинно-независимата оптимизация на код?

Машинозависима срещу машинно независима оптимизация на кода

Машинозависимата оптимизация на кода се прилага към обектния код. Независимата от машината оптимизация на кода се прилага към междинния код.
Участие с хардуер
Машинозависимата оптимизация включва регистри на процесора и препратки към абсолютна памет. Независимата от машината оптимизация на кода не включва регистри на процесора или абсолютни препратки към паметта.

Резюме – Машинно-зависима срещу машинно-независима оптимизация на кода

Оптимизацията на кода се състои от две техники за оптимизация, а именно машинно зависима и машинно независима оптимизация на кода. Разликата между машинно-зависимата и машинно-независимата оптимизация на кода е, че машинно-зависимата оптимизация се прилага към обектния код, докато машинно-независимата оптимизация на кода се прилага към междинния код.

Изтеглете PDF версията на машинно-зависимата срещу машинно-независимата оптимизация на кода

Можете да изтеглите PDF версия на тази статия и да я използвате за офлайн цели според бележката за цитиране. Моля, изтеглете PDF версия тук Разлика между машинно-зависимата и машинно-независимата оптимизация на кода

Препоръчано: