Освой компьютер
изменением участков кода программы
самой программой. Если изменяется тот участок кода, который уже лежит в кэше -
в самом кэше он не будет изменен, и программы начинают работать не так, как
задумывалось (если хотите понаблюдать, что же выйдет - запустите на Амиге с
68020 и более старшим процессором известную демку \"STATE OF THE ART\", не
выключив кэш). Последствия такого подхода могут быть самыми разными - от
довольно забавных (как в упомянутом случае) до катастрофических (полной
неработоспособности программы на более современном процессоре). Конечно,
можно будет пользоваться такой программой, выключая кэш при ее запуске, но
при этом реальное быстродействие 68020 и более старших процессоров резко
упадет, да и в многозадачке вряд ли удастся сделать раздельное состояние
кэша для разных процессов - то есть упадет и скорость работы всех
\"параллельно\" идущих задач.
В самом крайнем случае, если уж хочется \"выжать все\" из своей 68000 машины -
сделайте распознавание типа процессора, и в случае отличающегося
от 68000, исполняйте другой участок кода, не использующий самомодификацию.
Кэш инструкций имеет еще одно свойство. На кэшированном процессоре
практически не имеют смысла многие подходы к оптимизации, обычно
популярные на старых 8- и 16-битных машинах типа SPECTRUM и БК,
заключающиеся в уменьшении \"любой ценой\" количества операций и занимаемых
процедурой тактов. Поскольку на упомянутых машинах код выполнялся из той
же самой памяти, что и операции - это действительно имело смысл, как,
впрочем, и на 68000 машинах (в приложении 6 приведены методы расчета
времени выполнения инструкций 68000).
Начиная с 68020 чаще всего имеет место ситуация, когда память работает
значительно медленнее кэша, и если выполняемый фрагмент программы, в основном,
занимается обменом с памятью, то основной смысл начинает иметь не количество
инструкций, а скорость памяти - например, как ни уменьшать количество операций
в процедуре заполнения кодом памяти, быстрее чем запись в память она работать
не будет.
AMIGA: ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ.
|