OberonCore https://forum.oberoncore.ru/ |
|
Oml - МультиОберон для LLVM https://forum.oberoncore.ru/viewtopic.php?f=157&t=6426 |
Страница 1 из 3 |
Автор: | Дмитрий Дагаев [ Суббота, 17 Август, 2019 09:37 ] | ||
Заголовок сообщения: | Oml - МультиОберон для LLVM | ||
МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0. Oml предназначен для работы: - из командной строки, - в среде BlackBox. Oml работает как с '.odc' файлами, так и с текстовыми файлами '.mod' из среды BlackBox и только с текстовыми файлами '.mod' из командной строки. Oml работает в качестве оболочки OmlSh.exe командной строки, что позволяет делать скрипты на Обероне. В комплект входят модули системы выполнения (Kernel, ..), позволяющие запускаться как на 32-бит, так и на 64-бит. Ссылка на МультиОберон на гитхабе здесь
|
Автор: | Дмитрий Дагаев [ Суббота, 17 Август, 2019 13:48 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Если совсем просто, то после установки можно запустить команду 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.
|
Автор: | Дмитрий Дагаев [ Суббота, 17 Август, 2019 19:40 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Если интересует, как сделан интерфейс к LLVM, то используется LLVM-C: C interface to LLVM. В коде это реализовано в модуле LlvmC, сгенеренного по хедерам LLVM версии 5.0. |
Автор: | Дмитрий Дагаев [ Воскресенье, 18 Август, 2019 14:26 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
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 бэкендов. |
Автор: | Дмитрий Дагаев [ Воскресенье, 18 Август, 2019 17:37 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Comdiv писал(а): Интересно посмотреть на результат выполнения Div(-2147483647 - 1, -2) в МультиОбероне при использовании LLVM с разными настройками Код: Проверками работы оптимизации в LLVM для МультиОберона я не занимался пока еще. В принципе, кому интересно, может попробовать скомпилировать в '.ll', а потом запустить llc с опциями (например, -O=1, -O=2, -O=3) для получения объектника. Более поздняя версия llc описана здесь. |
Автор: | Comdiv [ Воскресенье, 18 Август, 2019 19:53 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
До сборки с оптимизацией я не дошёл, но и без этого интересно Код: 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 |
Автор: | Comdiv [ Воскресенье, 18 Август, 2019 19:55 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
А вообще, планируется ли сделать все арифметические переполнения ошибками времени исполнения и компиляции? |
Автор: | Дмитрий Дагаев [ Воскресенье, 18 Август, 2019 20:25 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Хороший вопрос ... Не уложилось пока, что с этим делать. Но Ваши примеры красноречивы. |
Автор: | Дмитрий Дагаев [ Вторник, 19 Ноябрь, 2019 15:20 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Во время сборки и/или установки LLVMT.so на Linux сталкивался с проблемами старых glibc-ов. То, что меньше 2.15 (посмотреть ldd --version) вызывало проблемы. Сначала формат ABI поменялся (ELF file OS ABI invalid). Поменял формат с помощью brandelf - пошло требовать GLIBX_2.15 и прочая, и прочая. А также пришлось пакет tinfo доставлять и для 64, и для 32-битной поддержки. |
Автор: | Comdiv [ Пятница, 27 Декабрь, 2019 20:13 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Про долгую загрузки bitcode - https://youtu.be/EQjS-6DtPls?t=1673 Если по каким-либо причинам всё же хочется использовать JIT вместо AOT, то можно попробовать Sulong из Graalvm. Не знаю, как в сравнении с MCJIT, но граалевский lli запускает в 100 раз быстрей, чем lli от llvm |
Автор: | Дмитрий Дагаев [ Пятница, 27 Декабрь, 2019 21:03 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Цитата: 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 раз? Есть какие-то бенчмарки? |
Автор: | Comdiv [ Пятница, 27 Декабрь, 2019 22:02 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
На бенчмарк это не тянет. Я просто собрал транслятор Восток в единый файл с биткодом размером ~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 кратный. Время работы самой прогаммы пока не удалось нормально замерить |
Автор: | Comdiv [ Вторник, 31 Декабрь, 2019 14:59 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Дошли руки потестировать выполнение объёмного кода. С производительностью у Sulong из GraalVM Community Edition 19.3.0 всё плохо. То, что заранее собранный через clang исполнимый файл делает за 0.1 сек, то Sulong lli делает за 13 сек, загружая при этом 2-а ядра. LLVM lli с опцией -force-interpreter делает то же самое за 39 сек., но загружая 1-о ядро. Это касается выполнения оптимизированного биткода. |
Автор: | Comdiv [ Понедельник, 29 Июнь, 2020 17:45 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Код: # Подготовка выполнения, что не отображена в документации
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 |
Автор: | Дмитрий Дагаев [ Понедельник, 29 Июнь, 2020 18:53 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
После разархивирования надо запускать скрипт инсталляции, который делает 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 и т.д. |
Автор: | Comdiv [ Понедельник, 29 Июнь, 2020 22:25 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Что означает путь к 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) Есть ли какая причина для того, чтобы не размещать файлы сразу с установленным атрибутом исполнимости? |
Автор: | Дмитрий Дагаев [ Вторник, 30 Июнь, 2020 09:07 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Comdiv писал(а): Что означает путь к BlackBox в случае GNU/Linux? Вторичный каталог для пользовательских файлов? Создав пустой каталог Mob-BlackBox, получаю такое Необходимым условием установки является предустановленный BlackBox. Цитата: Download and install https://blackbox.obertone.ru/download От него используется Kernel, Files, и т.д. Насчет того, чтобы сделать в будущем возможность установки без предустановки BlackBox можно подумать (это разумно) ... |
Автор: | Comdiv [ Вторник, 30 Июнь, 2020 22:37 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Дмитрий Дагаев писал(а): Необходимым условием установки является предустановленный BlackBox. Вот меня и интересует, что означает предустановленный BlackBox в случае с GNU/Linux. Deb - пакет копирует файлы по предопределённому пути. Его и надо указывать? Цитата: Download and install https://blackbox.obertone.ru/download От него используется Kernel, Files, и т.д. Кажется, понял. Нужно использовать архив, а не репозиторий. Тогда это тоже нужно указать в описании. Но лучше для распространения в GNU/Linux сделать deb-пакет. Там можно прописать и завимость от установленного BlackBox |
Автор: | Дмитрий Дагаев [ Среда, 01 Июль, 2020 08:56 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Comdiv писал(а): Дмитрий Дагаев писал(а): Необходимым условием установки является предустановленный BlackBox. Вот меня и интересует, что означает предустановленный BlackBox в случае с GNU/Linux. Deb - пакет копирует файлы по предопределённому пути. Его и надо указывать? Цитата: Download and install https://blackbox.obertone.ru/download От него используется Kernel, Files, и т.д. Кажется, понял. Нужно использовать архив, а не репозиторий. Тогда это тоже нужно указать в описании. Но лучше для распространения в GNU/Linux сделать deb-пакет. Там можно прописать и завимость от установленного BlackBox Нужно указать путь, где искать System и прочие подсистемы. Насчёт пакета - есть плюсы и минусы. Из минусов - необходимость каких-то прав для инсталляции. Инсталлятор в данной пре-версии пока временный, утрясаются окончательные варианты. |
Автор: | Иван Денисов [ Пятница, 03 Июль, 2020 17:40 ] |
Заголовок сообщения: | Re: Oml - МультиОберон для LLVM |
Дмитрий Викторович, спасибо за ваш труд! Важный момент! С сегодняшнего дня завершена регистрация домена obertone.ru. Везде указывайте в документации, где это необходимо, домен: https://blackbox.oberon.org/download |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |