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] превратить в обыкновенный без копирования его в другой массив (например, дописав управляющие структуры для менеджера памяти)

Вложения:
Комментарий к файлу: Подсистема для создания MEX-файлов на компонентном Паскале
OberonMEX_02.7z [6.34 КБ]
Скачиваний: 304
Комментарий к файлу: Пример MEX-файла на компонентном Паскале
MATLABandBB_25JAN2011.7z [2.34 КБ]
Скачиваний: 268

Автор:  Евгений Темиргалеев [ Вторник, 25 Январь, 2011 23:40 ]
Заголовок сообщения:  Re: BlackBox и MATLAB

ScrollLock писал(а):
По ходу дела возникли вопросы
1) Есть ли в BlackBox функции с переменным числом аргументов вроде printf из Си?
2) Можно ли как-то массив [untagged] превратить в обыкновенный без копирования его в другой массив (например, дописав управляющие структуры для менеджера памяти)
1) Нет. Но есть тип аргументов --- открытый массив. Может быть это подойдёт.
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. Пока это скорее эксперимент, чем реальный рабочий инструмент.

Вложения:
Комментарий к файлу: OBERONMEX 0.1 - библиотека для стыковки BlackBox и MATLAB (альфа-версия)
OBERONMEX01.7z [3.24 КБ]
Скачиваний: 262

Автор:  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/