Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 10:42

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Вт ноя 01, 2022 15:15 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
KPG писал(а):
Специально можно не вводить слово PICK для работы со стеком данных, а понимать применение операции @ к примеру, числам 0 , 1 , 2 3 положенному на вершину стека как доступ к соответствующему значению элемента стека.

Быстрее PICK исполняться будет если ввести слова, например, такого вида @1, @2 .... @9, которые будут генерить код, соответствующий коду n PICK, но без использования числа с вершины стека в качестве своего параметра.
Пример реализации таких слов (для SPF):
Код:
: NOTFOUND { a u \ n } \ определяем группу лексем @1...@9 (генераторов кода с функционалом n PICK)
  a C@ [CHAR] @ = a 1+ C@ [CHAR] 0 - TO n  n 1 9 1+ WITHIN AND 0=
  IF a u NOTFOUND EXIT THEN
  HERE >R 0x4589 W, -4 C, 0x458B W, n 1- 4 * C, 0x6D8D W, -4 C, RET,
  STATE @ IF R> COMPILE, ELSE R> EXECUTE THEN ;

: s. CR DEPTH .SN CR S0 @ SP! ;

1 2 3 4 5 6 7 8 9 10  @9  s.

CODE @9
626287 8945FC           MOV     FC [EBP] , EAX
62628A 8B4520           MOV     EAX , 20 [EBP]
62628D 8D6DFC           LEA     EBP , FC [EBP]
626290 C3               RET     NEAR
END-CODE
( 10 bytes, 4 instructions )

LOG
Код:
1 2 3 4 5 6 7 8 9 10 1

Ok

Кстати в SPF оптимизатор выдает такой же код на выражение 9 PICK.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 01:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
KPG писал(а):
Специально можно не вводить слово PICK для работы со стеком данных, а понимать применение операции @ к примеру, числам 0 , 1 , 2 3 положенному на вершину стека как доступ к соответствующему значению элемента стека.
Можно, наверное, так сделать в каких-то частных случаях, но в общем случае такое решение не годится. Ведь область стека данных может быть недоступна для чтения командой @ (например, в моем процессоре так и есть). Да и адреса 0, 1, 2 и т.д. не обязательно являются какими-то неправильными, что ими можно жертвовать: например, у меня в процессоре ram начинается с адреса 0, а где-то flash начинается с 0 - читать оттуда не возбраняется :)

chess писал(а):
Быстрее PICK исполняться будет если ввести слова, например, такого вида @1, @2 .... @9, которые будут генерить код, соответствующий коду n PICK, но без использования числа с вершины стека в качестве своего параметра.
Согласен, симпатично, но нельзя исключать, что где-то понадобится вычисляемый параметр перед PICK, тогда без вариантов придется реализовывать "классический" PICK. Кстати, а в SPF оптимизатор по скорости или размеру оптимизирует?


:) Так что пока в моем мировоззрении ничего не поменялось: у меня всегда есть быстрый PICK (обозначается ?), почти всегда есть быстрый DUP (обозначается #, но иногда, например, в процессоре заменяется на 0 PICK), а вот OVER "из коробки" нет, но всегда можно сделать медленный : OVER 1 PICK ; и/или быстрый : OVER `код на asm` ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 01:58 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Оптимизатор в SPF оптимизирует по скорости.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 02:08 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Total Vacuum писал(а):
Кстати, а в SPF оптимизатор по скорости или размеру оптимизирует?

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

P.S. В каком то обсуждении в правила макро-оптимизатора Михаилом был добавлен и учёт и выравнивания кода программы (вроде как).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 12:34 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
KPG писал(а):
Скорее по размеру (по шаблонам замены цепочек одних команд на другие с одинаковой функциональностью но с меньшим их количеством по регистровым пересылкам), а скорость повышается вследствии уменьшения количества команд проходящих через конвеер процессора.

Вот сумма квадратов двух чисел при выключенном и включенном оптимизаторе:
Код:
: sum-sq \ a b -- a*a + b*b
DUP * SWAP DUP * + ;

\ оптимизатор отключен
CODE sum-sq
62609F E87CC2F2FF       CALL    552320  ( DUP )
6260A4 E837C7F2FF       CALL    5527E0  ( * )
6260A9 E862C3F2FF       CALL    552410  ( SWAP )
6260AE E86DC2F2FF       CALL    552320  ( DUP )
6260B3 E828C7F2FF       CALL    5527E0  ( * )
6260B8 E827C6F2FF       CALL    5526E4  ( + )
6260BD C3               RET     NEAR
END-CODE
( 31 bytes, 7 instructions )

CODE DUP
552320 8D6DFC           LEA     EBP , FC [EBP]
552323 894500           MOV     0 [EBP] , EAX
552326 C3               RET     NEAR
END-CODE
( 7 bytes, 3 instructions )
CODE *
5527E0 F76D00           IMUL    0 [EBP]
5527E3 8D6D04           LEA     EBP , 4 [EBP]
5527E6 C3               RET     NEAR
END-CODE
( 7 bytes, 3 instructions )
CODE SWAP
552410 8B5500           MOV     EDX , 0 [EBP]
552413 894500           MOV     0 [EBP] , EAX
552416 8BC2             MOV     EAX , EDX
552418 C3               RET     NEAR
END-CODE
( 9 bytes, 4 instructions )
CODE DUP
552320 8D6DFC           LEA     EBP , FC [EBP]
552323 894500           MOV     0 [EBP] , EAX
552326 C3               RET     NEAR
END-CODE
( 7 bytes, 3 instructions )
CODE *
5527E0 F76D00           IMUL    0 [EBP]
5527E3 8D6D04           LEA     EBP , 4 [EBP]
5527E6 C3               RET     NEAR
END-CODE
( 7 bytes, 3 instructions )
CODE +
5526E4 034500           ADD     EAX , 0 [EBP]
5526E7 8D6D04           LEA     EBP , 4 [EBP]
5526EA C3               RET     NEAR
END-CODE
( 7 bytes, 3 instructions )


\ оптимизатор включен
CODE sum-sq
62607B F7E8             IMUL    EAX
62607D 8B5500           MOV     EDX , 0 [EBP]
626080 0FAFD2           IMUL    EDX , EDX
626083 03C2             ADD     EAX , EDX
626085 8D6D04           LEA     EBP , 4 [EBP]
626088 C3               RET     NEAR
END-CODE
( 14 bytes, 6 instructions )

Здесь сокращение размера кода скорее побочный эффект.
Основной результат работы оптимизатора это сокращение в разы числа исполняемых процессором инструкций, или
другими словами, уменьшение времени исполнения кода.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 16:20 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
chess писал(а):
Здесь сокращение размера кода скорее побочный эффект. .

Ну, почему же?
Не в первую ли очередь идёт убирание "стыковочных" стек параметров слов реализованных для использования в интерактивном режиме при соединении в "сложное" слово?

В возникшем некотором обсуждении производительности CISC (580) и RISC (AVR) выдвинута
гипотеза, что AVR и в силу большого регистрового файла в 4-5 раз обыгрывает 580
что мне не кажется таким уж не оспариваемым фактом, если и к примеру PIC, 8051 вполне вострeбованы на рынке и очень быстры в решении задач даже без учёта технологий их изготовления.

P.S, Не показательны ли результаты по "вытягиванию" производительности Форт тестов для Z80 в проекте M4_FORTH

В этом сообщении приводится вывод по результатам простого программного ногодрыга реализованого на Форт (FlashForth for PIC?) и Си, и Си не показал ничего особо выдающегося.
Цитата:
На СИ и ФОРТ реализованы программы изменения бита порта командой XOR в бесконечном цикле. На первой фотографии скорость работы данного генератора сигналов на СИ, далее ФОРТ. Количество выполняемых команд примерно равны.

Две новости - плохая и хорошая. Форт медленнее си, хорошая - почему только в два раза? Форт выполняет множество операций со стеком. В каждом цикле форт помещает на стек одни и те же константы и затем их снимает. СИ этого не делает. Но что такое 200 кГц для СИ с таким примитивным набором команд? Это его непригодность для задач реального времени обработки и генерации сигналов.

Изображение


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Ср ноя 02, 2022 17:06 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
KPG писал(а):
Ну, почему же?
Не в первую ли очередь идёт убирание "стыковочных" стек параметров слов реализованных для использования в интерактивном режиме при соединении в "сложное" слово?

SPF без оптимизатора реализует подпрограммный шитый код. Это и показано в примере при отключенном оптимизаторе.
Оптимизатор состоит из инлайнера и макроподстановщика, что и сокращает число инструкций в конечном коде по сравнению
с вариантом без оптимизатора. При этом размер выходного кода при отключенном оптимизаторе может быть меньше чем при подключенном, но скорость исполнения кода при подключенном олтимизаторе всегда больше. Сравнивать языки по скорости некорректно.
Форт может быть и быстрее Си при определенных условиях. Форт может быть лишь виртуальной оболочкой, а на физическом уровне
может мало чем отличаться по реализации от Си, например.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: uf \ micro forth \
СообщениеДобавлено: Пт ноя 18, 2022 21:41 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Ещё проект из серии минимального Boot Форта. :)
MinimalBinaryBoot
Некоторые слова определены так:
Код:
: dup psp@ @ ;
: 0 psp@ dup - ;
: cell psp@ psp@ - ;
: cell+ 0 cell - - ;
: over psp@ cell+ @ ;
: 2* 0 over - - ;
: 1+ <pick -1> - ;


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

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


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

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


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

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