Для ускорения вычислений в MATLAB можно использовать mex-файлы – написанные на С или Фортране и откомпилированные процедуры. Тексты на языке MATLAB (файлы с расширением.m) машинно-независимы, а подготовленные для одной платформы mex-файлы (Matlab EXternal) должны быть откомпилированы заново при переходе к другой среде. Для каждой из платформ подготовленные mex-файлы имеют свое расширение, например: dll для Windows, mexlx для Linux, mexsol для Solaris, mexalp для Alpha.
Вызываются mex-файлы как обычные m-файлы, причем если интерпретатору встретилось некоторое имя функции, то вначале ищется mex-файл с этим именем в каталогах, определенных списком MATLAB search path, и только при его отсутствии начинается поиск т-файла.
Программирование mех-файлов заключается в написании процедур на С или Фортране и подготовке переходного блока для получения данных из среды MATLAB и возвращения результата. MATLAB оперирует с массивами, поэтому все переменные – скаляры, векторы, матрицы, строки, массивы ячеек, структуры и объекты – реализованы в виде массивов. В программе на С массив MATLAB должен быть объявлен типом mxArray, в нем будут содержаться размерности, сами данные, сведения об их типе (вещественные или комплексные), индексы ненулевых элементов для разреженных (sparse) матриц, число полей и их имена для структуры и объекта. Заметим, что из m-файла при помощи имеющегося в MATLAB компилятора lсс можно приготовить текст на языке С.
При подготовке mех-файлов следует определить используемый компилятор, для чего надо выполнить команду
» mех – setup
Если на машине установлено несколько компиляторов, то MATLAB предложит выбрать, какой из них будет использоваться далее для компиляции. Например, если на машине установлен только компилятор Borland C/C++, то будет предложен следующий выбор:
Select a compiler:
[1] Borland C/C++ version 5.02 in C:\BC5
[2] Lcc С version 2.4 in C:\MATLABR12\sys\lcc
[0] None
Compiler:
Здесь lcc – собственный компилятор MATLAB. Для компиляции текстов на Фортране также следует определить соответствующий компилятор.
В комплекте поставки MATLAB имеются примеры оформления mех-файлов. Так, в подкаталоге \extern\examples\mexнаходятся файлы на С (yprime.c)и Фортране (yprimef.f, yprimefg.f).Чтобы запустить компиляцию примера на С, надо перейти в подкаталог с примером и вызвать команду mех. Например, чтобы откомпилировать функцию yprime.с, необходимо выполнить следующиекоманды:
Взаимодействие интерпретатора с mex-файлом осуществляется следующим образом. Пусть func – m-функция, которая должна быть реализована в виде mех-файла. Обращение [C.D] – func (A, B) указывает MATLAB, что параметры А, В являются входными, а параметры С, D – выходными. Заголовок принимающей функции на языке С должен иметь имя mexFunction и оформляться следующим образом:
#include <math.h> void mexFunction (
int nlhs. mxArray *plhs[].
int nrhs. const mxArray *prhs[])
Переменные pihs и prhs есть векторы, содержащие указатели на выходные и входные параметры. Чтобы воспринять входные данные, следует обратиться к функции mxGet и использовать указатели prhs[0], prhs[l] и т.д. В случае скалярной переменной можно работать непосредственно с ее значением, получить которое позволяет функция mxGetScalаг. Для оформления возвращаемых параметров нужно использовать функцию mxCreate.
Для компиляции mex-функции следует запустить команду тех. При обнаружении компилятором ошибки будет выведено диагностическое сообщение и указан номер ошибочной строки. В случае нормального завершения компиляции появится файл с именем исходного файла и расширением dll.
При выполнении mex-задания используются параметры, перечисленные в файле параметров mexopts, например mexopts.bat для Windows. Параметры можно также указывать в командной строке.
Из mех-функций можно обращаться и к другим командам MATLAB; для этого имеется специальная функция mехСаll MATLAB с пятью параметрами. Первые четыре обеспечивают интерфейс и аналогичны параметрам функции mexFunction, а пятый содержит имя вызываемой команды.
В среде Windows скомпилированный машинный код mex-файла находится в файле динамической библиотеки (Dynamic Link Library) с расширением.dll. Для отладки mex-функций можно использовать среду системы, в которой компилируется функция, например Developer Studio для Visual C++ Microsoft. Параметры команды mех (Таблица 2.7).
Таблица 2.7
Параметр
Назначение
-с
Компиляция без редактирования связей
-h
Справка по команде тех
-g
Включение отладочных символов в тех-фунццию
-I PATH
Указание пути (PATH) для компилятора
-О
Оптимизация mех-функции
-output NAME
Указание имени (NAME) создаваемой тех-функции
-v
Печать установок компилятора и редактора связей
Более подробно программирование и отладка mex-функций описаны в фирменном руководстве Application Program Interface Guide.