OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 10 Декабрь, 2024 01:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 09:37 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0.

Oml предназначен для работы:
- из командной строки,
- в среде BlackBox.

Oml работает как с '.odc' файлами, так и с текстовыми файлами '.mod' из среды BlackBox и только с текстовыми файлами '.mod' из командной строки.

Oml работает в качестве оболочки OmlSh.exe командной строки, что позволяет делать скрипты на Обероне.

В комплект входят модули системы выполнения (Kernel, ..), позволяющие запускаться как на 32-бит, так и на 64-бит.

Ссылка на МультиОберон на гитхабе здесь


Вложения:
QuickStartOml_ru.pdf [292.26 КБ]
Скачиваний: 496
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 13:48 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Если совсем просто, то после установки можно запустить команду 32-битного приложения:
Код:
Blwe\OmlSh ex OmtestHelloWorld
Команда осуществляет компиляцию Omtest/Mod/HelloWorld.mod и выполнение Omtest/Clwe/HelloWorld.ocf как динамически загруженного модуля оболочкой OmlSh.exe.

Либо можно запустить команду 64-битного приложения:
Код:
Blwr\OmlSh ex OmtestHelloWorld
Команда осуществляет компиляцию Omtest/Mod/HelloWorld.mod и выполнение Omtest/Clwr/HelloWorld.ocf как динамически загруженного модуля оболочкой OmlSh.exe.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 19:40 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Если интересует, как сделан интерфейс к LLVM, то используется LLVM-C: C interface to LLVM. В коде это реализовано в модуле LlvmC, сгенеренного по хедерам LLVM версии 5.0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 14:26 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
SovietPony писал(а):
Как у LLVM с поддержкой мета-информации?

Мета-информация та же самая, что и у остальных, одинаковы структуры (Kernel.Module, Kernel.Type и проч) и реализация близка к CPFront. Например, для модуля HostTimes заполнение поля Kernel.Module в случае Omf, файл HostTimes.c, будет таким
Код:
struct SYSTEM_MODDESC HostTimes__desc = {
   0, 13, 0, /* next, opts, refcnt */
   {2019, 5, 28, 8, 42, 20}, /* compTime */
   {0, 0, 0, 0, 0, 0}, /* loadTime */
   HostTimes__body,
   0,
   2, /* nofimps */
   0, /* nofptrs */
   0, 0, 0, 0, 0, 0, 0, 0, /* csize..varBase */
   HostTimes__names,
   HostTimes__ptrs,
   HostTimes__imp,
   (SYSTEM_DIRECTORY*)HostTimes__exp,
   "HostTimes"
};

а заполнение поля в случае Oml, файл HostTimes.ll, будем аналогичным
Код:
@HostTimes__desc = global %SYSTEM_MODDESC { %SYSTEM_MODDESC* null, i32 3, i32 0, [6 x i16] [i16 2019, i16 5, i16 30, i16 13, i16 19, i16 31], [6 x i16] zeroinitializer, void ()* @HostTimes__body, void ()* null, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, [189 x i8]* @HostTimes__names, [1 x i32]* @HostTimes__ptrs, [3 x %SYSTEM_MODDESC*]* @HostTimes__imp, %SYSTEM_DIRECTORY* @HostTimes__exp, [256 x i8] c"HostTimes\00" }

Таким образом, получив указатель на Kernel.Module, мы будем иметь одинаковые структуры (с точностью до размерности указателя) с одинаковыми данными для всех 3 бэкендов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 17:37 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Comdiv писал(а):
Интересно посмотреть на результат выполнения Div(-2147483647 - 1, -2) в МультиОбероне при использовании LLVM с разными настройками
Код:

Проверками работы оптимизации в LLVM для МультиОберона я не занимался пока еще. В принципе, кому интересно, может попробовать скомпилировать в '.ll', а потом запустить llc с опциями (например, -O=1, -O=2, -O=3) для получения объектника. Более поздняя версия llc описана здесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 19:53 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
До сборки с оптимизацией я не дошёл, но и без этого интересно
Код:
MODULE OmtestDiv;

  IMPORT Out := OLog;

  PROCEDURE Div(a, b: INTEGER): INTEGER;
  BEGIN
  RETURN
    (-a) DIV (-b)
  END Div;

  PROCEDURE Go;
  BEGIN
    Out.Int(Div(-2147483647 - 1, -2)); Out.Ln
  END Go;

BEGIN
  Go
END OmtestDiv.
Код:
$ wine Bbwe/OmbSh.exe execute OmtestDiv
 -1073741824

$ wine Blwe/OmlSh.exe execute OmtestDiv
 one error detected
*Div.mod:0 "    Out.Int(Div(-2147483647 - 1$, -2)); Out.Ln" - number too large, err= 203

Меняем Go
Код:
  PROCEDURE Go;
  VAR i: INTEGER;
  BEGIN
    i := -2147483647;
    Out.Int(Div(i - 1, -2)); Out.Ln
  END Go;
Код:
$ wine Blwe/OmlSh.exe execute OmtestDiv
 -536870912


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 19:55 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
А вообще, планируется ли сделать все арифметические переполнения ошибками времени исполнения и компиляции?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 20:25 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Хороший вопрос ... Не уложилось пока, что с этим делать. Но Ваши примеры красноречивы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 15:20 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Во время сборки и/или установки LLVMT.so на Linux сталкивался с проблемами старых glibc-ов. То, что меньше 2.15 (посмотреть ldd --version) вызывало проблемы. Сначала формат ABI поменялся (ELF file OS ABI invalid). Поменял формат с помощью brandelf - пошло требовать GLIBX_2.15 и прочая, и прочая. А также пришлось пакет tinfo доставлять и для 64, и для 32-битной поддержки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Пятница, 27 Декабрь, 2019 20:13 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
Про долгую загрузки bitcode - https://youtu.be/EQjS-6DtPls?t=1673
Если по каким-либо причинам всё же хочется использовать JIT вместо AOT, то можно попробовать Sulong из Graalvm. Не знаю, как в сравнении с MCJIT, но граалевский lli запускает в 100 раз быстрей, чем lli от llvm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Пятница, 27 Декабрь, 2019 21:03 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Цитата:
Sulong is a high-performance LLVM bitcode interpreter built on the GraalVM by Oracle Labs.

Sulong is written in Java and uses the Truffle language implementation framework and Graal as a dynamic compiler.

With Sulong you can execute C/C++, Fortran, and other programming languages that can be transformed to LLVM bitcode on GraalVM. To execute a program, you have to compile the program to LLVM bitcode by a LLVM front end such as clang.

Цитата:
Sulong is the romanization of the Chinese term "速龙" (Velocisaurus). The first character translates as fast, rapid or quick, while the second character means dragon. A literal translation of the name giving Chinese term is thus "fast dragon". The name relates to the LLVM logo which is a dragon (more specifically a wyvern), and is also in line with the LLVM Dragonegg project.

Comdiv писал(а):
граалевский lli запускает в 100 раз быстрей, чем lli от llvm

Действительно в 100 раз? Есть какие-то бенчмарки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Пятница, 27 Декабрь, 2019 22:02 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
На бенчмарк это не тянет. Я просто собрал транслятор Восток в единый файл с биткодом размером ~1.5 Мб, и пробовал его запускать разными способами.
В режиме по умолчанию(-O2) LLVM lli запускал транслятор 20 секунд, с флагом -O0 - 8 сек, в режиме интерпретатора я не смог его запустить из-за ошибок поиска функций стандартной библиотеки Си. Через Sulong lli транслятор запустился за 0.08 сек, с флагом --jvm - за 0.8 сек.
Странность заключается в том, что сбор транслятора с помощью clang из Си занимает 3.5 секунды. Это заставило меня всё перепроверить - выяснилось, что в дело вмешалась устаревшая версия lii-5.0, собранная в отладочном режиме. Боевой lli-6.0 запустил программу за 1.8 сек. в режиме по умолчанию, и за 0.8 сек с опцией -O0, в режиме интерпретатора(--force-interpreter) - за 0.08 сек.
Итого, в режиме JIT разрыв всего лишь 10 кратный. Время работы самой прогаммы пока не удалось нормально замерить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 31 Декабрь, 2019 14:59 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
Дошли руки потестировать выполнение объёмного кода. С производительностью у Sulong из GraalVM Community Edition 19.3.0 всё плохо.
То, что заранее собранный через clang исполнимый файл делает за 0.1 сек, то Sulong lli делает за 13 сек, загружая при этом 2-а ядра. LLVM lli с опцией -force-interpreter делает то же самое за 39 сек., но загружая 1-о ядро. Это касается выполнения оптимизированного биткода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 17:45 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
Код:
# Подготовка выполнения, что не отображена в документации
unzip Blue.zip && chmod +x Blue/omlsh

# используем sh напрямую, так как у помещённых в репозиторий сценариев не выставлен бит исполнимости
sh lue_tomake.sh
oml:compiling ./Omtest/Mod/HelloWorld.mod
  new symbol file >./Omtest/Clue/OmtestHelloWorld .ll=9562 .bc=3412
oml:compiling ./Omtest/Mod/Formats.mod
  new symbol file >./Omtest/Clue/OmtestFormats .ll=17076 .bc=5552
oml:compiling ./Omtest/Mod/DateTime.mod
  new symbol file >./Omtest/Clue/OmtestDateTime .ll=28524 .bc=7884
oml:compiling ./Omtest/Mod/MkTraps.mod   3 errors detected
*MkTraps.mod:0 "      IF ~Runner.StringOpt$("-trap", str) THEN" - undeclared identifier, err= 0
*MkTraps.mod:0 "      IF ~Runner.StringOpt("-trap", str$) THEN" - called object is not a procedure, err= 121
*MkTraps.mod:0 "         OLog.String("usage: "); OLog.SString(Runner.argV0$); " - undeclared identifier, err= 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 18:53 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
После разархивирования надо запускать скрипт инсталляции, который делает chmod и все прочее.
в QuickStart написано:
Цитата:
On Linux (this color – for Linux):
glibc 2.15 or STT_GNU_IFUNC support is needed, tinfo package required
Download and install https://blackbox.obertone.ru/download
tclsh lin_toinstall.tcl 17 <path-to-blackbox>

Например, я инсталлирую в /home/ddag/mobdev/Mob. А BlackBox уже установлен в /home/ddag/mobdev/bb. Мне нужно сделать:
Код:
unzip Mob.zip
cd Mob
tclsh lin_toinstall.tcl 17 /home/ddag/mobdev/bb

После этого должны установиться все chmod, правильные версии Runner, Kernel и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 22:25 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
Что означает путь к BlackBox в случае GNU/Linux? Вторичный каталог для пользовательских файлов?
Создав пустой каталог Mob-BlackBox, получаю такое
Код:
tclsh lin_toinstall.tcl 17 ../Mob-BlackBox
installing bb1.7 for linux
unzip -u Blue.zip ...  done
unzip -u Blur.zip ...  done
unzip -u Blue_llc.zip ...  done
unzip -u Blur_llc.zip ...  done
cp: не удалось выполнить stat для '../Mob-BlackBox/System/Clue/Kernel.ll': Нет такого файла или каталога
    while executing
"exec cp $blackBoxPath/System/Clue/Kernel.ll System/Clue/"
    (file "lin_toinstall.tcl" line 130)

Есть ли какая причина для того, чтобы не размещать файлы сразу с установленным атрибутом исполнимости?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 30 Июнь, 2020 09:07 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Comdiv писал(а):
Что означает путь к BlackBox в случае GNU/Linux? Вторичный каталог для пользовательских файлов?
Создав пустой каталог Mob-BlackBox, получаю такое

Необходимым условием установки является предустановленный BlackBox.
Цитата:

От него используется Kernel, Files, и т.д.

Насчет того, чтобы сделать в будущем возможность установки без предустановки BlackBox можно подумать (это разумно) ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 30 Июнь, 2020 22:37 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1462
Откуда: Киев
Дмитрий Дагаев писал(а):
Необходимым условием установки является предустановленный BlackBox.
Цитата:

От него используется Kernel, Files, и т.д.
Вот меня и интересует, что означает предустановленный BlackBox в случае с GNU/Linux. Deb - пакет копирует файлы по предопределённому пути. Его и надо указывать?

Кажется, понял. Нужно использовать архив, а не репозиторий. Тогда это тоже нужно указать в описании. Но лучше для распространения в GNU/Linux сделать deb-пакет. Там можно прописать и завимость от установленного BlackBox


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Среда, 01 Июль, 2020 08:56 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 589
Откуда: Москва
Comdiv писал(а):
Дмитрий Дагаев писал(а):
Необходимым условием установки является предустановленный BlackBox.
Цитата:

От него используется Kernel, Files, и т.д.
Вот меня и интересует, что означает предустановленный BlackBox в случае с GNU/Linux. Deb - пакет копирует файлы по предопределённому пути. Его и надо указывать?

Кажется, понял. Нужно использовать архив, а не репозиторий. Тогда это тоже нужно указать в описании. Но лучше для распространения в GNU/Linux сделать deb-пакет. Там можно прописать и завимость от установленного BlackBox

Нужно указать путь, где искать System и прочие подсистемы. Насчёт пакета - есть плюсы и минусы. Из минусов - необходимость каких-то прав для инсталляции. Инсталлятор в данной пре-версии пока временный, утрясаются окончательные варианты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Пятница, 03 Июль, 2020 17:40 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Дмитрий Викторович, спасибо за ваш труд!

Важный момент! С сегодняшнего дня завершена регистрация домена obertone.ru.

Везде указывайте в документации, где это необходимо, домен: https://blackbox.oberon.org/download


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB