Forth http://fforum.winglion.ru/ |
|
Быстро считать массив. http://fforum.winglion.ru/viewtopic.php?f=2&t=3179 |
Страница 2 из 2 |
Автор: | Hishnik [ Вт июл 24, 2018 15:28 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Sotnik писал(а): Насчёт многоядерности. Какая версия форта может работать с железом без винды? Использовать многоядерность, и всю оперативную память. В принципе, это отдельная большая тема, но вкратце - форт тут ничем специально не поможет. Без операционной системы мгновенно пропадает большинство оборудования (нет драйверов), а тем, что остается, надо управлять вручную. Памятью в первую очередь (свопа не будет, это тоже вручную). Кэширование дисковых операций вручную. Вобщем, резкого роста производительности ждать не стоит. Запуск кода в кольце 0 защищенного режима был подробно описан в серии "Библиотека системного программиста". На практике удобнее было пользоваться DOS-extender-ами, которые формировали код для запуска приложения и шлюзы к утилитам ДОС (с чистым BIOS работа была совсем кошмарная). В целом это далеко не революционный прорыв получается, и ничего такого сногсшибательного от Ring0 не видно. |
Автор: | Sotnik [ Вт июл 24, 2018 21:10 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Hishnik писал(а): В принципе, это отдельная большая тема, но вкратце - форт тут ничем специально не поможет. Без операционной системы мгновенно пропадает большинство оборудования (нет драйверов), а тем, что остается, надо управлять вручную. Памятью в первую очередь (свопа не будет, это тоже вручную). Кэширование дисковых операций вручную. Вобщем, резкого роста производительности ждать не стоит. Нафиг эта винда под некоторые задачи. Я использовал, в древности, под ДОС-ом+форт+DN+WD, и всё работало на ура при 640к памяти. Прослойка не нужна. 1. Новые архитектуры и ДОС? 2. Или кто-то писал форт-ОС? 3. Или линукс? Не совсем понимаю идеологию цепляния за винду. Форт достаточен для решения определённых задач, не заточеных под видео/аудио/инет/1Ц и прочую "ерунду". Нужен инструмент для решения задач, иногда числомолотилка, иногда управление по COM порту. И надо использовать инструмент стоящий на столе и идеально подходящий для этого. |
Автор: | chess [ Вт июл 24, 2018 22:35 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Вот быстренько(не оптимальный вариант) сделал генератор уникальных наборов байтов для 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) как на ассемблере так и на ЯВУ(С++), что касается С++, то этот язык как и многие аналогичные, это черный ящик, и что там есть по использованию многогоядерности на сегодня, тем и пользуются. В Форт можно конечно добавить то, что есть в С++ и даже больше, были бы соответствующие задачи. В вашем случае наверное можно обойтись. |
Автор: | Sotnik [ Ср июл 25, 2018 03:16 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
chess писал(а): Как и ожидалось время счета получилось около секунды(даже меньше - 0,364 секунды) Спасибо. Ещё с тем вариантом не разобрались - как всегда есть место для оптимизации. DMETER я выкнул, не компилится а описания не нашёл. А так всё работает. Цитата: организация оптимальной загрузки ядер на счет в зависимости от конкретной решаемой задачи Что-то типа: Begin1 <тело1> Until1, Begin2 <тело2> Until2, и т.п. - куда уже конкретнее.И по очереди скидывать в общюю память. Был бы кэш у каждого ядра свой на пару мег - что ещё надо для счастья!? Так нет, придумали винду, морочает голову, путается под ногами, что-то требует. |
Автор: | chess [ Сб июл 28, 2018 22:07 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Ну вот более-менее оптимизированный вариант подсчета количества уникальных наборов Код: : 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 раз |
Автор: | Sotnik [ Вс июл 29, 2018 02:49 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Спасибо. Переваривалка массивов всё тормозит. Хотим в FPGA запихать, а все в отпусках. DMETER - понятно что старт/стоп задачи считает, а где все эти дополнения SPF описаны? |
Автор: | chess [ Вс июл 29, 2018 15:10 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Sotnik писал(а): DMETER - понятно что старт/стоп задачи считает, а где все эти дополнения SPF описаны? Тут все примитивно: Код: : 'DMETER ( XT -- ) TIMER@ \ состояние системного таймера до запуска слова на исполнение 2>R EXECUTE \ запуск слова на исполнение S0 @ SP! \ сброс стека TIMER@ \ таймер после окончания 2R> D- \ время счета в тиках таймера 3890 \ тактовая частота процессора в мГц UM/MOD NIP CR . ." MKCEK " \ время счета в микросекундах ; : DMETER ( "name" -- ) ' 'DMETER ; PS. Этот вариант измерения времени подходит для более-менее протяженных процессов ( от единиц микросекунд и более ). |
Автор: | Sotnik [ Пн мар 23, 2020 15:29 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
chess писал(а): Sotnik писал(а): DMETER - понятно что старт/стоп задачи считает, а где все эти дополнения SPF описаны? Тут все примитивно: Код: : 'DMETER ( XT -- ) TIMER@ \ состояние системного таймера до запуска слова на исполнение 2>R EXECUTE \ запуск слова на исполнение S0 @ SP! \ сброс стека TIMER@ \ таймер после окончания 2R> D- \ время счета в тиках таймера 3890 \ тактовая частота процессора в мГц UM/MOD NIP CR . ." MKCEK " \ время счета в микросекундах ; : DMETER ( "name" -- ) ' 'DMETER ; PS. Этот вариант измерения времени подходит для более-менее протяженных процессов ( от единиц микросекунд и более ). 1. Win10x64 - не рабо-о-отает... 2. Fort + GPU = реальная дружба в примерах, или дохлый номер? |
Автор: | Hishnik [ Чт мар 26, 2020 00:39 ] |
Заголовок сообщения: | Re: Быстро считать массив. |
Sotnik писал(а): Fort + GPU = реальная дружба в примерах, или дохлый номер? На Питоне пишут интерфейсы к GPU, на Форте можно то же самое делать. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |