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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 366 ]  На страницу Пред.  1 ... 18, 19, 20, 21, 22, 23, 24, 25  След.
Автор Сообщение
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Сб фев 04, 2012 17:01 
Mihail писал(а):
Гость писал(а):
Я расматривал вариант с аппаратным стеком

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

Нет также на подпрограмном. В IForth так реализовано.
Стек параметров в ESP, стек возвратов в EBP (я в ESI), TOS в EBX. Поэтому такие манипуляции внутри определений, как я написал выше.
Зато внутри слова:
DUP - push EBX
DROP - pop EBX
R@ - push EBX
mov EBX, [ESI]


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Вт фев 28, 2012 21:17 
Несколько тестов макрооптимизатора неоптимально отрабатываемых (в VFX лучше)

Код:
\ пример цепочки непрерывных вычислений
VARIABLE AA
VARIABLE BB
: a AA @ 1+ 7 AND BB ! ;


Код:
VARIABLE AA
VARIABLE BB
: a DUP 1+ AA ! BB ! ;


Код:
: action 1 . ;
: a BEGIN action 1- DUP WHILE REPEAT DROP ;


P.S. При оптимизации
Код:
DUP 0x8 AND IF ...

почему не использовать команду TEST для тестирования по маске?
Код:
9 AND DUP IF ...
вроде тоже не дорабатывает?


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

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

Бесплатная версия VFX есть? (Желательно под Ubuntu.)

`Kopa писал(а):
Код:
\ пример цепочки непрерывных вычислений
VARIABLE AA
VARIABLE BB
: a AA @ 1+ 7 AND BB ! ;


Код:
VARIABLE AA
VARIABLE BB
: a DUP 1+ AA ! BB ! ;



Код:
57353F 8B0D14355700   MOV     ECX , 573514  ( AA+5  )
573545 8D4901      LEA     ECX , 1 [ECX]
573548 81E107000000   AND     ECX , # 7
57354E 8BD1      MOV     EDX , ECX
573550 890D2C355700   MOV     57352C  ( BB+5  ) , ECX
573556 C3      RET     NEAR
END-CODE  a isn't unique (tt.f)

573567 8D4801      LEA     ECX , 1 [EAX]
57356A 8BD1      MOV     EDX , ECX
57356C 890D14355700   MOV     573514  ( AA+5  ) , ECX
573572 89052C355700   MOV     57352C  ( BB+5  ) , EAX
573578 8B4500      MOV     EAX , 0 [EBP]
57357B 8D6D04      LEA     EBP , 4 [EBP]
57357E C3      RET     NEAR


Вроде как только лишнее MOV EDX , ECX

Цитата:

Код:
: action 1 . ;
: a BEGIN action 1- DUP WHILE REPEAT DROP ;



Код:
5735B3 90      XCHG     EAX, EAX
5735B4 E8DAFFFFFF   CALL    573593  ( action )
5735B9 83C0FF      ADD     EAX , # -1
5735BC 0F8402000000   JE      5735C4  ( a+11  )
5735C2 EBF0      JMP     5735B4
5735C4 8B4500      MOV     EAX , 0 [EBP]
5735C7 8D6D04      LEA     EBP , 4 [EBP]
5735CA C3      RET     NEAR

вроде нормально

Цитата:
P.S. При оптимизации
Код:
DUP 0x8 AND IF ...

почему не использовать команду TEST для тестирования по маске?

Что-то я про TEST не в курсе.

Цитата:
Код:
9 AND DUP IF ...
вроде тоже не дорабатывает?


Код:
5735F7 2508000000   AND     EAX , # 8
5735FC 7400      JE      5735FE
5735FE C3      RET     NEAR


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Ср фев 29, 2012 16:46 
[quote="]
Бесплатная версия VFX есть? (Желательно под Ubuntu.)
[/quote]

Evaluation версии вроде бесплатны.
на открытой ftp странички MPE ftp://soton.mpeforth.com/
c заходом пользователя public и пробелов в пароле.
Ключ у них не меняется и дан в одном из предыдущих топиков.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Ср фев 29, 2012 17:09 
Как в VFX
Version: 4.01 [build 2383]
Build date: 11 December 2006

`Kopa писал(а):
Код:
\ пример цепочки непрерывных вычислений
VARIABLE AA
VARIABLE BB
: a AA @ 1+ 7 AND BB ! ;

004A8680    8B1530864A00 )          MOV       EDX, [004A8630]
( 004A8686    42 )                    INC       EDX
( 004A8687    83E207 )                AND       EDX, 07
( 004A868A    891560864A00 )          MOV       [004A8660], EDX
( 004A8690    C3 )                    NEXT,
( 17 bytes, 5 instructions )


Код:
VARIABLE AA
VARIABLE BB
: a DUP 1+ AA ! BB ! ;

( 004A8710    8BD3 )                  MOV       EDX, EBX
( 004A8712    43 )                    INC       EBX
( 004A8713    891DC0864A00 )          MOV       [004A86C0], EBX
( 004A8719    8915F0864A00 )          MOV       [004A86F0], EDX
( 004A871F    8B5D00 )                MOV       EBX, [EBP]
( 004A8722    8D6D04 )                LEA       EBP, [EBP+04]
( 004A8725    C3 )                    NEXT,
( 22 bytes, 7 instructions )





Цитата:
Код:
: action 1 . ;
: a BEGIN action 1- DUP WHILE REPEAT DROP ;

( 004A8780    E8CBFFFFFF )            CALL      004A8750        ACTION
( 004A8785    4B )                    DEC       EBX
( 004A8786    85DB )                  TEST      EBX, EBX
( 004A8788    0F8402000000 )          JZ/E      004A8790
( 004A878E    EBF0 )                  JMP       004A8780        A
( 004A8790    8B5D00 )                MOV       EBX, [EBP]
( 004A8793    8D6D04 )                LEA       EBP, [EBP+04]
( 004A8796    C3 )                    NEXT,
( 23 bytes, 8 instructions )



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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Продвинул оптимизатор http://fpauk.narod.ru/macroopt.f

Код:
REQUIRE SEE lib/ext/disasm.f
VARIABLE AA
VARIABLE BB
: a DUP 1+ AA ! BB ! ;
SEE a
57A763 8D4801           LEA     ECX , 1 [EAX]
57A766 890D38A75700     MOV     57A738  ( AA+5  ) , ECX
57A76C 890550A75700     MOV     57A750  ( BB+5  ) , EAX
57A772 8B4500           MOV     EAX , 0 [EBP]
57A775 8D6D04           LEA     EBP , 4 [EBP]
57A778 C3               RET     NEAR
END-CODE

: a AA @ 1+ 7 AND BB ! ;
SEE a
57A787 8B0D38A75700     MOV     ECX , 57A738  ( AA+5  )
57A78D 8D4901           LEA     ECX , 1 [ECX]
57A790 81E107000000     AND     ECX , # 7
57A796 890D50A75700     MOV     57A750  ( BB+5  ) , ECX
57A79C C3               RET     NEAR
END-CODE

: action 1 . ;
: a BEGIN action 1+ DUP WHILE REPEAT DROP ;
SEE a
57A7D3 90               XCHG     EAX, EAX
57A7D4 E8DAFFFFFF       CALL    57A7B3  ( action )
57A7D9 40               INC     EAX
57A7DA 0F8402000000     JE      57A7E2  ( a+F  )
57A7E0 EBF2             JMP     57A7D4
57A7E2 8B4500           MOV     EAX , 0 [EBP]
57A7E5 8D6D04           LEA     EBP , 4 [EBP]
57A7E8 C3               RET     NEAR
END-CODE

: a DUP 8 AND IF  THEN ;
SEE a
57A7F7 A908000000       TEST    EAX , , # 8
57A7FC 7400             JE      57A7FE
57A7FE C3               RET     NEAR
END-CODE


Не уверен стоит ли везде заменять
LEA EAX , 1 [EAX] на INC EAX
LEA EAX , 1 [EAX] не меняет флагов. Т.ч. должна лучше сочетаться
с другими инструкциями.


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Не уверен стоит ли везде заменять

Можно везде заменить, так как анализ флагов после LEA EAX, 1 [EAX] от инструкции перед ней в SPF не производится. А если бы
производился, то это было бы плохим решением.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 16:04 
Mihail писал(а):
Продвинул оптимизатор http://fpauk.narod.ru/macroopt.f

У меня на тесте */ ошибка деления на ноль !
Код:
Exception #-1073741676 at: benchmark.f:1454:9:
BENCHMARK
       ^ 0xC0000094L INTEGER_DIVIDE_BY_ZERO


При замере Benchmark результаты примерно одинаковые
как и в предыдущем варианте (в пределах погрешности измерений)

P.S. Стоит, наверное подумать если ускорять код после оптимизатора существенным образом:)


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
Можно везде заменить, так как анализ флагов после LEA EAX, 1 [EAX] от инструкции перед ней в SPF не производится.

Я опасаюсь того, что процессор не знает что флаги не нужны и лишний раз
протормозит. Но может быть и зря.
Т.е. меняем
Код:
CODE 1- ( n1|u1 -- n2|u2 ) \ 94
\ Вычесть 1 из n1|u1 и получить разность n2|u2.
     LEA EAX, -1 [EAX]
     RET
END-CODE

на
Код:
CODE 1- ( n1|u1 -- n2|u2 ) \ 94
\ Вычесть 1 из n1|u1 и получить разность n2|u2.
     INC  EAX
     RET
END-CODE

вернее на
Код:
CODE 1- ( n1|u1 -- n2|u2 ) \ 94
\ Вычесть 1 из n1|u1 и получить разность n2|u2.
A;   0x40 C,  \ INC EAX
     RET
END-CODE


Зимеровский асм генерит FFC0 - тоже INC EAX
чем отличается от 40 не знаю. 40 короче.
Не я ввел здесь LEA EAX, -1 [EAX] . Наверно, какие-то соображения на этот счет были.

`Kopa писал(а):
У меня на тесте */ ошибка деления на ноль !

Оптимизатор виноват?

`Kopa писал(а):
ускорять код после оптимизатора

Это как?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 18:29 
Mihail писал(а):
`Kopa писал(а):
У меня на тесте */ ошибка деления на ноль !

Оптимизатор виноват?


Не уверен, но заменяется только код оптимизатора:)
Возможно процессор, как то неадекватен (celeron 900 на нетбуке ASUS900 ) т.к. на другом компе всё ок и больше ещё нигде не запускал.

Ещё заметил, что VFX показывает время выполнение тестов
примитивов гораздо меньше чем SPF4.

Хотя на тестах алгоритмов примерно одинаково:)
(может это уже где-то предел оптимизации Форт кода для PC)

Ещё, "болезнь" на тестах SendMessage, GetTickCount, System I/O: KEY? (вроде уже рассматривалось это)

`Kopa писал(а):
ускорять код после оптимизатора

Это как?[/quote]

Фраза некорректно написана:) Подразумевалось рассмотреть ещё возможные схемы для отработки в оптимизаторе и общую
стратегию применения правил в оптимизаторе.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 18:30 
Mihail писал(а):
`Kopa писал(а):
У меня на тесте */ ошибка деления на ноль !

Оптимизатор виноват?


Не уверен, но заменяется только код оптимизатора:)
Возможно процессор, как то неадекватен (celeron 900 на нетбуке ASUS900 ) т.к. на другом компе всё ок и больше ещё нигде не запускал.

Ещё заметил, что VFX показывает время выполнение тестов
примитивов гораздо меньше чем SPF4.

Хотя на тестах алгоритмов примерно одинаково:)
(может это уже где-то предел оптимизации Форт кода для PC)

Ещё, "болезнь" на тестах SendMessage, GetTickCount, System I/O: KEY? (вроде уже рассматривалось это)

`Kopa писал(а):
ускорять код после оптимизатора

Это как?[/quote]

Фраза некорректно написана:) Подразумевалось рассмотреть ещё возможные схемы для отработки в оптимизаторе и общую
стратегию применения правил в оптимизаторе.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 18:38 
[quote="Mihail"]
Я опасаюсь того, что процессор не знает что флаги не нужны и лишний раз протормозит. Но может быть и зря.
[/code]

Неплохая подборка тех. документации по оптимизации кода
процессоров AMD, Intel подобрана в архиве iForth.

P.S. Можно ещё изучить возможности по оптимизации в iForth:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 19:25 
Mihail писал(а):
: action 1 . ;
: a BEGIN action 1+ DUP WHILE REPEAT DROP ;
SEE a
57A7D3 90 XCHG EAX, EAX
57A7D4 E8DAFFFFFF CALL 57A7B3 ( action )
57A7D9 40 INC EAX
57A7DA 0F8402000000 JE 57A7E2 ( a+F )
57A7E0 EBF2 JMP 57A7D4
57A7E2 8B4500 MOV EAX , 0 [EBP]
57A7E5 8D6D04 LEA EBP , 4 [EBP]
57A7E8 C3 RET NEAR
END-CODE


Почему не упрощается связка команд
Код:
57A7DA 0F8402000000     JE      57A7E2  ( a+F  )
57A7E0 EBF2             JMP     57A7D4


на одну JNE


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: СПФ и оптимизатор
СообщениеДобавлено: Чт мар 01, 2012 19:59 
Заметил, что
Код:
OVER +

572F3B 034500      ADD     EAX , 0 [EBP]
572F3E C3      RET     NEAR
END-CODE   Ok

OVER + SWAP

572F3B 8B5500      MOV     EDX , 0 [EBP]
572F3E 03C2      ADD     EAX , EDX
572F40 894500      MOV     0 [EBP] , EAX
572F43 8BC2      MOV     EAX , EDX
572F45 C3      RET     NEAR


не совсем логично образование второй цепочки если следовать
логике первого посыла.

P.S. Имеет ли cмысл коррекировать такие моменты кодогенерации?


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
`Kopa писал(а):
: action 1 . ;
: a BEGIN action 1+ DUP WHILE REPEAT DROP ;
Почему не упрощается связка команд
Код:
57A7DA 0F8402000000     JE      57A7E2  ( a+F  )
57A7E0 EBF2             JMP     57A7D4

Если между WHILE REPEAT нет операции они заменяются на 0= UNTIL

Код:
: a BEGIN action 1+ DUP 0= UNTIL DROP ;
SEE a

579AC3 90               XCHG     EAX, EAX
579AC4 E8B6FFFFFF       CALL    579A7F  ( action )
579AC9 40               INC     EAX
579ACA 75F8             JNE     579AC4
579ACC 8B4500           MOV     EAX , 0 [EBP]
579ACF 8D6D04           LEA     EBP , 4 [EBP]
579AD2 C3               RET     NEAR

По моему, еще рано переходить к оптимизации нелинейного кода.

`Kopa писал(а):
не совсем логично образование второй цепочки если следовать
логике первого посыла.

По моему, уже не улучшить
Код:
REQUIRE DoDTST ~mak\OptTr.f

: a OVER +
[ ' DoDTST TO DTST ]
SWAP ;

-1 552414 7C817077 579A5F
579A5F 034500           ADD     EAX , 0 [EBP]
END-CODE
-1 552417 7C817077 579A5F
579A5F 034500           ADD     EAX , 0 [EBP]
579A62 8B5500           MOV     EDX , 0 [EBP]
END-CODE
SWAP ;
288 552417 7C817077 579A5F
579A5F 034500           ADD     EAX , 0 [EBP]
579A62 8B5500           MOV     EDX , 0 [EBP]
END-CODE
289 0 552417 579A5F
579A5F 8B5500           MOV     EDX , 0 [EBP]
579A62 03C2             ADD     EAX , EDX
END-CODE
-1 552417 7C817077 579A5F
579A5F 8B5500           MOV     EDX , 0 [EBP]
579A62 03C2             ADD     EAX , EDX
END-CODE
-1 55241A 7C817077 579A5F
579A5F 8B5500           MOV     EDX , 0 [EBP]
579A62 03C2             ADD     EAX , EDX
579A64 894500           MOV     0 [EBP] , EAX
END-CODE
-1 55241C 7C817077 579A5F
579A5F 8B5500           MOV     EDX , 0 [EBP]
579A62 03C2             ADD     EAX , EDX
579A64 894500           MOV     0 [EBP] , EAX
579A67 8BC2             MOV     EAX , EDX
END-CODE
-1 5528A4 7C817077 579A5F
579A5F 8B5500           MOV     EDX , 0 [EBP]
579A62 03C2             ADD     EAX , EDX
579A64 894500           MOV     0 [EBP] , EAX
579A67 8BC2             MOV     EAX , EDX
579A69 C3               RET     NEAR


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

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


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

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


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

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