buildInstrumentedMex

Сгенерируйте скомпилированную функцию кода С включая журналирование инструментирования

Синтаксис

buildInstrumentedMex fcn -options
buildInstrumentedMex fcn_1... fcn_n -options -coder

Описание

пример

buildInstrumentedMex fcn -options переводит файл MATLAB® fcn.m в MEX-функцию и включает инструментирование для журналирования минимальных и максимальных значений всех именованных и промежуточных переменных. Опционально, можно включить инструментирование для log2 гистограмм всех названных, промежуточное звено и значения выражения. Общий синтаксис и опции buildInstrumentedMex и fiaccel являются тем же самым, кроме buildIntstrumentedMex не имеет никаких ограничений объектов fi и поддерживает опцию '-coder'.

пример

buildInstrumentedMex fcn_1... fcn_n -options -coder переводит функции MATLAB fcn_1 через fcn_n к MEX-функции и включает инструментирование для журналирования минимальных и максимальных значений всех именованных и промежуточных переменных. Генерация MEX-функции для нескольких функций точки входа требует опции '-coder'.

Входные параметры

fcn, fcn_1... fcn_n

Точка входа MATLAB функционирует, чтобы быть оснащенной. Функции точки входа должны подойти для генерации кода. Для получения дополнительной информации смотрите, Делают код MATLAB Подходящим для Генерации кода (MATLAB Coder).

options

Выбор параметров компилятора. buildInstrumentedMex дает приоритет отдельным параметрам командной строки по опциям, заданным с помощью объекта настройки. Если параметры командной строки конфликтуют, самая правая опция преобладает.

-args example_inputs

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

-coder

Используйте программное обеспечение MATLAB Coder™, чтобы скомпилировать файл MEX вместо Fixed-Point Designer™ по умолчанию функция fiaccel. Эта опция удаляет ограничения fiaccel и допускает полную поддержку генерации кода. У вас должна быть лицензия MATLAB Coder, чтобы использовать эту опцию.

-config config_object

Задайте параметры генерации MEX, на основе config_object, заданного как переменная MATLAB с помощью coder.mexconfig. Например:

cfg = coder.mexconfig;

-d out_folder

Храните сгенерированные файлы в абсолютном или относительном пути, заданном out_folder. Если папка, заданная out_folder, не существует, buildInstrumentedMex создает его для вас.

Если вы не задаете местоположение папки, buildInstrumentedMex генерирует файлы в папке по умолчанию:

fiaccel/mex/fcn. 

fcn является именем функции MATLAB, заданной в командной строке.

Функция не поддерживает следующие символы на имена папок: звездочка (*), вопросительный знак (?), доллар ($) и фунт (#).

-g

Компилирует MEX-функцию в режиме отладки, с выключенной оптимизацией. Если не заданный, buildinstrumentedMex генерирует MEX-функцию в оптимизированном режиме.

-global global_values

Задайте начальные значения для глобальных переменных в файле MATLAB. Используйте значения в массиве ячеек global_values, чтобы инициализировать глобальные переменные в функции, которую вы компилируете. Массив ячеек должен обеспечить имя и начальное значение каждой глобальной переменной. Необходимо инициализировать глобальные переменные прежде, чем скомпилировать с buildInstrumentedMex. Если вы не обеспечиваете начальные значения для глобальных переменных с помощью опции -global, buildInstrumentedMex проверяет на переменную в глобальной рабочей области MATLAB. Если вы не предоставляете начальное значение, buildInstrumentedMex генерирует ошибку.

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

-histogramВычислите log2 гистограмму для всех названных, промежуточное звено и значения выражения. Столбец гистограммы появляется в таблице отчета генерации кода.
-I include_path

Добавьте include_path в начало пути генерации кода.

buildInstrumentedMex ищет путь генерации кода сначала при преобразовании кода MATLAB в код MEX.

-launchreport

Сгенерируйте и откройте отчет генерации кода. Если вы не задаете эту опцию, buildInstrumentedMex генерирует отчет, только если сообщения об ошибке или предупреждающие сообщения происходят, или вы задаете опцию -report.

-o output_file_name

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

output_file_name может быть именем файла или включать существующий путь.

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

-O optimization_option

Оптимизируйте сгенерированный код MEX, на основе значения optimization_option:

  • enable:inline — Включите функциональное встраивание

  • disable:inline — Отключите функциональное встраивание

Если не заданный, встраивание использования buildInstrumentedMex для оптимизации.

-report

Сгенерируйте отчет генерации кода. Если вы не задаете эту опцию, buildInstrumentedMex генерирует отчет, только если сообщения об ошибке или предупреждающие сообщения происходят, или вы задаете опцию -launchreport.

Примеры

Создайте оснащенную MEX-функцию

Создайте оснащенную MEX-функцию. Запустите испытательный стенд, затем просмотрите регистрируемые результаты.

  1. Создайте временную директорию, затем импортируйте функцию, взятую в качестве примера, из Fixed-Point Designer.

    tempdirObj=fidemo.fiTempdir('buildInstrumentedMex')
    copyfile(fullfile(matlabroot,'toolbox','fixedpoint',...
       'fidemos','fi_m_radix2fft_withscaling.m'),...
       'testfft.m','f')
  2. Задайте прототипные входные параметры.

    n = 128;
    x = complex(zeros(n,1));
    W = coder.Constant(fidemo.fi_radix2twiddles(n));
  3. Сгенерируйте оснащенную MEX-функцию. Используйте опцию -o, чтобы задать имя MEX-функции. Используйте опцию -histogram, чтобы вычислить гистограммы. (Если у вас есть лицензия MATLAB Coder, можно хотеть также добавить опцию -coder. В этом случае используйте buildInstrumentedMex testfft -coder -o testfft_instrumented -args {x,W} вместо следующей строки кода.)

    Примечание

    Как fiaccel, buildInstrumentedMex генерирует MEX-функцию. Чтобы сгенерировать код С, смотрите, что MATLAB Codercodegen функционирует.

    buildInstrumentedMex testfft -o testfft_instrumented...
    -args {x,W} -histogram
  4. Запустите тестовый файл, чтобы записать результаты инструментирования. Вызовите showInstrumentationResults, чтобы открыть отчет. Просмотрите симуляцию минимальные и максимальные значения и состояние целого числа путем приостановки по переменной в отчете. Можно также видеть предложенные типы данных для чисел двойной точности в таблице.

    for i=1:20
       y = testfft_instrumented(randn(size(x)));
    end
    
    showInstrumentationResults testfft_instrumented

  5. Просмотрите гистограмму для переменной путем нажатия во вкладке Variables.

    Для получения информации о фигуре обратитесь к странице с описанием NumericTypeScope.

  6. Закройте отображение гистограммы и затем, очистите журнал результатов.

    clearInstrumentationResults testfft_instrumented;
  7. Очистите MEX-функцию, затем удалите временные файлы.

    clear testfft_instrumented;
    tempdirObj.cleanUp;

Создайте оснащенную MEX-функцию для многократных функций точки

В локальной перезаписываемой папке создайте функции ep1.m и ep2.m.

function y1 = ep1(u) %#codegen
y1 = u;
end 
function y2 = ep2(u, v) %#codegen
y2 = u + v;
end

Сгенерируйте оснащенную MEX-функцию для двух функций точки входа. Используйте опцию -o, чтобы задать имя MEX-функции. Используйте опцию -histogram, чтобы вычислить гистограммы. Используйте опцию -coder, чтобы позволить генерировать многократные точки с функцией buildInstrumentedMex.

u = 1:100;
v = 5:104;
buildInstrumentedMex -o sharedmex ...
ep1 -args {u} ... % Entry point 1
ep2 -args {u, v} ... % Entry point 2
-histogram -coder

Вызовите первую функцию точки входа использование сгенерированной MEX-функции.

y1 = sharedmex('ep1', u);

Вызовите вторую функцию точки входа использование сгенерированной MEX-функции.

y2 = sharedmex('ep2', u, v);

Покажите результаты инструментирования.

showInstrumentationResults sharedmex 

Примечание

Генерация MEX-функции для нескольких функций точки входа с помощью функции buildInstrumentedMex требует лицензии MATLAB Coder.

Советы

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

  • Результаты инструментирования накапливаются каждый раз, когда оснащенная MEX-функция называется. Используйте clearInstrumentationResults, чтобы очистить предыдущие результаты в журнале.

  • Некоторые шаблоны кодирования передают существенное количество данных, но только используют небольшую часть тех данных. В таких случаях можно видеть ухудшенную производительность при использовании buildInstrumentedMex. В следующем шаблоне subfun только использует один элемент входного массива, A. Для нормального выполнения количество времени, чтобы выполнить subfun однажды остается постоянным независимо от размера A. Функциональный topfun вызывает subfun времена N, и таким образом общее время, чтобы выполнить topfun пропорционально N. Когда оснащено, однако, время, чтобы выполнить subfun однажды становится пропорциональным N ^2. Это изменение происходит, потому что минимальные и максимальные данные вычисляются по целому массиву. Когда A является большим, вычисления могут привести к значительному ухудшению производительности. Поэтому, когда это возможно, необходимо передать только данные, в которых на самом деле нужна функция.

    function A = topfun(A)
        N = numel(A);
        for i=1:N
            A(i) = subfun(A,i);
        end
    end
    function b = subfun(A,i)
        b = 0.5 * A(i);
    end
      
    function A = topfun(A)
        N = numel(A);
        for i=1:N
            A(i) = subfun(A(i));   
        end  
    end
    function b = subfun(a)
        b = 0.5 * a;
    end
    

Представленный в R2011b