Как запустить m файл в mathlab
Перейти к содержимому

Как запустить m файл в mathlab

  • автор:

Приложения файла MEX на C

Можно вызвать собственный C или программы C++ из командной строки MATLAB, как будто они были встроенными функциями. Эти программы называются MEX-функциями, и имя функции является именем файла MEX. MEX-функции не подходят для всех приложений. MATLAB является средой высокой производительности, специальность которой устраняет длительное, низкоуровневое программирование на скомпилированных языках. В общем случае сделайте свое программирование в MATLAB. Не используйте MEX-функции, если ваше приложение не требует его.

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

  • MathWorks рекомендует, чтобы вы создали MEX-функции, использующие современные функции C++, как задано в MATLAB Data API. Для получения дополнительной информации см. Приложения C++ MEX.
  • Если ваши MEX-функции должны запуститься в MATLAB R2017b или ранее, или если вы предпочитаете работать на языке C, то используйте функции в Матричном API C и API MEX C. Эти API используют MATLAB mxArray структура данных. Функции и темы на этой странице основаны на mxArray .

Примечание

Выберите функции или из Матричного API C или из MATLAB Data API; вы не можете смешать функции от этих API.

Встройте свой исходный файл в исполняемую программу с помощью mex функция. Можно также совместно использовать файл MEX с другими пользователями MATLAB.

Для получения информации о записи S-функций смотрите свой Simulink ® документация.

Чтобы вызвать MEX-функцию, которую кто-то еще создал, смотрите Функции файла MEX.

Если вы имеете программу C/C++ и хотите вызвать функции MATLAB из программы, то используйте одни из API механизма.

  • MATLAB Engine API для C++
  • API MATLAB Engine для C

Если вы хотите считать и записать данные MATLAB из программ C/C++, то используйте MATLAB C API, чтобы Считать Данные о MAT-файле.

Функции

mex Создайте приложение механизма или MEX-функция
dbmex Включите отладку файла MEX на платформах UNIX

C API MEX

mexFunction Точка входа к функции MEX C/C++ создается с Матричным API C
mexFunctionName Имя текущей MEX-функции
mexAtExit Функция регистра, чтобы вызвать, когда MEX-функция очищается или MATLAB , завершает работу
mexCallMATLAB Вызовите функцию MATLAB , пользовательскую функцию или MEX-функцию
mexCallMATLABWithTrap Вызовите функцию MATLAB , пользовательскую функцию или файл MEX и получите информацию об ошибке
mexEvalString Выполните команду MATLAB в рабочей области вызывающей стороны
mexEvalStringWithTrap Выполните команду MATLAB в рабочей области вызывающей стороны и получите информацию об ошибке
mexGetVariable Копия переменной из заданной рабочей области
mexGetVariablePtr Указатель только для чтения на переменную из другой рабочей области
mexPutVariable Массив от MEX-функции в заданную рабочую область
mexGet Значение заданного графического свойства
mexSet Установите значение заданного графического свойства
mexPrintf ANSI C программа вывода PRINTF-стиля
mexErrMsgIdAndTxt Отобразите сообщение об ошибке с идентификатором и возвратитесь к подсказке MATLAB
mexWarnMsgIdAndTxt Предупреждающее сообщение с идентификатором
mexIsLocked Определите, заблокирован ли файл MEX
mexLock Предотвратите очищающийся файл MEX из памяти
mexUnlock Позвольте очищать файл MEX из памяти
mexMakeArrayPersistent Заставьте массив сохраниться после того, как файл MEX завершится
mexMakeMemoryPersistent Сделайте память выделенной MATLAB , сохраняются после того, как MEX-функция завершается

Темы

Запишите MEX-функции C

В этом примере показано, как создать arrayProduct C MEX-функция создается с Матричным API C.

Ссылки на исходный код для примеров MEX-функции.

  • Заполните mxArray в Файле MEX на C
  • Использование справочных файлов с MEX-функциями
  • Вызов функций BLAS и LAPACK
  • Предложите пользователю вход в Файле MEX на C
  • Пользователь обменивается сообщениями в Файлах MEX на C
  • Создайте 2D массив ячеек в Файле MEX на C

Используя mxArray в файлах MEX.

  • Введенный доступ к данным в Файлах MEX на C
  • Обработайте комплексные данные в Файле MEX на C
  • C матричные функции обработки строки API

Правила для управления mxArray память.

  • Автоматическая очистка Временных массивов в файлах MEX
  • Персистентный mxArrays

Язык C++ выходит, чтобы рассмотреть при создании MEX-функций, созданных с Матричным API C.

Распечатайте информацию об ошибке с помощью mexErrMsgIdAndTxt функция.

Как использовать 64-битный файловый ввод-вывод в вашем файле MEX.

Как исключить подклассы встроенных типов от входных параметров файла MEX.

Проверка собственной среды сборки

В этом примере показано, как создать пример C MEX-функция arrayProduct .

  • Изменение компилятора по умолчанию
  • Значение по умолчанию изменения gcc Компилятор в Системе Linux
  • Компилятор MinGW-w64
  • Выбор компилятора C++
  • Сделанный на заказ с опциями скрипта MEX

C матричные версии API

MATLAB Version 9.4 (R2018a) поддерживает чередованное представление комплексных чисел.

  • Поддержка MATLAB чередованного комплексного API в MEX-функциях
  • Я должен обновить свои файлы MEX, чтобы использовать чередованный комплексный API?

MATLAB Version 9.2 (R2017a) создает файлы MEX с 64-битным API по умолчанию.

  • Поддержка MATLAB 64-битной индексации
  • Что, если я не обновляю?
  • Обработка Большого mxArrays в Файлах MEX на C

MATLAB Version 8.4 (R2014b) изменяет тип данных указателей на графические объекты от double возразить .

Совместное использование файлов MEX

В этом примере показано, как зарегистрировать xtimesy Файл MEX основывался на Windows ® платформа с помощью Microsoft ® Visual C++ ® компилятор.

Поиск и устранение проблем

Создайте ошибки

Чтобы помочь диагностировать настроенный компилятор и ошибки сборки, вызовите mex функция с многословной опцией-v.

Что сделать, когда компиляция файла MEX перестала работать.

Больше информации для предупреждений и сообщений об ошибке.

Поиск и устранение проблем файлов MEX создается с компилятором MinGW-w64.

Каждый файл MEX нуждается в mexFunction .

Ошибки периода выполнения

Что сделать, когда вы получаете недопустимую ошибку файла MEX.

Для лучших результатов запустите файлы MEX, созданные с вашей версией MATLAB.

Если вы получаете бинарный файл MEX от другого источника, уверены, что файл был скомпилирован для той же платформы, на которой вы хотите запустить его.

Не вызывайте один сеанс MATLAB на отдельных потоках от файла MEX.

Что сделать, когда файл MEX вызывает нарушение сегментации или утверждение.

Что сделать, когда ваш MEX генерирует неправильные ответы.

Отладка

Предложения для отладки с Microsoft Visual Studio ® .

В этом примере показано, как отладить файл MEX на Платформах Mac .

В этом примере показано, как отладить файл MEX на Linux ® Платформы.

MathWorks MATLAB

Потребление электроэнергии

Запуск графического пользовательского интерфейса производится с использованием технологии X Window, следующей командой:

/opt/shared/matlab/r2013b/bin/matlab
module load matlab/r2013b matlab

Графический интерфейс должен запускаться только на узлах кластера, с помощью интерактиыного режима PBS (‘qsub -I -X …’), но не на интерфейсном сервере.

Общие сведения

Есть несколько вариантов запуска MATLAB-программ с использованием кластера:

Запуск MATLAB-программ в пакетном режиме на отдельных узлах. Для этого в описании сценария запуска задачи необходимо вызвать MATLAB командой

matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc"

при условии, что в текущей директории есть файл myfunc.m , в котором определена функция myfunc . В этом случае число одновременно запущенных расчетов ограничено числом имеющихся у нас лицензий. Можно запустить одновременно пять расчетов.

Компиляция программ MATLAB в исполняемые файлы для запуска на любом числе компьютеров. Для этого используется компилятор Matlab Compiler. Для запуска этого компилятора требуется отдельная лицензия.

Запуск в параллельном режиме с использованием распределенных массивов и тех функций ядра MATLAB, для которых существует параллельная реализация. Для этого необходимо создать массив, который будет передаваться в качестве аргумента функциям MATLAB как распределенный (distributed). Этот вариант потребует изменений в MATLAB-программе. Подробнее можно прочитать в документации к Parallel Computing Toolbox. В этом режиме можно использовать 16 и более параллельных процессов.

Вызов функций matlab из C-программы. Подробнее об этом методе можно прочитать в документации к функции »mex».

Пожалуй, самый простой способ, это способ, не требующий компиляции, т.е. способ № 1. О нём подробнее рассказано в следующем разделе.

Запуск MATLAB-программ в пакетном режиме

Простую программу на matlab можно запустить в пакетном режиме. В качестве примера возьмем такую программу:

function myfunc A = rand(5); csvwrite('eig.txt',eig(A));

Эта программа генерирует случайную квадратную матрицу, вычисляет вектор её собственных значений и записывает этот вектор в файл eig.txt .

Запишем эту программу в файл myfunc.m ,
в той же директории создадим файл для запуска расчета run_myfunc.sh следующего содержания:

#!/bin/bash #PBS -l walltime=00:10:00 #PBS -l select=1:ncpus=1 cd $PBS_O_WORKDIR module load matlab/r2013b matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc"

через некоторое время после постановки расчета в очередь командой qsub run_myfunc.sh в этой же директории будет создан файл eig.txt , содержащий пять вещественных или комплексных чисел, вычисленных с одинарной точностью.

MATLAB Compiler

Документация:

Ниже приведены ссылки на официальные страницы с описанием текущей версии MATLAB Compiler. Хотя там рассматривается более новая версия, чем установлена у нас, ссылки всё равно могут быть полезны:

Каждый пользователь перед первым использованием MATLAB Compiler должен создать персональный файл с параметрами компиляции. Для этого на интерфейсном сервере нужно выполнить:

module load matlab/r2013b mbuild -setup

Команда выведет на экран:

Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mbuild -setup' command selects an options file that is placed in /mnt/storage/home/hpcuser/.matlab/R2013b and used by default for 'mbuild'. An options file in the current working directory or specified on the command line overrides the default options file in /mnt/storage/home/hpcuser/.matlab/R2013b. To override the default options file, use the 'mbuild -f' command (see 'mbuild -help' for more information). The options files available for mbuild are: 1: /mnt/storage/opt/shared/matlab/r2013b/bin/mbuildopts.sh : Build and link with MATLAB Compiler generated library via the system ANSI C/C++ compiler 0: Exit with no changes Enter the number of the compiler (0-1):

Нужно ввести ‘1‘ и нажать кнопку Enter.

В результате файл со стандартными настройками компиляции будет скопирован в домашнюю директорию пользователя в файл ‘~/.matlab/R2013b/mbuildopts.sh

По умолчанию для компиляции используется системный компилятор GCC, но при необходимости файл с опциями может быть скорректирован пользователем.

Для компиляции:
Запустите интерактивную задачу (‘qsub -I -X …’) для получения доступа к узлу кластера.

Запустите на узле MATLAB GUI , переключите вверху на закладку ‘APPS’ и нажмите на стрелочку справа от строки с иконками:

В выпадающем списке в разделе ‘Application deployment’ нажмите на иконку ‘Application Compiler‘. В результате откроется окно приложения MATLAB Compiler.

Нажмите на иконку ‘+’ справа от поля ‘Add main file‘, выберите файл MATLAB’а с кодом. Например, пусть это будет ‘myfunc.m’

Нажмите на зелёную иконку ‘Package‘ справа.

Когда компиляция завершится, откроется окно с тремя 3 директориями, содержащими 3 варианта скомпилированного приложения:

for_redistribution
for_redistribution_files_only
for_testing

Для запуска полученного исполняемого файла на компьютере без установленного MATLAB необходимо предварительно установить пакет MATLAB Compiler Runtime (MCR). Версия MCR должна совпадать с версией MATLAB, использованного при компиляции (в нашем случае, это ‘R2013b’).

Все дистрибутивы MCR можно свободно скачать с официальной страницы: https://www.mathworks.com/products/compiler/mcr.html

Дистрибутив MCR для Linux x64, соответствующий MATLAB R2013b, также можно взять на кластере — это файл ‘/opt/shared/matlab/r2013b/toolbox/compiler/deploy/glnxa64/MCRInstaller.zip’

На нашем комплексе MCR уже установлен в директорию ‘/opt/shared/matlab/r2013b.mcr‘. При необходимости самостоятельно установить MCR выполните:

unzip MCRInstaller.zip

или, если дистрибутив скачан с сайта:

unzip MCR_R2013b_glnxa64_installer.zip
./install

Запуск скомпилированного приложения из директории ‘for_testing’ осуществляется с помощью скрипта ‘run_myfunc.sh’ (название скрипта зависит от названия модуля), которому в качестве параметра необходимо передать путь до установленного MCR:

./run_myfunc.sh /opt/shared/matlab/r2013b.mcr

Скрипт ‘run_myfunc.sh’ настраивает необходимые переменные окружения в соответсвии с путём до установленного MCR и затем запускает находящийся рядом исполняемый бинарный файл ‘myfunc’.

Нюансы использования компилятора смотрите в MATLAB Compiler User’s Guide R2013b.

Parallel Computing Toolbox

Технология, позволяющая распараллеливать выполнение программ на несколько процессорных ядер, а также использовать NVidia GPU.

Distributed Computing Server

Предоставляет возможность запуска программ MATLAB (в том числе, распараллеливающихся на несколько вычислительных узлов) на кластере, через разные планировщики, включая PBS Pro. Является развитием ‘Parallel Computing Toolbox’. Пользователь работает через стандартный графический интерфейс MATLAB (далее называемый ‘клиент’) и через него получает дополнительные вычислительные ресурсы на кластере. На нашем комплексе возможны два варианта использования, настраиваемые разными способами:

Клиент работает на узле кластера, пользователь взаимодействует с ним с использованием технологии X Window. Этот способ является предпочтительным.

Клиент работает на персональном компьютере пользователя, с которого имеется доступ к кластеру по протоколам SSH/SFTP.

Настройка клиента на кластере

С помощью интерактивной задачи PBS попасть на узел и запустить MATLAB через X Window:

module load matlab/r2013b matlab

В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
В появившемся окне создать профиль: Add → Custom → PBS Pro
Нажать ‘Edit‘, изменить такие параметры:

JobStorageLocation — директория для временных файлов. В принципе, можно оставить незаполненным, но лучше указать поддиректорию в своей домашней директории или в рабочей области.

NumWorkers = число, сколько ядер процессора будет запрашиваться.
HasSharedFileSystem = true
RshCommand = ssh

Также обратите внимание на SubmitArgumet и ResourceTemplate — с их помощью можно передавать команде ‘qsub’ дополнительные параметры, а также изменять правило генерации ‘select’ для qsub.

Переключиться на закладку ‘Validation results’. Нажать кнопку ‘Validate‘. Все тесты должны завершиться со статусом ‘passed’.

При желании через меню окна ‘Cluster Profiles Manager’ можно переименовать настроенный профиль и установить его как ‘профиль по умолчанию’.

Настройка клиента на ПК

Если клиент работает на операционной системе семейства Windows, необходимо преобразовать закрытую часть персонального RSA ключа в формат, используемый в Unix-системах:

Запустить ‘PUTTYGEN.EXE’
Кнопкой ‘Load’ загрузить свой ранее созданный .ppk-файл
Сохранить в нужном формате: Conversion → Export OpenSSH key
Получившийся файл должен содержать примерно такое:

-----BEGIN RSA PRIVATE KEY----- MIICWgIBAAKBgQCA2/bpBoLogSg51qhIDIU+KaSPhfm3fhTVAIQdgjQwdmsKDQne M0S6QvKfj3+tX5NJdV0WBie2F0NSgRCvtPZj8Z6/edL/fanW7bUBQiDCkspWC/yV . XsaozzouYGPk8OvtAkB8Uo2OK5fOxLTV1pglGNd9WbG/kuWOBYeIlBGCPAhy0jLo Xo91ZfMgwwzP1pP5hIhf86axqD5ATqgveMuit+tj -----END RSA PRIVATE KEY-----

Перейти в директорию на персональном компьютере, в которую установлен MATLAB

Скопировать содержимое поддиректории ‘toolbox\distcomp\examples\integration\pbs\nonshared‘ в ‘toolbox\local\

Открыть файл ‘toolbox\local\getSubmitString.m‘ и отредактировать, заменив

submitString = sprintf('qsub -N %s -j oe -o %s %s %s %s', . jobName, quotedLogFile, envString, additionalSubmitArgs, quotedCommand);
submitString = sprintf('qsub -N %s -j oe -V -o %s %s %s', . jobName, quotedLogFile, additionalSubmitArgs, quotedCommand);

Запустить MATLAB, если уже работал — перезапустить.
В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
В появившемся окне создать профиль: Add → Custom → Generic
Нажать ‘Edit‘, изменить такие параметры:
JobStorageLocation — директория для временных файлов на персональном компьютере
NumWorkers = число, сколько ядер будет запрашиваться.
ClusterMatlabRoot = /opt/shared/matlab/r2013b (директория с MATLAB на кластере)
OperatingSystem = Unix
HasSharedFileSystem = false
Поле IndependentSubmitFcn:

Вместо ‘/mnt/storage/home/hpcuser/matlab’ укажите путь до директории для временных файлов на кластере — или в своей домашней директории, или в своей рабочей области.

Поле CommunicatingSubmitFcn:

Вместо ‘/mnt/storage/home/hpcuser/matlab’ укажите путь до директории для временных файлов на кластере — или в своей домашней директории, или в своей рабочей области.

GetJobStateFcn = @getJobStateFcn
DeleteJobFcn = @deleteJobFcn

Переключиться на закладку ‘Validation results’. Нажать кнопку ‘Validate’. Вас попросят ввести свой логин на кластере, путь до созданного ранее файла с закрытой частью ключа и парольную фразу к этому файлу. Все тесты должны завершиться со статусом ‘passed’.

При желании через меню окна ‘Cluster Profiles Manager’ можно переименовать настроенный профиль и установить его как ‘профиль по умолчанию’.

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

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