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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Вт июл 24, 2018 15:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6418
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Sotnik писал(а):
Насчёт многоядерности. Какая версия форта может работать с железом без винды?
Использовать многоядерность, и всю оперативную память.

В принципе, это отдельная большая тема, но вкратце - форт тут ничем специально не поможет. Без операционной системы мгновенно пропадает большинство оборудования (нет драйверов), а тем, что остается, надо управлять вручную. Памятью в первую очередь (свопа не будет, это тоже вручную). Кэширование дисковых операций вручную. Вобщем, резкого роста производительности ждать не стоит.

Запуск кода в кольце 0 защищенного режима был подробно описан в серии "Библиотека системного программиста". На практике удобнее было пользоваться DOS-extender-ами, которые формировали код для запуска приложения и шлюзы к утилитам ДОС (с чистым BIOS работа была совсем кошмарная). В целом это далеко не революционный прорыв получается, и ничего такого сногсшибательного от Ring0 не видно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Вт июл 24, 2018 21:10 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 149
Откуда: Минск
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Hishnik писал(а):
В принципе, это отдельная большая тема, но вкратце - форт тут ничем специально не поможет. Без операционной системы мгновенно пропадает большинство оборудования (нет драйверов), а тем, что остается, надо управлять вручную. Памятью в первую очередь (свопа не будет, это тоже вручную). Кэширование дисковых операций вручную. Вобщем, резкого роста производительности ждать не стоит.

Нафиг эта винда под некоторые задачи. Я использовал, в древности, под ДОС-ом+форт+DN+WD, и всё работало на ура при 640к памяти. Прослойка не нужна.
1. Новые архитектуры и ДОС?
2. Или кто-то писал форт-ОС?
3. Или линукс?
Не совсем понимаю идеологию цепляния за винду. Форт достаточен для решения определённых задач, не заточеных под видео/аудио/инет/1Ц и прочую "ерунду". Нужен инструмент для решения задач, иногда числомолотилка, иногда управление по COM порту.
И надо использовать инструмент стоящий на столе и идеально подходящий для этого.

_________________
Сотник.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Вт июл 24, 2018 22:35 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Вот быстренько(не оптимальный вариант) сделал генератор уникальных наборов байтов для 6 переменных для N=255
Код:
: gen6-255
{ a b c d e f \ fl } 0 TO fl
a b c d e f
f e - 1 >
IF   e 1+ TO e f 1- TO f 2DROP e f fl EXIT
ELSE d 1+ TO d d TO e 255 a - b - c - d - e - TO f f e - 1 >
     IF   DROP 2DROP d e f fl EXIT
     ELSE c 1+ TO c c TO d d TO e 255 a - b - c - d - e - TO f  f e - 1 >
          IF   2DROP 2DROP c d e f fl EXIT
          ELSE b 1+ TO b b TO c c TO d d TO e 255 a - b - c - d - e - TO f f e - 1 >
               IF  DROP 2DROP 2DROP b c d e f fl EXIT
               ELSE a 1+ TO a a TO b b TO c c TO d d TO e 255 a - b - c - d - e - TO f f e - 1 >
                    IF    2DROP 2DROP 2DROP a b c d e f fl EXIT
                    ELSE  2DROP 2DROP 2DROP 1 TO fl fl
                    THEN
               THEN
          THEN
     THEN
THEN
;

: genr6 { n \ cnt }
0 0 0 0 0 n
BEGIN
gen6-255  cnt 1+ TO cnt
UNTIL
cnt . CR
;
: tst 255 genr6 ; DMETER tst


ЛОГ
Код:
15235488
364  msec

PS.
Как и ожидалось время счета получилось около секунды(даже меньше - 0,364 секунды)
Вобщем время счета для всех вариантов будет около секунды-двух.

Насчет использования многоядерности для ускорения счета:
главное не прямой доступ ко всей памяти(это дело 'техники' в прямом смысле),
а организация оптимальной загрузки ядер на счет в зависимости от конкретной решаемой задачи.
ОС этому в принципе не мешает, чему есть примеры программ под ОС(windows-linux-macos) как на ассемблере так и на ЯВУ(С++), что касается С++,
то этот язык как и многие аналогичные, это черный ящик, и что там есть по использованию многогоядерности на сегодня, тем
и пользуются. В Форт можно конечно добавить то, что есть в С++ и даже больше, были бы соответствующие задачи. В вашем случае наверное можно обойтись.

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



За это сообщение автора chess поблагодарил: Sotnik
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Ср июл 25, 2018 03:16 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 149
Откуда: Минск
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
chess писал(а):
Как и ожидалось время счета получилось около секунды(даже меньше - 0,364 секунды)
Спасибо. Ещё с тем вариантом не разобрались - как всегда есть место для оптимизации. :)
DMETER я выкнул, не компилится а описания не нашёл. А так всё работает.
Цитата:
организация оптимальной загрузки ядер на счет в зависимости от конкретной решаемой задачи
Что-то типа: Begin1 <тело1> Until1, Begin2 <тело2> Until2, и т.п. - куда уже конкретнее.
И по очереди скидывать в общюю память. Был бы кэш у каждого ядра свой на пару мег - что ещё надо для счастья!? Так нет, придумали винду, морочает голову, путается под ногами, что-то требует. :)

_________________
Сотник.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Сб июл 28, 2018 22:07 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Ну вот более-менее оптимизированный вариант подсчета количества уникальных наборов
Код:
: gen6 { n \ a b c d e f  A B C D E F  cnt } n TO f  1 TO cnt
n 6 / TO A
n A - 5 / TO B
n A - B - 4 / TO C
n A - B - C - 3 / TO D
n A - B - C - D - 2 / TO E
n A - B - C - D - E - TO F       \ определение конечного набора A B C D E F
BEGIN
\ a . b . c . d . e . f . CR
f e - 1 >
IF   e 1+ TO e f 1- TO f
ELSE d 1+ TO d d TO e n a - b - c - e 2* - TO f e f >
     IF c 1+ TO c c TO d d TO e n a - b - e 3 * - TO f e f >
        IF b 1+ TO b b TO c c TO d d TO e n a - e 4 * - TO f e f >
           IF a 1+ TO a a TO b b TO c c TO d d TO e n e 5 * - TO f
           THEN
        THEN
     THEN
THEN
a A = b B = c C = d D = e E = f F = AND AND AND AND AND
cnt 1+ TO cnt
UNTIL
\ a . b . c . d . e . f . CR
cnt . CR
;

: tst 255 gen6 ; DMETER tst

ЛОГ
Код:
15252428

65062  MKCEK
Ok

PS. 0,364 CEK / 0,065 CEK = 5,6
Ускорение почти в 6 раз

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



За это сообщение автора chess поблагодарил: Sotnik
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Вс июл 29, 2018 02:49 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 149
Откуда: Минск
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Спасибо. Переваривалка массивов всё тормозит. Хотим в FPGA запихать, а все в отпусках.

DMETER - понятно что старт/стоп задачи считает, а где все эти дополнения SPF описаны?

_________________
Сотник.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Быстро считать массив.
СообщениеДобавлено: Вс июл 29, 2018 15:10 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Sotnik писал(а):
DMETER - понятно что старт/стоп задачи считает, а где все эти дополнения SPF описаны?

Тут все примитивно:
Код:
: 'DMETER ( XT -- )
  TIMER@                       \ состояние системного таймера до запуска слова на исполнение
  2>R
  EXECUTE                      \ запуск слова на исполнение
  S0 @ SP!                     \ сброс стека
  TIMER@                       \ таймер после окончания
  2R>
  D-                           \ время счета в тиках таймера
  3890                         \ тактовая частота процессора в мГц
  UM/MOD NIP CR . ."  MKCEK "  \ время счета в микросекундах
;

: DMETER  ( "name" -- )
   '  'DMETER  ;

PS.
Этот вариант измерения времени подходит для более-менее протяженных процессов ( от единиц микросекунд и более ).

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



За это сообщение автора chess поблагодарил: Sotnik
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

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


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

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


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

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