Forth
http://fforum.winglion.ru/

И снова - 16 Minimal instructions.
http://fforum.winglion.ru/viewtopic.php?f=3&t=2564
Страница 2 из 3

Автор:  mOleg [ Пт апр 09, 2010 14:37 ]
Заголовок сообщения: 

Хищник писал(а):
Проверим в нем несколько программ, мы выяснили, что обычные команды (т.е. не переходы и не литералы) составляют 25-30% от общего количества команд, компилируемых в программу.

очень хотелось бы увидеть результирующую статистику (в смысле, по примитивам)

Автор:  chess [ Пт апр 09, 2010 15:05 ]
Заголовок сообщения: 

Хищник писал(а):
(т.е. не переходы и не литералы)

Непонятно почему переходы и литералы тут объединили.

Автор:  Hishnik [ Пт апр 09, 2010 15:24 ]
Заголовок сообщения: 

mOleg писал(а):
очень хотелось бы увидеть результирующую статистику (в смысле, по примитивам)

:< "Тиграаааааааааа!".....

Автор:  Hishnik [ Пт апр 09, 2010 15:25 ]
Заголовок сообщения: 

chess писал(а):
Непонятно почему переходы и литералы тут объединили.

Потому что переход тоже требует литерала - загрузки адреса, на который переходить.

Автор:  chess [ Пт апр 09, 2010 15:39 ]
Заголовок сообщения: 

Хищник писал(а):
Потому что переход тоже требует литерала - загрузки адреса, на который переходить.

Понятно. Только переходы не обязательно требуют полноразрядного литерала(если они, например, относительные).

Автор:  Hishnik [ Пт апр 09, 2010 15:41 ]
Заголовок сообщения: 

chess писал(а):
Понятно. Только переходы не обязательно требуют полноразрядного литерала(если они, например, относительные).

Но в приведенной системе команд нет отдельной команды для загрузки неполного литерала. Кстати, результаты профилирования - повод ее ввести. Тогда будут команды "положить на стек данные" и "положить на стек число сокращенной разрядности, достаточное для представления адреса".

Автор:  chess [ Пт апр 09, 2010 15:53 ]
Заголовок сообщения: 

Хищник писал(а):
Тогда будут команды "положить на стек данные" и "положить на стек число сокращенной разрядности, достаточное для представления адреса".

Я к тому же. После введения доп. команды быстродействие кода увеличится при сокращении разрядности шины по сравнению с вариантом без
доп. команд.

Автор:  WingLion [ Пт апр 09, 2010 17:32 ]
Заголовок сообщения: 

Хищник писал(а):
При этом число тактов растет, потому что загнать 32-битный литерал по 16-разрядной шине можно за 2 такта,

За то, по 16(32)-хбитной шине можно хапнуть сразу 4(8 ) команд и исполнять их на повышенной тактовой частоте по сравнению с частотой выборки из памяти, не забывая при этом, что литералы можно читать наперед, а тогда скорость скорее повысится, чем понизится. (Задача экономии памяти-то как бы и не стоит.)

Автор:  WingLion [ Пт апр 09, 2010 17:47 ]
Заголовок сообщения: 

Хищник писал(а):
Но в приведенной системе команд нет отдельной команды для загрузки неполного литерала. Кстати, результаты профилирования - повод ее ввести. Тогда будут команды "положить на стек данные" и "положить на стек число сокращенной разрядности, достаточное для представления адреса".


Кстати, интересная мысль, ввести инструкцию BLOAD подгрузки короткого литерала из потока команд, т.е. из потока 4-битных полубайтов выдирать, например по два элемента (ровно байт), следующие сразу за этой командой, и использовать его в первой встреченной команде LIT, CALL или ?BRANCH. Тогда, загрузка короткого литерала будет выглядеть так:

BLOAD immediate-byte LIT - короткий литерал загрузка байта со знаком, т.е. byte=-1 превратится в cell=-1

BLOAD immediate-byte CALL - короткий CALL \ переход по addr=byte*16 для реализации кучи маленьких подпрограмм

BLOAD immediate-byte ?BRANCH - короткий относительный переход

Но, это еще вопрос, надо ли так делать?.. И даст ли оно реальный выигрыш?

Автор:  Hishnik [ Сб апр 10, 2010 00:04 ]
Заголовок сообщения: 

WingLion писал(а):
Но, это еще вопрос, надо ли так делать?.. И даст ли оно реальный выигрыш?

Я тут на днях именно так и сделал. То есть JMP по сути есть EXECUTE, и все команды перехода (jmp/if/call) берут адрес со стека. Хотя можно адрес и после команды тянуть, тоже вариант.

Автор:  mOleg [ Сб апр 10, 2010 10:34 ]
Заголовок сообщения: 

Хищник писал(а):
mOleg писал(а): очень хотелось бы увидеть результирующую статистику (в смысле, по примитивам)
"Тиграаааааааааа!".....

вот статистика по частоте использования слов в ядре форка, т.е. речь не о примитивах, а вообще о любом слове, которое искалось и компилировалось во время сборки ядра:

117 DUP
073 0
072 DROP
067 SWAP
067 A@
066 @
065 +
064 OVER
055 A!
054 -
054 L>
052 >L
044 THROW
038 NOOP
035 !
035 DDROP
034 HERE
034 L@
034 COMPILE,
032 COUNT
032 =
024 FALSE
023 TYPE
020 R>
020 DDUP
019 TRUE
019 NIP
019 TUCK
019 >STDERR
018 GET-CURRENT
017 LDROP
017 CATCH
017 +!
016 >R

Автор:  Hishnik [ Сб апр 10, 2010 11:34 ]
Заголовок сообщения: 

mOleg писал(а):
вот статистика по частоте использования слов в ядре форка, т.е. речь не о примитивах, а вообще о любом слове, которое искалось и компилировалось во время сборки ядра:

Где форк и где ПЛИС?

Автор:  mOleg [ Сб апр 10, 2010 11:43 ]
Заголовок сообщения: 

Хищник писал(а):
Где форк и где ПЛИС?

всеравно картина по частоте использования есть.
видно, что чаще всего литералы встречаются, потом DUP DROP SWAP @ + OVER ! и удивительно часто NOOP

Автор:  WingLion [ Сб апр 10, 2010 12:45 ]
Заголовок сообщения: 

Хищник писал(а):
rupor "Тиграаааааааааа!".....


хм, а он сюда заглядывает? :shuffle;

Автор:  вопрос [ Сб апр 10, 2010 13:23 ]
Заголовок сообщения: 

mOleg писал(а):
Хищник писал(а):
Где форк и где ПЛИС?

всеравно картина по частоте использования есть.
видно, что чаще всего литералы встречаются

это плохо для призводительности, если не сделать какую-либо более хитрую оптимизацию

Страница 2 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/