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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: DO LOOP - hard vs soft
СообщениеДобавлено: Пт сен 24, 2010 15:31 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Пытаюсь оценить эксплуатационные свойства софтварного DO LOOP по сравнению с аппаратным. В аппаратной реализации на циклы отдан целый стек, который хранит текущее значение счетчика, конечное значение, и адрес перехода. DO LOOP I - аппаратные примитивы. LOOP выполняется за один машинный цикл (в конвейерных вариантах влечет за собой такт штрафа на перезаполнение конвейера). Однако занимает такая конструкция порядка сотни ячеек, и при общем объеме в 600-700 это уже выглядит существенным довеском.
Софтварная реализация выглядит как-то вроде:

Код:
: LOOP
LDEPTH @ SHL @ 1 + LDEPTH @ SHL !
LDEPTH @ SHL @ LDEPTH @ 1 + SHL @ =
IF
;

Все перечисленное - аппаратные примитивы, кроме LDEPTH, который хранит текущую глубину стека циклов. Вобщем, итого получается 28 тактов на итерацию, и вот тут-то я и задумался, что ценнее - 100 ячеек или 28 тактов...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Пт сен 24, 2010 16:14 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Пт сен 24, 2010 17:50 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да это понятно, я уж было и настроился на добавление стека циклов (тем более что в той реализации FCPU, которая сейчас в рабочих проектах, это есть). А потом посмотрел, где именно используются циклы, и задумался. Вот, например, задержка 1000 0 DO LOOP. Ну будет 30 0 DO LOOP, разницы нет. В циклах с большим объемом вложенного кода 28 тактов будут незаметны. Остаются циклы с большим количеством итераций, и при этом небольшим телом. Вот и пытаюсь их поймать и как следует представить, чтобы было ясно, ради чего сыр-бор.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Пт сен 24, 2010 18:00 
Не в сети
Administrator
Administrator
Аватара пользователя

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

: CLEAR_SCREEN SCR_ADR 768 0 DO 1024 0 DO DUP 0! 1+ LOOP NEXT_LINE LOOP ;

Вот тут, например, получится почти 28 миллионов тактов лишних, если не придумывать специальные процессорные команды для работы с экраном...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Пт сен 24, 2010 18:46 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
: CLEAR_SCREEN SCR_ADR 768 0 DO 1024 0 DO DUP 0! 1+ LOOP NEXT_LINE LOOP ;

В таких местах я раньше делал наподобие такого:

Код:
: CLEAR_SCREEN 0 BEGIN 0 OVER SCR_ADR + ! 1 + DUP 786432 = UNTIL DROP ;


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Сб сен 25, 2010 10:50 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
А зачем, собственно, стек циклов?
Достаточно ведь оптимизировать самый внутренний цикл.
В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций.
Плюс одна команда конец-цикла, которая работает с этими регистрами.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Сб сен 25, 2010 11:12 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: DO LOOP - hard vs soft
СообщениеДобавлено: Сб сен 25, 2010 12:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
dynamic-wind писал(а):
В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций.

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


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

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


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

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


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

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