Основна разлика - машинно зависима от машинно независима оптимизация на кода
Компютърните програми са набор от инструкции, дадени на хардуера за изпълнение на задачи. Тези програми са написани най-вече на езици на високо ниво и компютърът не разбира този език. Следователно се използва компилатор за преобразуване на тези инструкции в машинен код или целеви код. Той преминава през няколко фази за изграждане на целевия код. Оптимизацията на кода е един от тях. Има две техники за оптимизация като машинно зависима и машинна независима оптимизация на кода. Ключовата разлика между машинно зависима и машинно независима оптимизация на кода е, че машинно зависимата оптимизация се прилага към обектния код, докато машинно независимата оптимизация на кода се прилага към междинния код.
СЪДЪРЖАНИЕ
1. Общ преглед и ключова разлика
2. Какво е машинно зависима оптимизация на кода
3. Какво е машинно независима оптимизация на кода
4. Прилики между машинно зависима и машинно независима оптимизация на кода
5. Равно до сравнение - машинно зависима от машинна независима оптимизация на кода в таблична форма
6. Обобщение
Какво е машинно зависима оптимизация на кода?
Когато преобразува изходния код в обектен код или целеви код, компилаторът преминава през няколко фази. Първо, изходният код се дава на Lexical analyzer, който произвежда жетони. След това изходът се дава на анализатора на синтаксиса, който изследва дали генерираните маркери са в логически ред. Този изход се дава на семантичния анализатор. Да приемем, че има парче код като p = q + r;
Тук p, q са цели числа, но r е поплавък. С помощта на семантичния анализатор променливата c integer се преобразува в плаваща. Следователно той извършва семантичния анализ. Изходът на семантичния анализатор отива към междинния генератор на код. Той връща междинен код, който след това отива в оптимизатора на кода. Оптимизацията на кода е процес на премахване на несъществените програмни изявления, без да се променя значението на действителния изходен код. Това не е задължително оптимизиране, но може да подобри времето за работа на целевия код. Изходът на оптимизатора на кода се дава на генератора на кода и накрая се изгражда целевият код.
Фигура 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] = 5 * j;
}
Това се нарича движение на кода.
Прочетете долните редове код.
j = 5;
ако (j == 10) {
a = b + 20;
}
Съгласно горния код, 'if block' никога няма да се изпълни, защото j стойността никога няма да бъде равна на 10. Тя вече е инициализирана до стойността 5. Следователно това, ако блокът може да бъде премахнат. Тази техника е премахване на мъртъв код.
Друг метод е намаляването на силата. Аритметичните операции като умножение изискват повече памет, време и цикли на процесора. Тези скъпи изрази могат да бъдат заменени с евтини изрази като b = a * 2; или може да бъде заменено с добавяне, b = a + a;
Вижте кода по-долу.
за (j = 1; j <= 5; j ++) {
стойност = j * 5;
}
Вместо умножението, кодът може да се промени, както следва.
int temp = 5;
за (j = 1; j <= 5; j ++) {
temp = 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, и двата имат еднакъв брой итерации. И двете могат да се комбинират в един за цикъл, както следва.
за (j = 0; j <5; j ++) {
printf („a / n“);
printf (“b / n”);
}
Друга важна техника е елиминирането на Common sub expression. Това е да замените идентичните изрази с една променлива, за да направите изчислението. Вижте долния код.
a = b * c + k;
d = b * c + m;
Този код може да бъде преобразуван, както следва.
temp = b * c;
a = temp + k;
d = temp + m;
Не е необходимо да се изчислява b * c отново и отново. Умножената стойност може да се съхранява в променлива и да се използва повторно.
Каква е приликата между машинно зависима и независима от машината оптимизация на кода?
И двете принадлежат на кодовата оптимизация
Каква е разликата между машинно зависимата и машинно независимата оптимизация на кода?
Различна статия Средна преди таблица
Зависима от машината срещу Независима от машината оптимизация на кода |
|
Машинно зависима оптимизация на код се прилага към обектния код. | Независима от машината оптимизация на кода се прилага към междинен код. |
Участие с хардуер | |
Машинно зависимата оптимизация включва регистрите на процесора и абсолютни препратки към паметта. | Машинно независимата оптимизация на кода не включва CPU регистри или абсолютни препратки към паметта. |
Резюме - Оптимизация на машината, зависима от машината, независимо от машината
Оптимизацията на кода се състои от две техники за оптимизация, а именно машинна зависимост и машинна независима оптимизация на кода. Разликата между машинно зависима и машинно независима оптимизация на кода е, че машинно зависимата оптимизация се прилага към обектния код, докато машинно независимата оптимизация на кода се прилага към междинен код.
Изтеглете PDF версията на Machine Dependent vs Machine Independent Code Optimization
Можете да изтеглите PDF версия на тази статия и да я използвате за офлайн цели според бележката към цитата. Моля, изтеглете PDF версия тук Разлика между машинно зависима и независима от машината оптимизация на кода