Forth http://fforum.winglion.ru/ |
|
DO LOOP - hard vs soft http://fforum.winglion.ru/viewtopic.php?f=3&t=2655 |
Страница 1 из 1 |
Автор: | Hishnik [ Пт сен 24, 2010 15:31 ] |
Заголовок сообщения: | 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 тактов... |
Автор: | WingLion [ Пт сен 24, 2010 16:14 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
Kак только в цикле пойдут примитивы, эти 28 тактов очень быстро умножатся на миллионы и миллиарды... и 100 LCELL покажутся перед ними мизером (который, вдобавок ко всему, не умножается, потому что добавится в процессор всего один раз) |
Автор: | Hishnik [ Пт сен 24, 2010 17:50 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
Да это понятно, я уж было и настроился на добавление стека циклов (тем более что в той реализации FCPU, которая сейчас в рабочих проектах, это есть). А потом посмотрел, где именно используются циклы, и задумался. Вот, например, задержка 1000 0 DO LOOP. Ну будет 30 0 DO LOOP, разницы нет. В циклах с большим объемом вложенного кода 28 тактов будут незаметны. Остаются циклы с большим количеством итераций, и при этом небольшим телом. Вот и пытаюсь их поймать и как следует представить, чтобы было ясно, ради чего сыр-бор. |
Автор: | WingLion [ Пт сен 24, 2010 18:00 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
Ну, некоторые операции выглядят иначе... : CLEAR_SCREEN SCR_ADR 768 0 DO 1024 0 DO DUP 0! 1+ LOOP NEXT_LINE LOOP ; Вот тут, например, получится почти 28 миллионов тактов лишних, если не придумывать специальные процессорные команды для работы с экраном... |
Автор: | Hishnik [ Пт сен 24, 2010 18:46 ] |
Заголовок сообщения: | 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). |
Автор: | dynamic-wind [ Сб сен 25, 2010 10:50 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
А зачем, собственно, стек циклов? Достаточно ведь оптимизировать самый внутренний цикл. В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций. Плюс одна команда конец-цикла, которая работает с этими регистрами. |
Автор: | mOleg [ Сб сен 25, 2010 11:12 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
dynamic-wind писал(а): А зачем, собственно, стек циклов? удобно, например, можно легко получать параметры вложенных циклов (сколько надо) без оглядки на то, положил ли кто на стек возвратов чего-нить лишнего или нет. Правда, со стека возвратов параметры снимать автоматически легче. меньше мороки с исключениями. |
Автор: | Hishnik [ Сб сен 25, 2010 12:54 ] |
Заголовок сообщения: | Re: DO LOOP - hard vs soft |
dynamic-wind писал(а): В нек.-рых DSP (vs_dsp, dsp56K) есть пара регистров--адрес начала цикла и счетчик итераций. Это же не некоторый, это конкретный форт-процессор, который в предыдущей итерации был с аппаратным стеком циклов, а в теперешней - пока без нее, с возможностью программной эмуляции. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |