buildInstrumentedMex

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

Описание

пример

buildInstrumentedMex fcn -options переводит файл MATLAB® fcnM к 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_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_values

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

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

-histogramВычислите log2 гистограмму для всех названных, промежуточное звено и значения выражения. Столбец гистограммы появляется в таблице отчета генерации кода.
- Я 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 Coder codegen функция.

    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