Перепроектирование

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

В тех случаях, когда следует добиться сравнительно небольшого (25% или менее) повышения быстродействия или небольшой экономии памяти, этого можно достичь за счет изменения структуры программы. Возможно некоторое отступление от структурности программы. При этом новая программа должна быть тщательно документирована, так как ее назначение становится менее очевидным. Подобная реорганизация может потребовать больших затрат времени программиста, и ее следует по возможности избегать.

Ниже перечислены некоторые рекомендации, позволяющие повысить скорость работы программы.

1. Обратите внимание на часто выполняемые циклы. Эти циклы можно выявить методами ручного анализа или программного тестирования. Команды, выполняемые однократно или малое число раз, не оказывают существенного влияния на время работы программы. Замена подобных команд может привести к неоправданным ошибкам.

2. Где это возможно, используйте регистровые операции. Подобные операции будут выполняться быстрее других, но при этом возникнут дополнительные операции инициализации и манипулирования. Рекомендуется использовать команды перехода с косвенной адресацией, которые выполняются путем Посылки содержимого регистра в счетЧйк команд (в Intel 8080 такой командой является команда PCHL).

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

4. По возможности используйте форматы команд с короткими адресами . Использование форматов команд с короткими адресами может потребовать нетривиальных решений в организации данных.

1 ' 5. Попытайтесь исключить операторы перехода. Для их исполнения почти всегда требуется много времени и памяти.

6. Вместо использования подпрограмм и циклов многократно повторите соответствующие последовательности команд.

7. Используйте преимущества тех адресов, которые могут обрабатываться как 8-битные числа. К подобным адресам относятся адреса на нулевой странице памяти и адреса, кратные числу 1001в.

8; Для пересылки данных между памятью и регистрами используйте вместо прямой адресации стековую.

Многие из указанных рекомендаций позволяют одновременно уменьшить время выполнения программы и расход памяти, так как (в большинстве ситуаций) более длинные программы приводят к большему числу обращений к памяти и к большему времени выполнения. Вместе с тем использование подпрограмм представляет пример экономии памяти ценой дополнительных затрат времени на вызов подпрограммы и возврат из нее. Использование циклов является примером аналогичной взаимозависимости между временем и памятью. Если требуется минимизировать время выполнения программы, то обращения к подпрограммам и циклы следует заменить повторным копированием соответствующих участков программ. Для уменьшения затрат памяти можно использовать противоположные приемы.

Не следует ожидать, что процесс оптимизации приведет к очень большой экономии. Если исключить случаи очень плохо написанной программы, обычно достигается увеличение скорости работы или экономия памяти не более чем на 25 %. Если требуется еще больше повысить быстродействие или сэкономить память, можно применить методы, рассмотренные ниже:

1. Разработка нового алгоритма. Другой метод решения может обеспечить большее увеличение быстродействия и более существенное уменьшение требуемой памяти. Модификация использованного ранее метода редко позволяет достигнуть существенного его улучшения.

2. Использование микропрограммирования. Процессор с микропрограммным управлением может оказаться способным выполнить данную программу значительно быстрее.

3. Повышение тактовой частоты. Если имеется более быстродействующая память, нужно попробовать заставить процессор работать при более высокой тактовой частоте.

4. Использование подключаемых (внешних) аппаратных средств. Внешние аппаратные средства типа устройств умножения, счетчиков, УАПП и другие могут повысить производительность ЦП, избавив его от выполнения некоторых операций обработки данных.

5. Параллельная обработка. Два или большее число процессоров могут обеспечить выполнение работы с более высокой скоростью, при этом стоимость системы существенно не повышается.

6. Распределенная обработка. Работа может быть выполнена быстрее за счет того, что отдельные функции будут разделены между двумя или более процессорами.

7. Замена программной логики путем использования больших быстродействующих ПЗУ. С помощью ПЗУ большого объема можно реализовать часть программно выполняемых функций. Очевидно, что подобное решение представляет собой компромисс между быстро действием и расходом памяти, типа того, что был отмечен в связи с табличной реализацией вычислений.

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