Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср окт 24, 2018 08:51

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: упихнуть в 4 бита 35 команд
СообщениеДобавлено: Вс дек 20, 2009 01:37 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
в результате общения с in4 в irc канале родилась идея, как можно упихать в 4 бита 35 команд без потери плотности кода и скорости исполнения.

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

Чтобы представить себе более наглядно, можно нарисовать следующую картинку:
имеется 35 комнат, каждая из которых хранит какое-то устройство, из каждой комнаты имеется переход в 16 других, в некотором редком случае попасть в нужную комнату можно пройдя всего одну другую (нейтральную) комнату.

вот 8)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 20, 2009 22:10 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Скорость исполнения автоматически снизится из-за сложного декодера :evil:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 20, 2009 22:17 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
dynamic-wind писал(а):
Скорость исполнения автоматически снизится из-за сложного декодера

Я не думаю, что он будет таким уж сложным и медленным,
он будет скорее БОЛЬШИМ,
что не очень приятно при реализации в ПЛИСе.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 20, 2009 22:40 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Вообще-то да, если вместо 4-входовой ПЛМ поставить 8-входовую, разницы в быстродействии практически никакой.
А БОЛЬШИМ будет кодогенератор, которому надо знать, что каждая команда имеет опкод, зависящий от предыдущего, и что некоторые "маловероятные" команды нельзя закодировать после данной.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 20, 2009 22:43 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
dynamic-wind писал(а):
и что некоторые "маловероятные" команды нельзя закодировать после данной.

можно, но через специальный нейтральный префикс (nop).

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 20, 2009 22:58 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
конкретную схему можно как-то нарисовать?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 00:59 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mOleg писал(а):
как можно упихать в 4 бита 35 команд без потери плотности кода и скорости исполнения.
Там в общем случае даже больше возможностей получается - суперинструкции даже можно сделать. Но без нормального средства анализа я в эту область не полезу! ;)

А вот более простой вариант можно реализовать!
Идея в том, чтобы использовать некоторые последовательности команд, которые не имеют смысла для 4х битного кода, упакованного в байты.
Например, если первая команда (в смысле исполнения, а не кодирования в байте!) RET или JMP , то следующая команда никогда не будет выполена! :)
(Вариант, когда выполнение переходов откладывается до окончания команды, возможно, будем рассматривать позже и обсуждать в другой ветке. ;) )
Таким образом, байт с командами RET : XXX можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд! ;) (Считая, что RET : NOP - это одна команда со смыслом RET ).
Аналогично для JMP и CALL . Если в основном наборе есть IF , то и он тоже может быть таким же!

Получается, что отдельные коды для префиксов можно и не выделять! :)
Такое использование "кодового пространства" будет занимать меньше места в коде, чем даже макроподстановка невошедших в примитивы слов с использованем последовательностей реализованных примитивов.

_________________
With best wishes, in4.


Последний раз редактировалось in4 Пн дек 21, 2009 01:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:07 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
как получилась цифра 35?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
вопрос писал(а):
как получилась цифра 35?

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
in4 писал(а):
Таким образом, байт с командами RET : XXX можно рассматривать как команду с префиксом! И добавить еще 15(!) других команд!

не катит. Это будет именно префикс, я говорил про совсем другое.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:17 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
В варианте с использованием последовательностей команд как префикса для одной такой команды:
16 + 15 =31 ,
для 2х:
16 + 2*15 =46 ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
in4 писал(а):
Получается, что префиксы можно не выделять!

Если говорить точнее, в таком случае получается, что IF, JMP и CALL - попросту префиксные команды!

п.с. a вот RET:XXX - действительно интересно
Можно даже сразу объединить CALL и RET пoд один код команды
RET:0 - это RET,
RET:1 - CALL
RET:2 - RET-CALL = NEXT
RET:3 - CALL #NN = короткий CALL по индексу (а таблица индексов (16 шт) прямо в памяти с адреса 0x00000000)

в этот же список можно и JMP с IF вставить.
RET:4 - IF
RET:5 - JMP = LIT R> RET
RET:6 - EXECUTE = R> RET


Получается совсем здорово - высвобождается целых два кода! ;)

Короче, отличная мысля для 4-хбитника!

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Последний раз редактировалось WingLion Пн дек 21, 2009 01:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
А еще, можно сделать прямое кодирование для исполнения подобной префиксной команды.
Просто назначить, что RET:XXX = последовательность (подпрограмма) от 4-х до 8-и ("простых" 4-хбитных) команд (заранее записанная в некий 32-разрядный регистр)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:35 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
Если говорить точнее, в таком случае получается, что IF, JMP и CALL - попросту префиксные команды!
Только если они "первые" в группе ;) А так - обычные ;)

WingLion писал(а):
RET:3 - CALL #NN = короткий CALL по индексу
А для этого лучше выделить несколько кодов, при этом одно из битовых полей команды будет индексом #NN

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 21, 2009 01:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
in4 писал(а):
Только если они "первые" в группе Wink А так - обычные Wink

однако, более точно, если они НЕ ПОСЛЕДНИЕ в группе.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

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


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

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


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

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