ZXNet эхоконференция «code.zx»


тема: И ещё,



от: Valery Grigoriev
кому: All
дата: 02 Dec 2005
Hello, GriV даже 10 прямых вызовов через Call может уже привести к выигрышу по сравнению с системой Call на Jp. А если их много? А если их очень много? И вообще, ещё раз - сам процесс "пропатчивания" по сравнению с временем загрузки программы (которое обязон есть) - порядка 5-10% (для средних исполнительных файлов - для игр и дем эта цифра будет значительно меньше) - т.е. вы загрузили программу, у вас ещё флопарь не перестал крутиться а программа уже настроена - остались только прямые Call и никакой таблица в памяти уже нет - чистейшая программа. После этого ВСЕ функции выполняются быстро - потому что нет никаких дополнительных переходов и т.д. Т.о. своя оценка (плюсом обозначаю достоинства минусом недостатки): 1. RST - слишком медленно(-) хотя может показаться удобным(+) - на каждый вызов требуется порядка 200(-) тактов (может и чуть быстрей) на определения куда прошёл вызов; может возвратиться с ошибкой(+) - если нет заданной функции. Использовался в старых программах как наследие системы прерываний от PC-шных монстров. Требуется меньше всего памяти для вызова(+) - около 3х байт, позволяет растаскивать процедуры по ПЗУ как угодно, внутренний транслятор адресов сам всё вычислит и сделает(+). 2. Метод установленных точек перехода - Jp (Call) на таблицу Jp внутри ПЗУ - требуется порядка 5-6 байт из программы (-), но работает очень быстро(+) по сравнению с предыдущим вариантом. Тратится условно 20/26 тактов на один вызов процедуры. Передача параметров (загрузка регистров) требует дополнительных(-) вложений (где-то до 50 тактов максимум), от компилятора требуется согласованность с версией ПЗУ (-), потому что прямой вызов/перезод на ПЗУ может привести к фатальному исходу(?-), практически невозможно контролировать "неправильные" вызовы/переходы(-). Требуется дополнительная таблица в ПЗУ(-). 3. Метод прямого вызова с предварительной настройкой. Подразумевает наличие в файле таблиц для коррекции адресов вызовов(-) - что требует дополнительного места на носителе (4 байта на каждую точку). Требует предварительной настройки (-), порядка 100 тактов на одну точку вызова, однако настройка идёт только один раз(?+), больше она не выполняется. Требует 5-6 байт для своей работы(-). Скорость выполнения вызова самая высокая(+) - быстрей просто не бывает - 10/16 тактов. Загрузка регистров параметрам увеличивает(-) время вызова и память отводимую для вызова условно до 40 тактов. Имеется возможность отследить неверный вызов(+) ещё на этапе настройки вызовов - контролируются "неправильные переходы". Требуется дополнительная таблица в ПЗУ(-). Я для себя выбрал третий вариант, а Вы? ;)

от: Valery Grigoriev
кому: All
дата: 21 Aug 2006
Hello, GriV мне не совсем понятно зачем нужна длительность выполнения операторов басика. Может быть сравнивать производительность разных басик-трансляторов? Скорей всего точную информацию по времени работы операторов ты нигде не найдёшь - просто потому что это никому не надо.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Эпилог - авторы газеты.
Сатанизм - Брак и кровавое жертвоприношение. Кровавая жертва: сатанинская или иеговистская? Брак и семья.
Система - описание программы SСRЕЕN ЕDIТОR для создания "картинок" составленных из цветных спрайтов.
scene intro - сценовое вступление.
Tutorials - под прессом прессы: "Когда тебя учат писать, рассказывая о литературных тонкостях и приемах, это отлично, это здорово! Когда у тебя кроме этих познаний нет ничего, нет базовых понятий, это куда хуже"

В этот день...   8 мая