Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс май 19, 2024 14:20

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 409 ]  На страницу Пред.  1 ... 24, 25, 26, 27, 28
Автор Сообщение
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Ср мар 20, 2024 17:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7962
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
В системе команд можно делать специальные поля, которые будут одновременно с расчетами выполнять переход. Литерал в такую команду трудно добавить, а RET или LOOP вполне можно. Но это уже получится упражнение "расставьте поля команды, чтобы было и полезно, и не слишком громоздко". В тестах понятно, что по сути работает только тело вложенного цикла, а накладные расходы идут параллельно с выполнением стековых манипуляций. Ну, оно тоже имеет право на жизнь.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Чт мар 21, 2024 01:25 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 468
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 23 раз.
Глянул их код чуть повнимательнее.
Код:
address opcode label comment
001000  5715C INNER n push n push         1000 0 DO
001001  003E8       1000
001002  00000       0
001003  57D58 IN1   n drop n pop          34 DROP
001004  00022       34
001005  00001       1
001006  BE37B       + pop over over    INC loop counter
001007  A080A       xor  T0  IN2       COMPARE
001008  FF39E       drop push push nop
00100A  FFFFE IN2   drop drop drop ;       FINISH
00100B  5715C BENCH n push n push           1000 0 DO
00100C  003E8       1000
00100D  00000       0
00100E  20000 BE1   call INNER
00100F  563DE       n pop nop nop
001010  00001       1
001011  BE37B       + pop over  over  INC counter
001012  A0815       xor T0  BE2 COMPARE
001013  FF39E       drop push push nop
001014  00003       jmp  BE1                LOOP
001015  FFFBA BE2   drop drop drop n      FINISH
001016  00007       7
001017  57020       n push  ; long call and return
001018  03987       lit'  EMIT
Там много опечаток, например, отсутствует строка с адресом 001009 (там должен быть jmp IN1), по адресу 001014 адрес прыжка неправильный (должен быть прыжок по адресу XXXE, а не XXX3, видимо, неправильно распозналось при сканировании :) ), да и формат команды вызывает некоторые сомнения. На глаз там во внутреннем цикле 15-20 команд, но сложно в таком варианте оценивать, если не знать, сколько тактов выполняется каждая команда, выполняются ли они параллельно и т.д. С другой стороны у нас есть тактовая частота и время выполнения миллиона итераций. Смело перемножаем одно на другое - получаем количество тактов на итерацию во внутреннем цикле: 200*0.17=34 такта на итерацию цикла в INNER. Для сравнения 68040 и R4000 тратят вполне достойные 9 и 12 тактов соответственно, да даже 68030 с его 18 тактами на итерацию не так уж и плох.
Создатели F21 пытются выйти из положения и разворачивают внутренний цикл, убирая тем самым накладные расходы на организацию цикла, в результате в общем-то простой код жиреет аж до 400 байт, но количество тактов на итерацию уменьшается всего лишь до 15. И лишь когда они задействуют вместо честного литерала свой внутренний регистр А (вручную или компилятор сам сообразил?), то получают космические 2 такта на итерацию. :)
А у меня, например, в базовом варианте с 6-битными командами литерал весит 2 команды (и такта), еще такт на drop, ну и еще один на loop. В результате итерация весит 3 байта и длится 4 такта. А в продвинутом варианте (4- и 6-битном) всего два такта: первый на 34+drop, а второй на loop. При желании, наверное, можно и в один такт уложиться.
И да, команды для реализации аппаратных циклов - это (с оговорками) условные call и ret. Например, while и do вполне можно обозвать условным call, а repeat и loop - условными ret. Разница лишь в том, что одни проверяют и меняют счетчик цикла, а другие проверяют условие. Условным call необходим полный литерал (адрес, по которому прыгать при невыполнении условия), но они выполняются лишь раз в качестве пролога перед входом в тело цикла, а условные ret литералов не требуют (адрес начала цикла берут из стека возвратов) и выполняются за такт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб мар 23, 2024 22:27 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7962
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Игры с внутренними регистрами в целях улучшить показатели в синтетических тестах в конечном итоге не дают практической пользы. Если разобраться, в итоге это приводит к добавлению аппаратного ядра, которое и выполняет основную работу, и тут его стоит аккуратно "отцепить" от процессора, чтобы не делать из универсального устройства компонент, который по сути будет крутиться в цикле CMD1 CMD2. В принципе есть варианты ускорения циклов и часто встречаются дополнительные флаги "одновременно с этой командой делать ret". Но такие флаги начинают расползаться по системе команд, портя ее внутреннюю согласованность.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вс май 19, 2024 00:18 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 468
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 23 раз.
KPG писал(а):
Стандартный Cи тест Coremark
(для Forth тоже был перенесён и были измерения в местном топике Бенчмарка Форт систем)

P.S. Таблица на сайте измерения для разных кристалов https://www.eembc.org/coremark/scores.php
Coremark пока не компилируется, т.к. до сих пор не дошли руки до указателей на функции в моем трансляторе.

Но зато с полпинка завелся тест Dhrystone. Наконец-то добрался до платы с ПЛИС и прогнал Дрыстоний через свои процессоры:
Код:
CPU               MHz  Dhry   s      Dhry/s DMIPS  DMIPS/MHz
r81                20  16384  6.126   2675   1.52  0.08
f41                20  16384  7.484   2189   1.25  0.06
f42                20  16384  6.637   2469   1.41  0.07
f43                20  16384  5.466   2997   1.71  0.09
f44                20  16384  4.920   3330   1.90  0.09
f42x2              20  16384  4.620   3546   2.02  0.10
f43x4              20  16384  3.907   4193   2.39  0.12
f44x4              20  16384  2.538   6455   3.67  0.18
f61                20  16384  2.541   6448   3.67  0.18

Core 2 Duo E8500 3160  1M     0.440          1294  0.41
vax 11/780          5                 1757   1     0.20

                                     Dhry2  Dhry2
                                       Opt  NoOpt
                                     VAX    VAX
CPU               MHz                 MIPS   MIPS
AMD 80386          40                 13.7   4.53  0.11-0.34
IBM 486D2          50                 22.4   7.89  0.16-0.32
80486 DX2          66                 35.3   12.4  0.19-0.53
IBM 486BL         100                 40.9   11.8  0.12-0.41
AMD 5X86          133                 84.5   9.42  0.07-0.64
Pentium            75                 87.1   18.9  0.25-1.16
...
Core 2 Duo 1 CP  2400                 6446   1251  0.52-2.69
Core i7 4820K    3900                11867   1981  0.51-3.04
Для сравнения здесь же приведены цифры по "эталонному" vax11/780, core 2 duo e8500, под который скомпилировал своим транслятором и по другим процессорам (взято отсюда http://www.roylongbottom.org.uk/dhrystone%20results.htm).

Из моих в списке risc c 8-битными командами (по 4 бита на код команды и register/immediate) и форт-процессоры с 4- и 6- битными командами. Процессоры f42x2/f43x4/f44x4 выполняют в точности ту же прошивку, что f42/f43/f44 соответстенно. Но f42x2 умеет выполнять одновременно до 2 команд за такт, а f43x4/f44x4 умеют за такт n (литерал)/n call/n jz/n +/n - ну и что-то еще по мелочи, в результате работают заметно быстрее.



Изображение
ссылка на изображение


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 409 ]  На страницу Пред.  1 ... 24, 25, 26, 27, 28

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


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

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


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

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