Освой компьютер
Кроме того, циклы следует реализовывать так, чтобы они по возможности целиком
умещались в кэш - то есть в процессе работы цикла не уместившиеся в кэше
инструкции не подчитывались бы из памяти. Размер кэша инструкций в 68020 и
68030 - 64 двойных слова (256 байт). Начиная с 68030 у процессора
появился еще и кэш данных (тоже 256 байт). Теперь при считывании
достаточно небольшой группы адресов данные могут \"улечься\" в кэш и
считывание больше не будет замедляться скоростью работы с памятью. У
68040 оба кэша увеличены до 4096 байт.
Теперь несколько слов о таком явлении, как \"узкое место\" в программе.
Если бы программа представляла собой линейный участок кода без условных
ветвлений и циклов, это понятие вряд ли существовало бы. Однако
абсолютное большинство программ содержит множество участков, которые за
все время работы программы выполняются более чем один раз. Грубо говоря,
20% кода выполняются 80% времени (числа взяты \"с потолка\", но все равно
достаточно точно отражают реальное явление). Соответственно, оптимизация
по быстродействию 80% кода практически ничего не даст - этот участок кода
выполнится всего один-два раза (например, начальная инициализация
программы). А оптимизация 20% - резко ускорит программу, потому что эти
20% практически все время и работают. Бывают случаи, когда почти 100%
времени работы программы - это выполнение одного и того же цикла -
например, так работают музыкальные \"плееры\". Что же нужно сделать? Нужно
выявить именно этот, наиболее часто исполняющийся код, и если
быстродействие программы критично - имеет смысл переписать в код нужного
процессора и хорошо прооптимизировать именно этот участок программы,
полностью \"уложить\" его в кэш, минимизировать работу с памятью и перенести
основную нагрузку на регистры.
Никакого смысла в предельной оптимизации и подгонки под заданный процессор
всего остального кода обычно нет - какая Вам разница, будет окошко открываться
1/10 секунды или 1/5 секунды?...
AMIGA: ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ.
|