OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 18:27

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: BlackBox и MATLAB
СообщениеДобавлено: Вторник, 25 Январь, 2011 23:11 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Не секрет, что 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 КБ]
Скачиваний: 302
Комментарий к файлу: Пример MEX-файла на компонентном Паскале
MATLABandBB_25JAN2011.7z [2.34 КБ]
Скачиваний: 265


Последний раз редактировалось ScrollLock Вторник, 01 Февраль, 2011 00:22, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Вторник, 25 Январь, 2011 23:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ScrollLock писал(а):
По ходу дела возникли вопросы
1) Есть ли в BlackBox функции с переменным числом аргументов вроде printf из Си?
2) Можно ли как-то массив [untagged] превратить в обыкновенный без копирования его в другой массив (например, дописав управляющие структуры для менеджера памяти)
1) Нет. Но есть тип аргументов --- открытый массив. Может быть это подойдёт.
2) Кажется, одним приписыванием дело не обойдётся. Для чего? Тут вообще никаких предположений...

Прошу привести простые примеры, для чего это может требоваться.

P.S. Поглядите http://oberoncore.ru/wiki/blackbox/kernel


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Вторник, 25 Январь, 2011 23:52 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Евгений Темиргалеев писал(а):
Прошу привести простые примеры, для чего это может требоваться.

Это было бы очень полезно при работе с переменными MATLABа из MEX-файла. Доступ к содержимому массива получается через функции, возвращающие указатель типа void * на начало массива, через который и идёт работа с данными. Преобразование я хотел сделать, чтобы воспользоваться контролем границ массива, который встроен в BlackBox. А сделать копию MATLAB-овского массива не всегда получится, ибо объёмы данных там могут быть очень большими. Или это как-то можно сделать для untagged?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 00:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
http://ru.wikipedia.org/wiki/MATLAB#MEX ... 0.BB.D1.8B
Не поясните, чем (изнутри MATLAB) отличается?
Цитата:
Интерфейс MATLAB, относящийся к общим DLL позволяет вызывать функции, находящиеся в обычных динамически подключаемых библиотеках, прямо из MATLAB.
от
Цитата:
MEX-файлы представляют собой динамически подключаемые библиотеки, которые могут быть загружены и исполнены интерпретатором, встроенным в MATLAB.
а то может просто DLL писать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 00:08 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
MEX-файл изнутри среды MATLAB вызывается так же, как и M-файл (т.е. функция, написанная на MATLABе), по сути своей это обычная DLL, но из неё экспортируется mexFunction, формат вызова которой стандартизован. Ещё очень удобно то, что из MEX-файла можно работать с MATLAB-овскими типами данных с помощью специальных API. Прозрачная интеграция откомпилированной программы со средой - очень ценная штука.

Простые DLL тоже можно вызывать, но это не так удобно: нужно их специальным образом загружать, писать прототипы в MATLABе. А в случае MEX-файла это делает среда автоматически, и работа по преобразованию MATLAB-овских данных в обычные сосредоточена в одном месте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 00:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 00:48 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Спасибо, буду разбираться, хочется всё-таки попробовать сделать удобный интерфейс, пока каких-то принципиальных трудностей не вижу. Будет ещё время - выложу то, что получится в итоге.

P.S. Единственная проблема - получается привязанность к 32-разрядным системам. Я так понимаю, 64-битного компилятора Component Pascal не существует (для научных расчётов было бы в самый раз)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 00:53 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
ScrollLock писал(а):
P.S. Единственная проблема - получается привязанность к 32-разрядным системам. Я так понимаю, 64-битного компилятора Component Pascal не существует (для научных расчётов было бы в самый раз)?

GPCP компилирует в java байткод и в .net CIL, и то и то вполне работает на 64битах, используя 64битные преимущества.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Среда, 26 Январь, 2011 05:58 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ScrollLock писал(а):
... часть MATLAB-овского кода удобнее переписать на каком-нибудь компилируемом языке программирования, а штатный SDK поддерживает только C и Fortran
Ещё, вроде, поддерживает язык Ада.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Суббота, 29 Январь, 2011 20:34 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Продолжаю эксперименты с BlackBox и MATLAB, выкладываю новый вариант библиотеки. По сравнению со старой версией, в ней появилась возможность создать свой MEX-файл без модификации исходного кода библиотечного модуля и не пользуясь в явном виде модулем SYSTEM. Пока это скорее эксперимент, чем реальный рабочий инструмент.


Вложения:
Комментарий к файлу: OBERONMEX 0.1 - библиотека для стыковки BlackBox и MATLAB (альфа-версия)
OBERONMEX01.7z [3.24 КБ]
Скачиваний: 259
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox и MATLAB
СообщениеДобавлено: Суббота, 29 Январь, 2011 22:20 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ScrollLock писал(а):
Продолжаю эксперименты с BlackBox и MATLAB, выкладываю новый вариант библиотеки.
Дело интересное (при всей моей неохоте к матлабам).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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