Forth
http://fforum.winglion.ru/

m3forth - форт для ARM Cortex-M3
http://fforum.winglion.ru/viewtopic.php?f=39&t=2952
Страница 3 из 5

Автор:  Ilya [ Вс ноя 03, 2013 22:48 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
в паре мест у меня получше
..............

Сорри, но ИМХО: для неофита лучше тот ФОРТ - у которого подробнее документация В этом плане молодцы "буржуины": win32Forth, Amforth, ... Понятно, что не все смогут осилить исходники spf4 (правда есть исключения: очень хорошую док-цию делал тов. ~yz для своих либ).
Сравните документацию (почти) любого "буржуинского" ФОРТ-а и "документацию" все-Российского ФОРТА spf4!!!
Такое ощущение, что ФОРТ стал с родни "массонскому ложе" :) - очень мало информации и велик порог вхождения.
Жалко! :(

Автор:  Hishnik [ Вс ноя 03, 2013 23:01 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Ilya писал(а):
Такое ощущение, что ФОРТ стал с родни "массонскому ложе" - очень мало информации и велик порог вхождения.
Жалко!

Я бы расширил тезис - не только документация, но и активное разъяснение, как, почему и зачем все это пишется.

Автор:  oco [ Пн ноя 04, 2013 13:23 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
в паре мест у меня получше

да, согласен
Mihail писал(а):
Оптимизатор лучше делать полностью на уровне машинных кодов.

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

Автор:  Mihail [ Вт ноя 05, 2013 11:07 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

oco писал(а):
лучше на уровне машинных кодов пройтись после обычной оптимизации

Обычной это какой? Чем лучше?
Оптимизация уровне машинных кодов перекрывает любые другие.

Автор:  Hishnik [ Вт ноя 05, 2013 13:23 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
Оптимизация уровне машинных кодов перекрывает любые другие.

Дано: программа, упорядочивающая содержимое массива. В исходном виде упорядочивание происходит следующим образом массив перемешивается генератором случайных чисел, затем проверяется, стали ли числа упорядоченными. Каким образом эту программу можно оптимизировать на уровне машинных кодов с перекрытием любых других способов?

Автор:  Mihail [ Вт ноя 05, 2013 14:11 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Хищник писал(а):
Дано: программа, упорядочивающая содержимое массива.

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

Автор:  Hishnik [ Вт ноя 05, 2013 14:27 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
Хищник писал(а):
Дано: программа, упорядочивающая содержимое массива.

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


Бесподобно! :) Я всегда оставляю некоторую вероятность того, что ты все-таки захочешь сдвинуться с мертвой точки, но сообщение было в основном иллюстрацией к вопросу "почему оптимизация в машинных кодах не является лучшей из возможных".

Автор:  Mihail [ Вт ноя 05, 2013 17:36 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Хищник писал(а):
почему оптимизация в машинных кодах не является лучшей из возможных

За исключением типов входных параметров, программа в машинных кодах
содержит в себе всю информацию необходимую оптимизатору.
Т.о. необходимости в промежуточном представлении программы нет.
Речь может идти только о целесообразности.

Автор:  Hishnik [ Вт ноя 05, 2013 18:16 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Хорошо, вот код.

Код:
: SOLVE
  1000000000 0 DO
    2 PICK I DUP * *
    2 PICK I * +
    1 PICK +
    0 = IF I . " является корнем квадратного уравнения" PRINT THEN
  LOOP
  DROP DROP DROP
;

1 2 -3 SOLVE 


Оптимизировать это надо именно в машинных кодах? :)

Автор:  Mihail [ Вт ноя 05, 2013 18:42 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Оптимизатор специально для примера не подправлял.
Занимает 4676 байт исходников.

Код:
: SOLVE
10001280   B500      PUSH   {R14}
  1000000000 0 DO
10001282   F844 1D04   STR.W   R1, [R4, #-4]!
10001286   F64C 2100   MOVW   R1, #51712 ; 0xCA00
1000128A   F6C3 319A   MOVT   R1, #15258 ; 0x3B9A
1000128E   F844 1D04   STR.W   R1, [R4, #-4]!
10001292   2100      MOVS   R1, #0
10001294   F7FF FAE8   BL   10000868  ( (DO) )
    2 PICK I DUP * *
10001298   F844 1D04   STR.W   R1, [R4, #-4]!
1000129C   2102      MOVS   R1, #2
1000129E   F854 1021   LDR.W   R1, [R4, R1, lsl #2]
100012A2   F844 1D04   STR.W   R1, [R4, #-4]!
100012A6   9900      LDR   R1, [SP, #0]
100012A8   F844 1D04   STR.W   R1, [R4, #-4]!
100012AC   CC01      LDMIA   R4!, {R0}
100012AE   FB00 F101   mul.w   R1, R0, R1
100012B2   CC01      LDMIA   R4!, {R0}
100012B4   FB00 F101   mul.w   R1, R0, R1
    2 PICK I * +
100012B8   F844 1D04   STR.W   R1, [R4, #-4]!
100012BC   2102      MOVS   R1, #2
100012BE   F854 1021   LDR.W   R1, [R4, R1, lsl #2]
100012C2   4608      MOV   R0, R1
100012C4   9900      LDR   R1, [SP, #0]
100012C6   FB00 F101   mul.w   R1, R0, R1
100012CA   CC01      LDMIA   R4!, {R0}
100012CC   1841      ADDS   R1, R0, R1
    1 PICK +
100012CE   F844 1D04   STR.W   R1, [R4, #-4]!
100012D2   2101      MOVS   R1, #1
100012D4   F854 1021   LDR.W   R1, [R4, R1, lsl #2]
100012D8   CC01      LDMIA   R4!, {R0}
100012DA   1841      ADDS   R1, R0, R1
    0 = IF I  H. THEN
100012DC   4608      MOV   R0, R1
100012DE   2100      MOVS   R1, #0
100012E0   4041      EORS   R1, R0
100012E2   3901      SUBS   R1, #1
100012E4   4189      SBCS   R1, R1
100012E6   4608      MOV   R0, R1
100012E8   CC02      LDMIA   R4!, {R1}
100012EA   B900      CBNZ   R0, 100012EE
100012EC   E004      B.N   100012F8
100012EE   F844 1D04   STR.W   R1, [R4, #-4]!
100012F2   9900      LDR   R1, [SP, #0]
100012F4   F7FF FE5C   BL   10000FB0  ( H. )
  LOOP
100012F8   F7FF FAC4   BL   10000884  ( (LOOP) )
100012FC   0064      LSLS   R4, R4, #1
  DROP DROP DROP
100012FE   CC02      LDMIA   R4!, {R1}
10001300   CC02      LDMIA   R4!, {R1}
10001302   CC02      LDMIA   R4!, {R1}
;
10001304   BD00      POP   {R15}


Кто даст лучшее соотношения качество оптимизации к размеру оптимизатора?

Автор:  Hishnik [ Вт ноя 05, 2013 18:57 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
Оптимизатор специально для примера не подправлял.
Занимает 4676 байт исходников.

Нет слов!!! Михаил, а тебя в школе учили решать квадратное уравнение именно методом перебора вариантов?

Автор:  oco [ Вт ноя 05, 2013 20:08 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Код:
: SOLVE
  1000000000 0 DO
cde:   f847 6d04       str.w   r6, [r7, #-4]!
ce2:   f64c 2600       movw    r6, #51712      ; 0xca00
ce6:   f6c3 369a       movt    r6, #15258      ; 0x3b9a
cea:   f847 6d04       str.w   r6, [r7, #-4]!
cee:   2600            movs    r6, #0
cf0:   f7ff fb4a       bl      388 <(DO)>
    2 PICK I DUP * *
cf4:   f847 6d04       str.w   r6, [r7, #-4]!
cf8:   68be            ldr     r6, [r7, #8]
cfa:   f7ff fb65       bl      3c8 <I>
cfe:   f847 6d04       str.w   r6, [r7, #-4]!
d02:   cf01            ldmia   r7!, {r0}
d04:   4346            muls    r6, r0
d06:   cf01            ldmia   r7!, {r0}
d08:   4346            muls    r6, r0
    2 PICK I * +
d0a:   f847 6d04       str.w   r6, [r7, #-4]!
d0e:   68be            ldr     r6, [r7, #8]
d10:   f7ff fb5a       bl      3c8 <I>
d14:   cf01            ldmia   r7!, {r0}
d16:   4346            muls    r6, r0
d18:   cf01            ldmia   r7!, {r0}
d1a:   4406            add     r6, r0
    1 PICK +
d1c:   f847 6d04       str.w   r6, [r7, #-4]!
d20:   687e            ldr     r6, [r7, #4]
d22:   cf01            ldmia   r7!, {r0}
d24:   4406            add     r6, r0
    0 = IF I . THEN
d26:   2e00            cmp     r6, #0
d28:   cf40            ldmia   r7!, {r6}
d2a:   d103            bne.n   d34 <SOLVE+0x58>
d2c:   f7ff fb4c       bl      3c8 <I>
d30:   f7ff fee4       bl      afc <.>
  LOOP
d34:   f7ff fb3b       bl      3ae <(LOOP)>
d38:   d7dc            bvc.n   cf4 <SOLVE+0x18>
  DROP DROP DROP
d3a:   cf41            ldmia   r7!, {r0, r6}
d3c:   cf40            ldmia   r7!, {r6}
d3e:   bd00            pop     {pc}

Автор:  Hishnik [ Вт ноя 05, 2013 20:10 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Народ, да вы издеваетесь, что ли? Срочно на ithappens - как фортеры оптимизируют решение квадратного уравнения ПЕРЕБОРОМ!!! :))

Автор:  oco [ Вт ноя 05, 2013 20:12 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Mihail писал(а):
oco писал(а):
лучше на уровне машинных кодов пройтись после обычной оптимизации

Обычной это какой? Чем лучше?
Оптимизация уровне машинных кодов перекрывает любые другие.

Я имел в виду ту, что я использую - замена наборов слов на их оптимизированные эквиваленты

Автор:  oco [ Вт ноя 05, 2013 20:12 ]
Заголовок сообщения:  Re: m3forth - форт для ARM Cortex-M3

Хищник писал(а):
Народ, да вы издеваетесь, что ли? Срочно на ithappens - как фортеры оптимизируют решение квадратного уравнения ПЕРЕБОРОМ!!! :))

:)
Интересно было натравить мой оптимизатор на код и сравнить с оптимизатором Михаила

Страница 3 из 5 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/