Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 00:56

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - DO LOOP - hard vs soft
Автор Сообщение
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
dynamic-wind писал(а):
В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций.

Это же не некоторый, это конкретный форт-процессор, который в предыдущей итерации был с аппаратным стеком циклов, а в теперешней - пока без нее, с возможностью программной эмуляции.
Сообщение Добавлено: Сб сен 25, 2010 12:54
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
dynamic-wind писал(а):
А зачем, собственно, стек циклов?

удобно, например, можно легко получать параметры вложенных циклов (сколько надо) без оглядки на то, положил ли кто на стек возвратов чего-нить лишнего или нет.
Правда, со стека возвратов параметры снимать автоматически легче. меньше мороки с исключениями.
Сообщение Добавлено: Сб сен 25, 2010 11:12
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
А зачем, собственно, стек циклов?
Достаточно ведь оптимизировать самый внутренний цикл.
В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций.
Плюс одна команда конец-цикла, которая работает с этими регистрами.
Сообщение Добавлено: Сб сен 25, 2010 10:50
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
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).
Сообщение Добавлено: Пт сен 24, 2010 18:46
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
Ну, некоторые операции выглядят иначе...

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

Вот тут, например, получится почти 28 миллионов тактов лишних, если не придумывать специальные процессорные команды для работы с экраном...
Сообщение Добавлено: Пт сен 24, 2010 18:00
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
Да это понятно, я уж было и настроился на добавление стека циклов (тем более что в той реализации FCPU, которая сейчас в рабочих проектах, это есть). А потом посмотрел, где именно используются циклы, и задумался. Вот, например, задержка 1000 0 DO LOOP. Ну будет 30 0 DO LOOP, разницы нет. В циклах с большим объемом вложенного кода 28 тактов будут незаметны. Остаются циклы с большим количеством итераций, и при этом небольшим телом. Вот и пытаюсь их поймать и как следует представить, чтобы было ясно, ради чего сыр-бор.
Сообщение Добавлено: Пт сен 24, 2010 17:50
  Заголовок сообщения:  Re: DO LOOP - hard vs soft  Ответить с цитатой
Kак только в цикле пойдут примитивы, эти 28 тактов очень быстро умножатся на миллионы и миллиарды... и 100 LCELL покажутся перед ними мизером (который, вдобавок ко всему, не умножается, потому что добавится в процессор всего один раз)
Сообщение Добавлено: Пт сен 24, 2010 16:14
  Заголовок сообщения:  DO LOOP - hard vs soft  Ответить с цитатой
Пытаюсь оценить эксплуатационные свойства софтварного DO LOOP по сравнению с аппаратным. В аппаратной реализации на циклы отдан целый стек, который хранит текущее значение счетчика, конечное значение, и адрес перехода. DO LOOP I - аппаратные примитивы. LOOP выполняется за один машинный цикл (в конвейерных вариантах влечет за собой такт штрафа на перезаполнение конвейера). Однако занимает такая конструкция порядка сотни ячеек, и при общем объеме в 600-700 это уже выглядит существенным довеском.
Софтварная реализация выглядит как-то вроде:

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

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

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


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