Matlab compiler что это
Перейти к содержимому

Matlab compiler что это

  • автор:

Как я дружил MatLab и C++ в Linux

Прошла пора дипломов и я хочу поделиться своим рецептом его выполнения. Итак: тема сложная, времени мало, писать все «с нуля» или искать готовые библиотеки — нет большого желания, тем более что мне важна скорость работы системы, а от левых самописных библиотек можно ждать любого подвоха.
Надо сказать что размышлял я недолго и пришел к следующим выводам:

  1. Операционная система — тут думать особо не пришлось: т.к. я являюсь поклонником Debian (к слову: мое решение можно перенести и на Windows).
  2. Интерфейс будущей программы — C++, Qt.
  3. Логика программы — MatLab.

Подготовка

  1. Так называемый MATLAB Compiler Runtime. Это свободно распространяемый набор динамических библиотек MatLab. Скачать его можно с официального сайта и пользовать на свое усмотрение.
  2. Собственно сам Qt. Скачивается из репозиториев Linux, либо с официального сайта.

Установка

MATLAB Compiler Runtime распространяется в zip архиве. Внутри вы найдете файл install.sh. После его запуска откроется графический инсталятор, который в 3 клика сделает свое дело.
Qt ставится из репозиториев. Если вы скачали свеженькую версию с сайта, то необходимо выполнить следующие действия:
Под рутом:

mkdir /opt/QtSDK chown %username% /opt/QtSDK 

Дальнейшую установку производим обязательно от имени пользователя и в каталог /opt/QtSDK
С установкой закончили, переходим к настройкам:
Необходимо прописать библиотеки в системе, для этого:

echo /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/runtime/glnxa64 >> /etc/ld.so.conf.d/matlabLibs.conf echo /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/os/glnxa64 >> /etc/ld.so.conf.d/matlabLibs.conf echo /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnxa64/jre/lib/amd64/native_threads >> /etc/ld.so.conf.d/matlabLibs.conf echo /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnxa64/jre/lib/amd64/server >> /etc/ld.so.conf.d/matlabLibs.conf echo /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnxa64/jre/lib/amd64 >> /etc/ld.so.conf.d/matlabLibs.conf ldconfig 

И прописать переменную окружения XAPPLRESDIR (необходимы права рута):

export XAPPLRESDIR="/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/X11/app-defaults" 
  • Часть /usr/local/MATLAB/MATLAB_Compiler_Runtime/ может меняться в зависимости от того, куда вы устанавливали MCR.
  • Часть v716/ это версия самого MatLab и она тоже может меняться.
  • Часть glnxa64/ для 64 битной ОС и glnxa32 для 32 битной ОС.

Расчехляем MatLab

Теперь можно писать логику будущего приложения. Создаем новый m-файл и пишем новую функцию. Функция у нас будет простая: будем суммировать два переданных массива чисел:

function [out] = SUM(in1, in2) out = in1 + in2; end 
  1. Пишем в консоли MatLab: deploytool.
  2. В открывшемся окне пишем имя проекта, его расположение а из выпадающего списка выбираем C Shared library и нажимаем OK. Учтите, что в Linux названия библиотек начинается со слова lib, поэтому и проект стоит называть libsum.prj
  3. В окне Exported Functions нажимаем на Add files и добавляем только что созданную функцию.
  4. Нажимаем на кнопку Build и дожидаемся окончания компиляции.

Расчехляем Qt

Запускаем Qt и создаем новый проект.
В pro файле прописываем пути к библиотекам и заголовочным файлам:

INCLUDEPATH += /usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/extern/include LIBS += -L/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/bin/glnxa64/ -leng -lm #При условии, что скомпилированная библиотека лежит в каталоге lib создаваемого проекта LIBS += -L$$PWD/lib/ -lsum #При условии, что заголовочный файл лежит в каталоге include создаваемого проекта INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include 

В самом проекте пишем следующией код:

#include #include #include using namespace std; int main(int argc, char *argv[]) < coutif (!libsumInitialize()) < coutmxArray *in1 = mxCreateDoubleMatrix(2, 1, mxREAL); mxArray *in2 = mxCreateDoubleMatrix(2, 1, mxREAL); mxArray *out = mxCreateDoubleMatrix(2, 1, mxREAL); double *i1 = mxGetPr(in1); double *i2 = mxGetPr(in2); i1[0] = 1; i1[1] = 2; i2[0] = 3; i2[1] = 4; if(!mlfSUM(1, &out, in1, in2)) < coutdouble *res = mxGetPr(out); cout

Вот и все. Можно запускать.

Выводы

  1. Размер архива MCR составляет 874 Мб.
  2. После запуска программы — начинают загружаться библиотеки MatLab и это откладывает запуск на пару секунд.
  1. Вы можете сосредоточить свое внимание на основной работе, не заботясь об оптимизации побочных функций и отлове ошибок в них.
  2. Скорость выполнения функций MatLab намного выше той, что вы смогли бы добиться за 3 месяца работы над проектом.
  3. Вы получаете всю силу MatLab в своем приложении.
  4. Время работы над проектом сокращается.

MATLAB Compiler

MATLAB ® Compiler™ позволяет вам совместно использовать программы MATLAB как автономные приложения и веб-приложения. С MATLAB Compiler можно также группировать и развернуть программы MATLAB как MapReduce и большие применения данных Spark™ и как Microsoft ® Excel ® дополнения. Конечные пользователи могут запустить ваши приложения с бесплатным использованием с помощью MATLAB Runtime .

Чтобы обеспечить основанный на браузере доступ к вашим веб-приложениям MATLAB, можно разместить их использующий версию разработки MATLAB Web App Server, включенного с MATLAB Compiler . Программы MATLAB могут быть упакованы в компоненты программного обеспечения для интеграции с другими языками программирования (с MATLAB Compiler SDK™ ). Крупномасштабное внедрение на корпоративных системах поддерживается через MATLAB Production Server™ .

Запуск

Изучите основы MATLAB Compiler

Автономные приложения

Создайте автономные приложения от функций MATLAB

Дополнения Excel

Создайте дополнения Microsoft Excel из функций MATLAB

Приложения MapReduce в кластерах Hadoop

Создайте и выполнитесь, упаковал приложения MapReduce MATLAB против Hadoop ® кластеры

Приложения Spark

Создайте и выполнитесь, скомпилированные приложения MATLAB против Spark включили кластеры Hadoop

Веб-приложения

Пакет приложения MATLAB для развертывания на MATLAB Web App Server

MATLAB Runtime

Запустите упакованные приложения MATLAB на компьютерах, на которых не установлен MATLAB

MATLAB Runtime

Run compiled MATLAB applications or components without installing MATLAB

The MATLAB Runtime is a standalone set of shared libraries that enables the execution of compiled MATLAB, Simulink applications, or components. When used together, MATLAB, MATLAB Compiler, Simulink Compiler, and the MATLAB Runtime enable you to create and distribute numerical applications, simulations, or software components quickly and securely.

To download and install the MATLAB Runtime:

Click the version and platform in the table below that corresponds to the application or component you are using. The version of the MATLAB Runtime is tied to the version of MATLAB.
Note: You can find this information in the readme.txt file that accompanies the application or component.

Save the MATLAB Runtime installer file on the computer on which you plan to run the application or component.

Double click the installer and follow the instructions in the installation wizard.

Apply Updates to R2016a-R2017a versions of MATLAB Runtime after installing the runtime

Important security fixes are available for the R2016a, R2016b, and R2017a releases of the MATLAB Runtime. After installing the MATLAB Runtime for one of these releases, you should apply the latest Update by clicking on the appropriate Update link below. Note this applies only if your application uses MATLAB apps authored with MATLAB App Designer (.mlapp files). For more information see this bug report.

R2017a (9.2) 64-bit | Update 64-bit | Update Intel 64-bit | Update
R2016b (9.1) 64-bit | Update 64-bit | Update Intel 64-bit | Update
R2016a (9.0.1) 1, 2 64-bit | Update 64-bit | Update Intel 64-bit | Update

Open MATLAB and run the command mcrinstaller to locate MATLAB Runtime for redistribution with your compiled components.

  1. R2014a-2016a does not support macOS Sierra 10.12. If you choose to run any of these versions of the MATLAB Runtime on this unsupported macOS version, you might need to install a patch to fix an incompatibility issue. Learn more to determine if this incompatibility impacts you. MathWorks strongly recommends that you do not run any version of the MATLAB Runtime older than R2014a on macOS Sierra 10.12.
  2. MATLAB Runtime 9.0.1, for R2016a, is intended to work with MATLAB 9.0, which is also R2016a.
  3. MATLAB Runtime 9.0, for R2015b, is intended to work with MATLAB 8.6, which is also R2015b.
  4. Online versions of MATLAB Runtime are only available for releases after R2012a. Older releases of MATLAB Runtime were shipped with MATLAB Compiler. If you do not have MATLAB, please request the Runtime from the MATLAB Compiler user who created the deployed package.

Способы подключения к базе программной среды MatLab и возможности MatLab Compiler Текст научной статьи по специальности «Компьютерные и информационные науки»

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Евстропов Василий Александрович, Швец Сергей Викторович

Статья посвящена исследованию возможности написания дополнительного модуля к программному продукту MatLab, позволяющего использовать графическую визуализацию при работе. Исследованы способы подключения к программной среде MatLab и методы написания с использованием различных языков программирования. Изучены основные функциональные возможности MatLab Compiler.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Евстропов Василий Александрович, Швец Сергей Викторович

Технология использования MATLAB-программ в средах визуального программирования C/C++
Технология создания приложений на языке с++, использующих библиотеку функций Matlab

Использование распределенных вычислений для повышения эффективности обучения адаптивной нейро-нечеткой сети

Исследование возможности создания модуля визуализации и его подключения к базе программной среды MatLab

Динамически загружаемые библиотеки: структура, архитектура и применение
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Methods of the Connection Options to the Base of Matlab and Potentials of Matlab Compiler

The article is dedicated to the possibility of creating an additional module to the program package MatLab, that allows using the graphical visualization while working. Ways to connect to the MatLab program package, and methods of creating a variety of programming languages have been explored. Study of the basic functionality of the MatLab Compiler has been carried out.

Текст научной работы на тему «Способы подключения к базе программной среды MatLab и возможности MatLab Compiler»

СПОСОБЫ ПОДКЛЮЧЕНИЯ К БАЗЕ ПРОГРАММНОЙ СРЕДЫ MATLAB И ВОЗМОЖНОСТИ MATLAB COMPILER

В. А. Евстропов, С. В. Швец

Хакасский государственный университет им. Н. Ф. Катанова

Статья посвящена исследованию возможности написания дополнительного модуля к программному продукту MatLab, позволяющего использовать графическую визуализацию при работе. Исследованы способы подключения к программной среде MatLab и методы написания с использованием различных языков программирования. Изучены основные функциональные возможности MatLab Compiler.

Ключевые слова: SCADA-система, способы подключения к MatLab, модуль MatLab.

Современные условия конкурентной среды делают необходимым использование информационных технологий для повышения качества и эффективности принимаемых управленческих и технологических решений.

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

Требования к информационным системам (ИС) финансово-экономической деятельности для различных областей, как правило, единообразны.

Производственная деятельность более специфична в силу использования различного сырья, технологий, способов его обработки, выпуска конечной продукции, и поэтому необходимо контролировать технологические цепочки на всех этапах. Даже незначительные сбои могут привести к авариям и финансовым потерям, вследствие чего контроль нужно осуществлять непрерывно и в реальном времени, что требует от ИС надёжности и высокого качества [1].

Необходимость и способы интеграции в среду MatLab

В настоящее время разработано достаточно большое количество отраслевых и производственных автоматизированных систем управления (АСУ), реализующих автоматизированный сбор и обработку информации, необходимой для принятия решений по управлению объектом.

В связи с решением сложных вычислительных задач в программных средах появляется необходимость использования возможностей уже существующих информационно-алгоритмических ресурсов (ИАР), таких как пакеты решения оптимизационных задач, дифференциальных уравнений, символьных вычислений и т. п. При этом возникает необходимость предоставления прозрачного доступа к подобным ресурсам на основе существующих технологий распределённых вычислений.

Под ИАР понимается типизированный ресурс, предоставляющий внешний интерфейс, соответствующий его типу и функциональности. Реализация такого унифицированного интерфейса позволяет интегрировать ресурс в распределённую вычислительную среду и многократно использовать его как готовый компонент [2]. Однако большинство существующих в настоящее время программных пакетов, предназначенных для научных расчётов, не имеют готовых реализаций пользовательских интерфейсов, позволяющих работать с ними как с компонентами, в рамках известных технологий распределённых вычислений. Тем не менее, взаимодействие внешних программ с такими программами, как правило, может быть реализовано посредством предоставляемого программного интерфейса (API) или иного подобного механизма, например, путём ввода и вывода данных через файлы. Такие возможности используются для создания специфических программных адаптеров, позволяющих предоставлять доступ к каждому ресурсу в соответствии с его определённым типом. Согласно терминологии разрабатываемой в настоящее время платформы IARnet, подобные адаптеры называются агентами удаленного доступа. Задачей агентов доступа является обеспечение унифицированного интерфейса для интеграции ИАР в распределённую вычислительную среду, скрывая в то же время присущие лишь ему особенности взаимодействия с конкретным ресурсом [3].

Довольно часто у оператора возникает необходимость произвести математические операции. Программный пакет MatLab позволяет решать сложные задачи, но в данном пакете возможность создания удобного пользовательского интерфейса реализована не полностью. В связи с этим необходимо создание дополнительного модуля MatLab, который должен работать наиболее удобным образом (в данном случае для удобства работы со SCADA-системой - в оконном режиме, с функциями советчика). Для управления технологическими процесса-

ми подобный модуль должен работать в реальном времени. Для программного пакета MatLab работа в реальном времени обеспечивается операционной системой, в нашем случае в виду имеется операционная система семейства Windows.

Специфика интегрирования MatLab позволяет пользователям Windows-приложений наиболее эффективно использовать инструменты данного пакета программ для решения оптимизационных задач любой размерности, надёжных результатов расчётов; визуализации различных геометрических поверхностей, создания интеллектуальных систем управления проектами.

В дополнение к обширным встроенным вычислительным возможностям MatLab, как современная инженерная система, имеет собственную среду разработки. Программы и скрипты, записанные в m-файлах, являются основным средством разработки проектов пользователем в границах данного программного пакета. Также MatLab содержит довольно развитые инструменты отладки: точки останова, пошаговое выполнение, отображение текущих значений переменных. Более того, в последних версиях появились дополнительные средства (Directory Reports, M-Lint Code Checker), необходимые для повышения производительности кода и его анализа.

Язык MatLab, на котором написана значительная часть самого пакета, является высокоуровневым языком программирования, вобравшим в себя конструктивы Pascal, Basic, Fortran, С. Здесь поддерживаются 15 базовых типов данных, универсальных для всех современных средств разработки (символьные, численные, логические). Специфическими для MatLab являются структуры и клеточные массивы (матрицы, элементами которых могут быть данные произвольных типов).

В MatLab можно использовать и объектно-ориентированный подход. Пакет предоставляет возможности для создания классов с поддержкой механизмов наследования, агрегирования, инкапсуляции данных. Помимо внутренних классов MatLab, введена полная программная поддержка классов языка Java, что существенно расширяет возможности MatLab, в частности, даёт возможность интегрировать MatLab с другими системами [4].

Возможности MatLab Compiler

Указанных средств, ввиду жесткой привязки программы на языке MatLab к самому пакету, недостаточно для создания высокопроизводительных приложений. Поэтому программный продукт включает в себя MatLab Compiler, позволяющий любую программу на языке MatLab преобразовать в исполняемый модуль, подключаемую библиотеку С и С++ (DLL для среды Windows), надстройку Microsoft Excel и COM-объект (для создания двух последних необходимы модули Builder for Excel и Builder for COM соответственно). Все названные приложения не требуют MatLab или его компонентов для своей работы.

Компилятор MatLab выполнен в виде консольной утилиты, на вход которой подаются m-файлы, а на выходе генерируется исходный код на C/C++.

MatLab Compiler может формировать следующие виды кода:

- Код на C/C++, комбинируемый с другими модулями, необходимый для создания автономных прикладных систем (независимых приложений). Эти приложения не требуют MatLab во время выполнения; они могут исполняться, даже если MatLab не установлен в системе. Но, чтобы создавать исполняемые модули, MatLab Compiler требует наличия MatLab C/C++ Math Library (математической библиотеки MatLab), которая включает в себя базовые математические и аналитические средства MatLab. Компилятор также требует MatLab C/C++ Graphics Library, чтобы создавать независимые приложения, использующие вызов графических функций MatLab.

- Разделяемые С-библиотеки (динамически подключаемые библиотеки, или DLL для Microsoft Windows 95/98/NT/2000) и статические C++-библиотеки. Они могут использоваться без MatLab, но при наличии в системе MatLab C/C++ Math Library.

Одним из наиболее важных инструментов является внешний интерфейс, т. е. функция для взаимодействия с внешними приложениями и операционной системой. Возможности MatLab позволяют обращаться к DLL, внешнему коду на языках C и Fortran, COM-объектам, а также осуществлять обмен по протоколу DDE.

Для подключения к среде достаточно написать обычную динамическую библиотеку (DLL) с использованием специального интерфейса. При этом следует помнить об основных недостатках использования динамических библиотек, таких как:

1) недоступность использования пространства имён;

2) большой, по размерам, программный код в случаях:

- реализации динамической загрузки библиотек;

- реализации взаимодействия модулей посредством классов - за счёт использования неявных структур (декскрипторов).

Кроме того, MatLab использует специфичные dll. Их специфика заключается в том, что, помимо собственно файла динамической библиотеки (.dll), необходим ещё и файл формата .ctf. Этот файл содержит сжатый архив

m-файлов, являющийся набором функций пользователя, а также функции MatLab, которые используются приложениями пользователя.

Чтобы создать dll-библиотеку MatLab, для интеграции нужно настроить среду, посредством которой будет создаваться модуль (линкер). Для начала нужно установить среду выполнения MCR (MatLab Component Runtime). Это набор dll-библиотек для полной поддержки языка MatLab. Для настройки линкера в командном окне MatLab используется команда mbuild -setup. Программа mbuild определяет местоположения компилятора ANSI C или C++ и копирует данные о его расположении в каталог, который содержит пользовательские профили. Впоследствии, когда MatLab Compiler обращается к mbuild для вызова компилятора C и C++, записанные данные используются для его поиска. Также программа mbuild определяет расположение библиотек, которые могут использоваться для создания приложения. В качестве примера таких библиотек можно привести MatLab C/C++ Math Library, MatLab C/C++ Graphic Library, а также библиотеку ANSI C или C++. После настройки среды можно приступать непосредственно к созданию программы.

Компилятор программного пакета MatLab распознает только функции; следовательно, каждый сценарий должен начинаться с function (желательно заканчиваться end) и быть отдельным m-файлом.

Помимо вышеуказанного, необходимо также использовать DLL инъекцию. DLL инъекция позволяет выполнять программу в адресном пространстве уже запущенного процесса. Многие используют инфицирования для написания вирусов, выполнения вредоносных действий для системы и т. п. В нашем случае приём будет использоваться для нового модуля [5].

Когда существовали одни лишь символьные терминалы, ввод и вывод осуществлялся довольно просто: программы использовали scanf для ввода и printf для вывода. Графический пользовательский интерфейс (GUI) использует более сложные процедуры ввода-вывода. MatLab C Math Library создана таким образом, что может работать как с символьным терминалом, так и с графической оконной средой. Использование printf или подобного рода процедур актуально для текстового вывода, но не удовлетворительно для вывода в графическую среду.

Сама библиотека выводит небольшое число данных; в частности, выводит сообщения об ошибках и предупреждения, при этом не осуществляя никакого ввода. Для поддержки программирования в графических средах библиотека позволяет определить пользователю, каким образом она должна осуществлять вывод.

Библиотека самостоятельно формирует на выход строку символов, а затем вызывает функцию, которая печатает эту строку. Если пользователь хочет изменить, «когда и каким образом» библиотека должна осуществлять вывод, то ему необходимо предоставить свой обработчик печати (Print Handler).

Взамен прямого вызова printf библиотека MatLab вызывает обработчик печати, когда ей необходимо вывести сообщение об ошибке или предупреждение. Print Handler, по умолчанию используемый библиотекой, имеет единственный параметр - const char * (выводимое сообщение) и возвращает void. Print Handler по умолчанию имеет следующий вид:

static void DefaultPrintHandler(const char *s)

Процедура направляет вывод на stdout Си, используя функцию printf.

Если необходимо производить вывод другим способом, то нужно написать свой Print Handler и зарегистрировать для библиотеки. Любой создаваемый обработчик печати должен соответствовать прототипу обработчика по умолчанию. Чтобы зарегистрировать пользовательскую функцию и настроить библиотеку на использование нового обработчика, необходимо вызвать функцию mlfSetPrintHandler, которая имеет единственный аргумент - имя функции-обработчика.

В связи с тем, что генерируемого MatLab исполняемого файла автономного консольного приложения недостаточно для разработки современного программного продукта, необходимо создание технологии использования кода на языке MatLab (предварительно переведённого на язык Си с применением функций MatLab C Math Library) в визуальной среде программирования. В качестве важного дополнения отметим, что существует способ создания программ на языке MatLab таким образом, чтобы прилагать наименьшие усилия по их использованию для создания автономного приложения на C/C++.

Данная технология может быть использована для проектирования SCADA-системы в среде Borland C++ Builder.

Необходимо отметить, что данная технология требует серьёзного развития и расширения в силу возможного эффективного применения для быстрого создания приложений, использующих большой объём математических вычислений. Необходимо также оптимизировать употребление математической C++-библиотеки MatLab для создания автономных приложений. Данная технология создала базу для разработки специального программно-

го средства, которое может позволить быстро и удобно создавать приложения прямо в Borland C++ Builder, используя исходный код на языке MatLab.

1. Мамиконов, А. Г. Методы разработки автоматизированных систем управления / А. Г. Мамиконов. - М., 1973.

2. Сухорослов, О. В. Разработка распределённой информационно-алгоритмической среды для решения декомпозируемых вычислительных задач: дис. канд. техн. наук / О. В. Сухорослов. - М., 2005.

3. http://www.gridclub.ru/ (Институт прикладной математики им. М. В. Келдыша РАН, Москва).

4. MatLab. Язык технических вычислений. - URL: http://www.exponenta.ru/educat/free/matlab/gs.pdf.

© Евстропов В. А., Швец С. В., 2013

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *