Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 18, 2024 07:46

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 366 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22, 23 ... 25  След.
Автор Сообщение
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт янв 31, 2012 17:55 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Гость писал(а):
А если подключить Swift оптимизатор (или его принцип действия) к СПФ, возможно как альтернативный. А далее его расширять.
Какие-нибудь от этого будут плюсы?

оптимизация у Swift не самая лучшая:) Интересней сравнивать
с IForth, VFX.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт янв 31, 2012 18:34 
Kopa писал(а):
оптимизация у Swift не самая лучшая:) Интересней сравнивать
с IForth, VFX.

Свифт-кая не самая лучшая из-за малого числа паттернов. Зато её проще понять и разширять.
Я немного пробовал ее изменять, на простых участках можно привести к виду VFX.
И все-таки как насчет copyright ?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт янв 31, 2012 19:15 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Гость писал(а):
И все-таки как насчет copyright ?


Сложно cказать, но думаю вполне допустимо использовать
в своём варианте SPF:)

Гость писал(а):
А если подключить Swift оптимизатор (или его принцип действия) к СПФ, возможно как альтернативный. А далее его расширять


Может сначала оценить и разобраться с потенциальными
возможностями и узкими местами в существующем решении?
Привести в более читаемый и понимаемый код можно и
макро-оптимизатор в SPF. Просто это ни кому ещё не было настолько интересно сделать из "грамотных" Форт программистов.
и хотелось бы знать ещё и авторский взгляд на свой код.

P.S. У Вас есть супер Форт-программа, которую необходимо
супер-ускорить?:)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт янв 31, 2012 21:19 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Рассматривая выход макро-оптимизатор на следующем коде
Код:
lib/ext/disasm.f
: array  ( n -- ) CREATE CELLS ALLOT  DOES>  SWAP CELLS + ;
100 array aaa
: for{ 0 SWAP 0 DO 1+ DUP I aaa ! LOOP DROP ;

SEE for{


не обнаружил перехода к коду слову array.
Как осуществилась INLINE подстановка кода
DOES> SWAP CELLS +


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт янв 31, 2012 21:53 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Kopa писал(а):
Может сначала оценить и разобраться с потенциальными возможностями и узкими местами в существующем решении?

Для начала применить все простые пути - это даёт неслабую оптимизацию, хотя и далёкую от лучших компиляторов.
Затем к полученному результату можно применять оптимизатор ассемблерной макроподстановки. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Ср фев 01, 2012 11:29 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Kopa писал(а):
Как осуществилась INLINE подстановка кода
DOES> SWAP CELLS +


DOES> компилирует (DOES2)
В принципе, компиляцию (DOES2) можно заменить на компиляцию R> (его задача снять со стека возвратов PFA), но
для оптимизатора это еще признак созданного с помощью DOES> кода.
Оптимизацией PFA содержащих слов занимается CON>LIT. В частности, переменные и константы CON>LIT комрилирует
как литералы. Применяется в COMPILE,.
Если CON>LIT сделал всю работу и компилировать ничего не надо, то возвращается 0 иначе CFA -1.
В случае с компиляцией созданного с помощью DOES> кода, CON>LIT компилирует поле PFA как литерал,
а поданное ему на вход CFA заменяет на другое (ссылку на код следующий за DOES>).
К адресу на которое указывает CFA прибавляется 5 чтобы
обойти (DOES2).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Ср фев 01, 2012 21:14 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Mihail писал(а):
По моему, сперва следует передрать DO LOOP из vfx.
Вроде, у них лучше это сделано.


А ниже приведённого сравнения будет недостаточно?
Модель реализации слов (DO) (LOOP) можно, по потребностям, применять разную.
Это, наверное, потребует изменения в ядре?
И если мы знаем, что контекст цикла DO LOOP не изменится внутренними словами то можно реализацию цикла упрощать. (в данном варианте количество проходов цикла заранее известно)

Код:
: CARRAY ( n -- )
  CREATE  ALLOT  DOES> ( n -- a )  + ;

8  CARRAY Verti

: Clear ( -- )
   8 0 DO 0 I Verti C! LOOP
;
spf4                                  vfx 4.
                                       PUSH  004A8A61                 
MOV  FC [EBP] , EAX                    PUSH  7FFFFFF8                 
MOV  F8 [EBP] , # 8                    PUSH  00                       
XOR  EAX , EAX                         NOP                           
MOV  EDX , # 80000000                  NOP                           
SUB  EDX , F8 [EBP]                    NOP                           
LEA  EBX , [EDX] [EAX]                 NOP                           
MOV  EAX , FC [EBP]                    MOV   EDX, [ESP]               
PUSH , # 574183                        LEA   EBP, [EBP+-08]           
PUSH EDX                               MOV   DWord Ptr [EBP], 00000000
PUSH EBX                               MOV   [EBP+04], EBX           
XCHG  EAX, EAX                         MOV   EBX, EDX                 
MOV  ECX , [ESP]                       CALL  004A898B        VERTI   
SUB  ECX , 4 [ESP]                     MOV   DL, [EBP]               
MOV  5740E9 ( Verti+5 ) [ECX] , # 0    MOV   0 [EBX], DL             
INC  [ESP]                             ADD   [ESP], 01               
JNO  57416C                            ADD   [ESP+04], 01             
LEA  ESP , C [ESP]                     MOV   EBX, [EBP+04]           
RET  NEAR                              LEA   EBP, [EBP+08]           
END-CODE   Ok                          JNO   004A8A30                 
                                       LEA   ESP, [ESP+0C]           
( 58 bytes 18 instructions)     4A8A61 C3  NEXT,                         
              ( 66 bytes, 22 instructions )                           


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт фев 02, 2012 12:09 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Kopa писал(а):
А ниже приведённого сравнения будет недостаточно?


В приведенном примере дело не в DO LOOP , а в том, что в vfx новые слова
не подлежать инлайн подстановке с последующей оптимизацией.
Что касается DO LOOP, вопрос вот в чем:

В СПФ LOOP генерит:
Код:
INC  [ESP]
JNO  M_LOOP

при этом I инлайнит
Код:
CODE C-I
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      MOV EAX, [ESP]
      SUB EAX, 4 [ESP]
      RET
END-CODE


Можно C-I сделать следующим
Код:
CODE C-I
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      MOV EAX, [ESP]
      RET
END-CODE

Во многих случаях LEA EBP, -4 [EBP] MOV [EBP], EAX
съедаются оптимизатором.

Но при этом LOOPу придется генерить:
Код:
INC  [ESP]
INC  4 [ESP]
JNO  M_LOOP


Т.е. можно упростить C-I за счет добавление к коду генерируемому LOOPом.
В дальнейшем, инструкцию INC [ESP] к коду генерируемому LOOPом
можно не добавлять, если между DO и LOOP не одного I не использовалось.
(завести для этого специальный флаг).
Но при этом, нужно учесть, что могут быть еще J и К .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт фев 02, 2012 12:51 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Т.е. можно упростить C-I за счет добавление к коду генерируемому LOOPом.
В дальнейшем, инструкцию INC [ESP] к коду генерируемому LOOPом
можно не добавлять, если между DO и LOOP не одного I не использовалось.
(завести для этого специальный флаг).
Но при этом, нужно учесть, что могут быть еще J и К .

Если I не используется, то тогда проще ввести слова FOR NEXT, так как при этом не нужно задавать два предела цикла - достаточного одного - количество повторов(счетчик). 5 FOR ... NEXT.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт фев 02, 2012 18:38 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Тогда, в первом приближении
Код:
HEX

CODE C-I
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      MOV EAX, [ESP]
      RET
END-CODE

CODE J   \ 94
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      MOV EAX, 10 [ESP]
      RET
END-CODE

CODE C-DO
   LEA EBP, 8 [EBP]
   MOV  EBX, EAX
\   A; 908D W,  0000 W, 8000 W,   \   LEA  EDX,  80000000 [EAX]
   ADD  EAX, # 80000000
   SUB  EAX, -8 [EBP]
   MOV  EDX, EAX
   MOV  EAX, -4 [EBP]
   MOV  EDX, EDX  \ FOR OPT
\   PUSH EDX
\   PUSH EBX
      RET
END-CODE

CODE C-?DO
      CMP  EAX, -8 [EBP]
      JNZ  SHORT @@1
        MOV  EAX, -4 [EBP]
        JMP  EBX
\      STHEN
@@1:  PUSH EBX
   MOV  EBX, EAX
\   A; 908D W,  0000 W, 8000 W,   \   LEA  EDX,  80000000 [EAX]
   ADD  EAX, # 80000000
   SUB  EAX, -8 [EBP]
   MOV  EDX, EAX
   MOV  EAX, -4 [EBP]
   MOV  EDX, EDX  \ FOR OPT
   PUSH EDX
   PUSH EBX
      RET
END-CODE

: LOOP   \ 94
  ?COMP
  24 04FF W, C, \ inc dword [esp]
  042444FF , \ inc dword 4 [esp]
  HERE 2+ - DUP SHORT?   SetOP SetJP
  IF
    71 C, C, \ jno short
  ELSE
    4 - 0F C, 81 C, , \ jno near
  THEN    SetOP
  0C24648D , \ lea esp, 0c [esp]
  DP @ SWAP !
; IMMEDIATE

: +LOOP    \ 94
  ?COMP 
  ['] ADD[ESP],EAX  INLINE,
  04244401 , \ ADD     4 [ESP] , EAX 
  ['] DROP INLINE,
  HERE 2+ - DUP SHORT?   SetOP SetJP
  IF
    71 C, C, \ jno short
  ELSE
    4 - 0F C, 81 C, , \ jno near
  THEN    SetOP
  0C24648D , \ lea esp, 0c [esp]
  DP @ SWAP !
; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт фев 02, 2012 19:16 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Mihail писал(а):
Тогда, в первом приближении
Код:
...


Возможно улучшение производительности кода?
(например проверив на Benchmark)

P.S. Рассматривая IForth подметил, что для разных процессоров
сформированы разные Форт образы ядра.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Пт фев 03, 2012 16:10 
Проверил резуьтаты с изменённым ядром SPF4 стандартного Benchmark от MPE на одной "железке" (PIII).
Есть незначительное улучшение скорости прохождения
тестов.

P.S. Если изменить хранение верхнего элемента стека
на регистр EBX и скорректировать макрооптимизатор, то возможно это будет "достаточно" эффективно.
В IForth, примитивы вообще не кешируют TOS и для стека данных используется аппаратный стек. Какая дальше с кодом происходит оптимизация не смотрел.
Если поменять дизайн стеков, то как это скажется на производительности, если учесть что Форт системы с
отличным дизайном стеков чем у SPF возможны.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Пт фев 03, 2012 18:58 
'Kopa писал(а):
В IForth, примитивы вообще не кешируют TOS и для стека данных используется аппаратный стек. Какая дальше с кодом происходит оптимизация не смотрел.
Если поменять дизайн стеков, то как это скажется на производительности, если учесть что Форт системы с
отличным дизайном стеков чем у SPF возможны.

Я расматривал вариант с аппаратным стеком и кешированием TOS в EBX.
Есть свои приемущества и недостки. В определения примитивов приходится вставлять типа:
pop edx
...
jmp edx
В слова определенные c ":" :
lea esi, [esi-4] \ esi стек возвратов
pop [esi]
...
lodsd
jmp eax
Но в целом небольшое уменьшение размера кода.
Про скорость выполнения сложно сказать, не тестирвал.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Сб фев 04, 2012 15:23 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Mihail писал(а):
Возможно улучшение производительности кода?

Команда SUB EAX, 4 [ESP] должна быть быстрее чем INC 4 [ESP]
т.к. INC 4 [ESP] по мимо чтения и инкремета приходится результат записать
обратно ОЗУ. Однако, в паре MOV EAX, [ESP] SUB EAX, 4 [ESP]
за чтением EAX сразу следует операция над этим регистром, а INC [ESP] INC 4 [ESP]
могут быть выполнены параллельно да еще в сочетании с какой нибудь предыдущей
операцией над регистром. А главное, единственное MOV EAX, [ESP] гораздо легче
увязывается оптимизатором с другими инструкциями, чем пара MOV EAX, [ESP] SUB EAX, 4 [ESP] .

'Kopa писал(а):
Проверил резуьтаты с изменённым ядром SPF4 стандартного Benchmark

В чем заключалось изменённие ядра?

'Kopa писал(а):
Если изменить хранение верхнего элемента стека
на регистр EBX и скорректировать макрооптимизатор,

Чем EBX лучше EAX ?

Гость писал(а):
Я расматривал вариант с аппаратным стеком

Т.е. не базироваться на подпрограммном шитом коде?
При этом, сложном производить инлайн-подстановку не уровне машинного кода.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Сб фев 04, 2012 15:53 
Mihail писал(а):
В чем заключалось изменённие ядра?

А тот код, что был предложен тобой выше:)

Mihail писал(а):
Чем EBX лучше EAX

Тем, что он, похоже, более "разгружен" в системе.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 366 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22, 23 ... 25  След.

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


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

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


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

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