buildInstrumentedMex

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

Описание

пример

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' опция.

Примеры

свернуть все

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

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

tempdirObj=fidemo.fiTempdir('buildInstrumentedMex')
copyfile(fullfile(matlabroot,'toolbox','fixedpoint',...
   'fidemos','fi_m_radix2fft_withscaling.m'),...
   'testfft.m','f')

Задайте входные параметры прототипа.

n = 128;
x = complex(zeros(n,1));
W = coder.Constant(fidemo.fi_radix2twiddles(n));

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

Примечание

Как fiaccel, buildInstrumentedMex генерирует MEX-функцию. Для генерации кода С смотрите MATLAB Coder codegen (MATLAB Coder) функция.

buildInstrumentedMex testfft -o testfft_instrumented...
-args {x,W} -histogram

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

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

showInstrumentationResults testfft_instrumented

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

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

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

clearInstrumentationResults testfft_instrumented;

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

clear testfft_instrumented;
tempdirObj.cleanUp;

В локальной папке с возможностью записи создайте функции 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 подходящим для генерации кода (MATLAB Coder).

Выбор опций компилятора. 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, заданное в командной строке.

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

-g

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

-глобальная 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 - Включите функцию inlining

  • disable:inline - Отключить инкрустацию функции

Если не указано, buildInstrumentedMex использует инкрустацию для оптимизации.

-report

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

Совет

  • Вы не можете инструментализировать функции 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