OberonCore https://forum.oberoncore.ru/ |
|
BlackBox и MATLAB https://forum.oberoncore.ru/viewtopic.php?f=47&t=3196 |
Страница 1 из 1 |
Автор: | ScrollLock [ Вторник, 25 Январь, 2011 23:11 ] | |||
Заголовок сообщения: | BlackBox и MATLAB | |||
Не секрет, что MATLAB - весьма популярный и удобный (хотя и требовательный к ресурсам) язык для научных расчётов. Одна из его особенностей - поддержка так называемых MEX-файлов - динамических библиотек с функциями на других языках программирования. Так как иногда бывает, что часть MATLAB-овского кода удобнее переписать на каком-нибудь компилируемом языке программирования, а штатный SDK поддерживает только C и Fortran, решил попробовать самостоятельно подключиться к BlackBox Обновление: OBERONMEX v0.2 пример превратился в подсистему для создания MEX-файла Хотя в ней всё еще есть далеко не все функции библиотек MATLAB, в ней есть необходимый минимум функций для работы с матрицами вещественных чисел и вывода сообщений в консоль MATLAB-а. От старого сообщения Во вложении - простой MEX-файл, хотя до нормального SDK ещё очень далеко. По ходу дела возникли вопросы 1) Есть ли в BlackBox функции с переменным числом аргументов вроде printf из Си? 2) Можно ли как-то массив [untagged] превратить в обыкновенный без копирования его в другой массив (например, дописав управляющие структуры для менеджера памяти)
|
Автор: | Евгений Темиргалеев [ Вторник, 25 Январь, 2011 23:40 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
ScrollLock писал(а): По ходу дела возникли вопросы 1) Нет. Но есть тип аргументов --- открытый массив. Может быть это подойдёт.1) Есть ли в BlackBox функции с переменным числом аргументов вроде printf из Си? 2) Можно ли как-то массив [untagged] превратить в обыкновенный без копирования его в другой массив (например, дописав управляющие структуры для менеджера памяти) 2) Кажется, одним приписыванием дело не обойдётся. Для чего? Тут вообще никаких предположений... Прошу привести простые примеры, для чего это может требоваться. P.S. Поглядите http://oberoncore.ru/wiki/blackbox/kernel |
Автор: | ScrollLock [ Вторник, 25 Январь, 2011 23:52 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
Евгений Темиргалеев писал(а): Прошу привести простые примеры, для чего это может требоваться. Это было бы очень полезно при работе с переменными MATLABа из MEX-файла. Доступ к содержимому массива получается через функции, возвращающие указатель типа void * на начало массива, через который и идёт работа с данными. Преобразование я хотел сделать, чтобы воспользоваться контролем границ массива, который встроен в BlackBox. А сделать копию MATLAB-овского массива не всегда получится, ибо объёмы данных там могут быть очень большими. Или это как-то можно сделать для untagged? |
Автор: | Евгений Темиргалеев [ Среда, 26 Январь, 2011 00:00 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
http://ru.wikipedia.org/wiki/MATLAB#MEX ... 0.BB.D1.8B Не поясните, чем (изнутри MATLAB) отличается? Цитата: Интерфейс MATLAB, относящийся к общим DLL позволяет вызывать функции, находящиеся в обычных динамически подключаемых библиотеках, прямо из MATLAB. от Цитата: MEX-файлы представляют собой динамически подключаемые библиотеки, которые могут быть загружены и исполнены интерпретатором, встроенным в MATLAB. а то может просто DLL писать?
|
Автор: | ScrollLock [ Среда, 26 Январь, 2011 00:08 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
MEX-файл изнутри среды MATLAB вызывается так же, как и M-файл (т.е. функция, написанная на MATLABе), по сути своей это обычная DLL, но из неё экспортируется mexFunction, формат вызова которой стандартизован. Ещё очень удобно то, что из MEX-файла можно работать с MATLAB-овскими типами данных с помощью специальных API. Прозрачная интеграция откомпилированной программы со средой - очень ценная штука. Простые DLL тоже можно вызывать, но это не так удобно: нужно их специальным образом загружать, писать прототипы в MATLABе. А в случае MEX-файла это делает среда автоматически, и работа по преобразованию MATLAB-овских данных в обычные сосредоточена в одном месте. |
Автор: | Евгений Темиргалеев [ Среда, 26 Январь, 2011 00:42 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
ScrollLock писал(а): Доступ к содержимому массива получается через функции, возвращающие указатель типа void * на начало массива, через который и идёт работа с данными. Возможно, тут поможет (недокументированная) SYSTEM.THISARRAY (искать в SqlDB), которая формирует параметр-открытый массив:Код: MODULE PrivTestArray;
IMPORT SYSTEM, Log, In := i21sysIn; PROCEDURE LogArray (IN x: ARRAY OF INTEGER); VAR i: INTEGER; BEGIN i := 0; WHILE i < LEN(x) DO Log.Int(x[i]); INC(i) END; Log.Ln END LogArray; PROCEDURE DoubleElems (VAR x: ARRAY OF INTEGER); VAR i: INTEGER; BEGIN i := 0; WHILE i < LEN(x) DO x[i] := 2 * x[i]; INC(i) END END DoubleElems; PROCEDURE Do*; VAR a: ARRAY 10 OF INTEGER; i: INTEGER; unsafeArrayLen: INTEGER; unsafeArrayAdr: INTEGER; BEGIN In.Open; i := 0; In.Int(a[i]); WHILE In.done DO INC(i); In.Int(a[i]) END; IF i > 0 THEN unsafeArrayLen := i; unsafeArrayAdr := SYSTEM.ADR(a); LogArray(SYSTEM.THISARRAY(unsafeArrayAdr, unsafeArrayLen)); DoubleElems(SYSTEM.THISARRAY(unsafeArrayAdr, unsafeArrayLen)); LogArray(SYSTEM.THISARRAY(unsafeArrayAdr, unsafeArrayLen)) END END Do; END PrivTestArray. ^Q PrivTestArray.Do ^Q PrivTestArray.Do 1 3 ^Q PrivTestArray.Do 2 -4 6 -8 10 |
Автор: | ScrollLock [ Среда, 26 Январь, 2011 00:48 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
Спасибо, буду разбираться, хочется всё-таки попробовать сделать удобный интерфейс, пока каких-то принципиальных трудностей не вижу. Будет ещё время - выложу то, что получится в итоге. P.S. Единственная проблема - получается привязанность к 32-разрядным системам. Я так понимаю, 64-битного компилятора Component Pascal не существует (для научных расчётов было бы в самый раз)? |
Автор: | Alexey Veselovsky [ Среда, 26 Январь, 2011 00:53 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
ScrollLock писал(а): P.S. Единственная проблема - получается привязанность к 32-разрядным системам. Я так понимаю, 64-битного компилятора Component Pascal не существует (для научных расчётов было бы в самый раз)? GPCP компилирует в java байткод и в .net CIL, и то и то вполне работает на 64битах, используя 64битные преимущества. |
Автор: | igor [ Среда, 26 Январь, 2011 05:58 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
ScrollLock писал(а): ... часть MATLAB-овского кода удобнее переписать на каком-нибудь компилируемом языке программирования, а штатный SDK поддерживает только C и Fortran Ещё, вроде, поддерживает язык Ада.
|
Автор: | ScrollLock [ Суббота, 29 Январь, 2011 20:34 ] | ||
Заголовок сообщения: | Re: BlackBox и MATLAB | ||
Продолжаю эксперименты с BlackBox и MATLAB, выкладываю новый вариант библиотеки. По сравнению со старой версией, в ней появилась возможность создать свой MEX-файл без модификации исходного кода библиотечного модуля и не пользуясь в явном виде модулем SYSTEM. Пока это скорее эксперимент, чем реальный рабочий инструмент.
|
Автор: | Info21 [ Суббота, 29 Январь, 2011 22:20 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB |
ScrollLock писал(а): Продолжаю эксперименты с BlackBox и MATLAB, выкладываю новый вариант библиотеки. Дело интересное (при всей моей неохоте к матлабам).
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |