exponenta event banner

buildInstrumentedMex

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

Описание

пример

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. Для получения информации о создании кода C см. код MATLAB codegen (Кодер MATLAB).

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

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

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

showInstrumentationResults testfft_instrumented

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

Для получения информации о рисунке см. 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.

Входные аргументы

свернуть все

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

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

-args example_inputs

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

-coder

Используйте программное обеспечение MATLAB Coder для компиляции MEX-файла вместо конструктора фиксированных точек по умолчанию 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 вариант.

Совет

  • Функции 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