Переупорядочение четверок

Другая возможность оптимизации кода состоит в переупорядочивании четверок перед преобразованием их в машинный код.

Рассмотрим, например, четверки (17) – (20). Им соответствует код:

MOV AX, SUMSQ ┐

DIV AX, 100 ├17

MOV T1, AX ┘

MOV AX, MEAN ┐

MUL MEAN ├18

MOV T2, AX ┘

MOV AX, T1 ┐19

SUB AX, T2 ┘

MOV VARIANCE, AX ]20

Сначала вычисляется промежуточное значение i6 и записывается в рабочую переменную T1. Далее вычисляется значение i7. В (19) из i6 вычитается i7.

Поскольку значение i7 только что вычислено оно находится в регистре AX. Однако это никак не удается использовать, поскольку для операции вычитания в AX должен находиться первый операнд, а не второй. Поэтому необходимо запомнить значение i7 в рабочей переменной T2 и перед вычитанием загрузить значение i6 из рабочей переменной T1 в регистр AX. Компилятор может распознать такую ситуацию и переставить четверки таким образом, чтобы второй операнд вычислялся перед первым.

Получаем:

  * MEAN MEAN i7
  DIV SUMSQ #100 i6
  - i6 i7 i8
  := i8   VARIANCE

MOV AX, MEAN ┐

MUL MEAN ├18

MOV T1, AX ┘

MOV AX, SUMSQ ┐17

DIV AX, 100 ┘

SUB AX, T1 ]19

MOV VARIANCE, AX ]20

В результате машинный код содержит на две инструкции меньше и использована только одна рабочая переменная T1 вместо двух.

Подобные действия могут применяться для перестановки четвёрок, вычисляющих операнды операции деления.

Использование специфических особенностей платформы

Ещё одна возможность машинно-зависимой оптимизации состоит в использовании специфических характеристик и инструкций данного компьютера.

Например, на ней могут существовать специальные инструкции для организации циклов или способы адресации, позволяющие сгенерировать более эффективный объектный код.

Для многопроцессорных компьютеров на скорость выполнения программы сильно влияет порядок расположения инструкций. Последовательно расположенные инструкции, предназначенные для различных функциональных устройств могут выполняться в некоторых случаях одновременно. Чтобы воспользоваться этой особенностью компилятор может переставить машинные инструкции объектного кода.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: