Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс июл 12, 2026 04:30

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 124 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9
Автор Сообщение
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Чт июн 04, 2026 01:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8134
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Если заводить стековый фрейм, система команд становится смешанной - стеково-регистровой. Не принципиально, будет это абсолютный индекс регистра, или его смещение относительно вершины стека, придется заводить в команде соответствующие поля, и тогда размер кода увеличится. Вообще это можно делать, просто надо сразу посмотреть, во что превратятся типовые программы. Вполне может получиться, что смещения будут болтаться около вершины, и существенной разницы по быстродействию не получится, а вот эти небольшие смещения будут тратить место в командах.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Пт июн 05, 2026 00:15 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 673
Откуда: Москва
Благодарил (а): 61 раз.
Поблагодарили: 31 раз.
Hishnik писал(а):
Если заводить стековый фрейм, система команд становится смешанной - стеково-регистровой. Не принципиально, будет это абсолютный индекс регистра, или его смещение относительно вершины стека, придется заводить в команде соответствующие поля, и тогда размер кода увеличится. Вообще это можно делать, просто надо сразу посмотреть, во что превратятся типовые программы. Вполне может получиться, что смещения будут болтаться около вершины, и существенной разницы по быстродействию не получится, а вот эти небольшие смещения будут тратить место в командах.
Ну в Брусе не совсем классический фрейм, он только для локальных переменных, но не для аргументов функций (для них отдельный аппаратный стек есть). Если я правильно путаю, именно в таком виде сейчас реализовано в Питоне под Брус. В моей реализации Си для Бруса аргументы тоже через стек, локальные в массиве (так исторически сложилось), а фрейм не используется.
Очевидно, что при проектировании системы команд учитывалось, что под Брус будет компилятор ЯВУ, поэтому заранее подстелили соломку в виде фреймов на случай, если вдруг будут локальные переменные (а почему бы им и не быть?). Ну и раз уж выбраны достаточно широкие команды (16 бит), то нужно максимально заполнять их, чтобы не гонять туда-сюда полупустые инструкции. :)
Интересно все-таки, какой ширины машинное слово дает максимальную плотность кода?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Пт июн 05, 2026 01:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8134
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Total Vacuum писал(а):
Интересно все-таки, какой ширины машинное слово дает максимальную плотность кода?

О, это замечательная тема! Тут ведь вопрос в том, сколько переменных одновременно "живы" (т.е. от начала упоминания в правой части выражений и до последнего присваивания). Если таких много, их хотелось бы один раз прочитать в регистры и потом ими пользоваться. А если это 123 A ! 345 B !, то тут много регистров и не надо, вполне хватит стека и 0-операндной системы команд. Поэтому можно сразу обратиться к компиляторам, абстрагированным от регистровой модели, и попробовать с их помощью сгенерировать код под разные варианты.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Консольные войны Z0Z5
СообщениеДобавлено: Пт июн 05, 2026 12:20 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 673
Откуда: Москва
Благодарил (а): 61 раз.
Поблагодарили: 31 раз.
Hishnik писал(а):
Формально 0-операндный процессор при хороших условиях однозначно выигрывает. Вопрос только в том, не поставят ли его в нехорошие условия, заставив держать на стеке много переменных и постоянно жонглировать ими. Но есть предварительное ощущение, что "существует класс алгоритмов, для которого 0-операндный процессор покажет наилучшую плотность кода".
Ах, да, я ж как раз и подразумевал стековые процессоры, просто не указал это явно. И хотел сравнить их по плотности между собой, а не с регистровыми.
Пока делал только 3/4/6-битные Форт-процессоры. 4/6-битные почти для всех скомпилированных примеров дают заметно более плотный код в сравнении с условными x86/6502/AVR/etc. Вполне допускаю, что есть примеры, на которых эти стековые процессоры уступят, но пока не встречались такие. 3-битные, естественно, послабее, да и сделаны, если честно, для галочки, но даже они часто опережают регистровые процессоры по плотности. Стековые между собой соотносятся примерно так (и для сравнения в таблицах пара регистровых):

dhrystone:
Код:
c/asm cpu    cmd   code   data   size
vbcc  6502                      10819
tcc   x86                        7168
uc    f3H  11019   4133   1820   5953
uc    f4B   3900   1950   1820   3770
uc    f61   2410   1808   1820   3628

Интерпретатор basic:
Код:
c/asm cpu    cmd   code   data   size
tcc   x86                        5120
uc    f3H   9004   3377    109   3486
uc    f43   3369   1685    109   1794
uc    f61   1830   1373    109   1482

Если грубо, то 3-битные уступают 4-битным раза в 2, а 4-битные - процентов на 10-20% 6-битным. Понятно, что в зависимости от теста разница может уползать в ту или иную сторону. Но точно все 3-битные сильно уступают 4-битным, а все 4-битные уступают единственному пока 6-битному. Но это именно на моих процессорах/компиляторах. А у кого-то другого могут получиться совершенно другие результаты.
Вообще, интересно было бы сделать 5-битные команды, а также 8/9- и 16/18-битные. А еще могут быть комбинированные варианты, в которых либо длинный литерал, либо несколько упакованных команд небольшой длины.
Почему-то не покидает ощущение, что 8/9-битные дадут более плотный код в сравнении с 16/18-битными, а вот что будет в сравнении с 4/5/6-битными, пока сказать сложно.

Hishnik писал(а):
Тут ведь вопрос в том, сколько переменных одновременно "живы" (т.е. от начала упоминания в правой части выражений и до последнего присваивания). Если таких много, их хотелось бы один раз прочитать в регистры и потом ими пользоваться. А если это 123 A ! 345 B !, то тут много регистров и не надо, вполне хватит стека и 0-операндной системы команд. Поэтому можно сразу обратиться к компиляторам, абстрагированным от регистровой модели, и попробовать с их помощью сгенерировать код под разные варианты.
В идеале тут нужен компилятор, который сразу заточен на стековость процессора.

Что-то Брусом навеяло такой челлендж: по одному блоку BRAM на видеопамять, RAM, ROM и шрифты/спрайты. Такой вот экстремальный минимализм. И что можно выжать из этого безобразия? :) В теории оно потом влезет в Tang Nano 1K, где как раз 4 блока на борту, а может даже в 5510, хотя в последней нет BRAM.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 124 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB