Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт янв 28, 2021 16:19

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Пн ноя 09, 2020 09:37 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 98
Благодарил (а): 12 раз.
Поблагодарили: 5 раз.
Victor__v писал(а):
Эх, а я как дурак через шейдеры треугольник рисую :weep; :D

Ну это же только для примера.
А что это такое интересное с шейдерами будет?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Пн ноя 09, 2020 19:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Victor__v писал(а):
Эх, а я как дурак через шейдеры треугольник рисую

Зачем так-то? Есть же "hello world для OpenGL".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Сб ноя 14, 2020 04:08 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Воспроизведенный в Lazarus движок Qt, с форт-потоком и сообщениями для виджетов, обрабатываемых в главном приложении - в данном случае Lazarus.


Вложения:
lazarus_01.png
lazarus_01.png [ 6.59 Кб | Просмотров: 838 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вс ноя 15, 2020 03:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
В Lazarus оказалось существенно проще организовать аналог SignalMapper из Qt.
Вкратце - если динамически генерировать объекты (например, кнопки), то у кнопок должен быть обработчик - естественно, у каждой. Однако писать такое же количество независимых функций - совершенно нерациональное занятие. Обработчик должен быть один... но тогда все кнопки будут делать одно и то же. В Qt для решения такой задачи существует понятие SignalMapper (с учетом используемой терминологии Signal + Slot). Идея заключается в том, чтобы расширить передаваемое кнопке сообщение, включив в него индекс самой кнопки. Поэтому в Qt о при инициализации кнопок передаваемый кнопке сигнал "расширяется" индексом самой кнопки:

Код:
    for (int i = 0; i < MAXBUTTONS; i++)
    {
        FButton[i] = new QPushButton(this);
        FButton[i]->hide();

        signalButtonMapper->setMapping(FButton[i], i);
        connect(FButton[i], SIGNAL(clicked()), signalButtonMapper, SLOT(map()));
    }
    connect(this, SIGNAL(ButtonClicked(int)), this, SLOT(ButtonClick(int)));


Lazarus такого объекта не содержит. Однако отсутствие системы сигнал+слот позволяет просто создать производный класс от TButton, добавив в него поле "индекс" (ну и функцию, конечно же - инкапсуляция):

Код:
  TVButton = class(TButton)
     private
      Index : integer;
     public
       function GetIndex : integer;
  end;


При инициализации кнопке просто сообщается ее номер:
Код:
  for i := 0 to MAXBUTTONS - 1 do
  begin
    VButton[i] := TVButton.Create(Self);
    VButton[i].Parent := Self;
    VButton[i].Hide;
    VButton[i].OnClick:=@aButtonClick;
    VButton[i].Index := i;
  end; 


Внутри обработчика выражение
Код:
(Sender as TVButton).GetIndex


дает индекс этой кнопки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср дек 09, 2020 03:58 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Код:
  ForthVM : array [0..15] of PForth;


:shuffle;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср дек 09, 2020 19:54 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 98
Благодарил (а): 12 раз.
Поблагодарили: 5 раз.
Hishnik писал(а):
Код:
  ForthVM : array [0..15] of PForth;


:shuffle;

16-ядерная виртуальная Форт-машина? :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср дек 09, 2020 20:10 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
zma писал(а):
16-ядерная виртуальная Форт-машина?

Именно! :)

Ну понятно, что тут 16 - пока просто число с потолка для экспериментов. Просто сам факт, что общая структура Форт-машины таки упихнулась в один объект, и оно посылает сообщения основному движку. Можно и динамически количество менять, это вполне поддерживается компиляторами в ООП. Интересно посмотреть, как будут загружены ядра/потоки современного многоядерного процессора на такой штуке. Это уже не 1-2% производительности прирост.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср дек 09, 2020 23:28 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 98
Благодарил (а): 12 раз.
Поблагодарили: 5 раз.
Hishnik писал(а):
Интересно посмотреть, как будут загружены ядра/потоки современного многоядерного процессора на такой штуке.

Если каждый экземпляр будет выполняться в своём потоке ОС, то очень хорошо всё раскидывается по ядрам (в Windows по крайней мере). Нужно только организовать совместный доступ к разделяемым ресурсам.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Чт дек 10, 2020 01:26 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
zma писал(а):
Если каждый экземпляр будет выполняться в своём потоке ОС, то очень хорошо всё раскидывается по ядрам (в Windows по крайней мере).

Да, я пока это не проверял с цифрами, но из общих соображений очень надеюсь именно на такой эффект.
zma писал(а):
Нужно только организовать совместный доступ к разделяемым ресурсам.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Чт дек 10, 2020 15:52 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 98
Благодарил (а): 12 раз.
Поблагодарили: 5 раз.
Это просто эксперименты или планируете применять такую систему в реальном проекте?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Чт дек 10, 2020 18:27 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7123
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
zma писал(а):
Это просто эксперименты или планируете применять такую систему в реальном проекте?

Проектов уже набирается много:
1. Кросс-ассемблирование для форт-процессоров.
Это удобно. Форт-процессор вообще удобнее Microblaze и даже ARM. Его быстрее поставить в проект, к нему удобнее подключать периферию, у него нет каких-то bootloader-ов и прочего. К нему нужна интегрированная среда разработки с кнопкой "скомпилировать и запустить в ПЛИС". На Qt такое уже работает, что окажется удобнее - посмотрим.
2. Скриптование вычислений.
Можно оформить код как dll и подключить к Форту - ассемблерные функции, GPU, ПК-библиотеки для запуска кода на FPGA. У всего этого зависимость от производительности форт-машины стремится к нулю, но постоянно пересобирать проекты в CUDA SDK или, того хуже, в Vitis HLS - ужас. Если работа сводится к изменению входных параметров, то это как раз задача для скрипта. Что-то можно писать и на Форте, конечно.

Потоки - да, реальность. Например, при подключенном оборудовании нужно постоянно смотреть на COM-порт. Там идет обмен, и если что-то висит или пропало питание, зависание основной программы крайне неуместно. Если же это в отдельном потоке - вполне можно принудительно остановить поток. Ну и дополнительно, явно разложить вычислительную задачу по потокам, выделив каждому свой диапазон параметров для расчета, видится полезным.



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

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


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

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


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

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