Задайте оперативную замену кода

Оперативная замена кода является методом оптимизации, который использует один буфер, то есть, ту же память, чтобы сохранить входной параметр функции и выходные данные, как в x=foo(x).

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

В интерактивном режиме разработайте заменяющую библиотеку кода

  1. Откройте Code Replacement Tool (crtool) из командной строки MATLAB со следующей командой:

    >>crtool
  2. Составление таблицы.

    1. Из crtool контекстного меню выберите File> New Table.

    2. На правой панели назовите таблицу crl_table_inplace. Нажмите Apply.

  3. Создайте запись. Из crtool контекстного меню выберите File> New entry> Function.

  4. Создайте параметры записи. В Function выпадающий список выберите custom. Функциональная информация появляется в crtool. В данном примере задайте параметр как customFunction .

  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую вы хотите заменить. В подразделе Conceptual function crtool задайте возвращаемый аргумент, y1, и входной параметр, u1, с Data Type двойных и Argument Type Pointer.

  6. Создайте представление реализации. Представление реализации описывает подпись оптимизационной функции. Добавьте параметр реализации y1 и u1. Для каждого входного параметра, который вы хотите задать как оперативные с соответствующим выходным аргументом в поле свойств Argument, устанавливают флажок Pointer. Для параметра реализации y1в разделе Argument properties диалогового окна, набор In-place argument к u1.

  7. Укажите информацию сборки. Кликните по вкладке Build Information, чтобы открыть панель Requirements сборки. Задайте файлы (источник, заголовок, объект), которого генератор кода требует для замены кода. В данном примере вы не должны указывать информацию сборки.

  8. Подтвердите и сохраните таблицу. Во вкладке Mapping Information нажмите Validate entry. В crtool контекстном меню выберите File> Save table> Save.

  9. Укажите заменяющую библиотеку кода. Регистрация создает библиотеку, состоявшую из таблиц, которые вы задаете. Выберите File> Generate registration file. В Сгенерировать регистрационном диалоговом окне файла заполните эти поля:

    Чтобы пользоваться вашей заменяющей библиотекой кода, обновите свой текущий сеанс работы с MATLAB с командой:

    >>sl_refresh_customizations

  10. Проверьте заменяющую библиотеку кода. Из командной строки MATLAB откройте библиотеку при помощи Code Replacement Viewer и проверьте, что таблица и запись правильно заданы. Для получения дополнительной информации смотрите, Проверяют Заменяющую Библиотеку Кода. Сконфигурируйте свою модель, чтобы пользоваться заменяющей библиотекой кода, сгенерировать код и проверить, что замена происходит как ожидалось. Если неожиданное поведение происходит, исследуйте журналы удачи и неудачи, чтобы диагностировать проблемы.

Программно разработайте заменяющую библиотеку кода

  1. Откройте программируемый интерфейс в меню MATLAB путем выбора New> Function.

  2. Составление таблицы.

    1. Создайте функцию с именем вашей заменяющей таблицы библиотеки кода, которая не имеет аргументов и возвращает объект таблицы. Можно использовать эту функцию, чтобы вызвать заменяющую таблицу библиотеки кода.

    2. Создайте объект таблицы путем вызова RTW.TflTable.

    function hTable = crl_table_inplace()
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
  3. Создайте запись. Поскольку этот пример заменяет функцию, создайте заменяющую запись кода в своей таблице путем вызывания функции записи RTW.TflCFunctionEntry.

    function hTable = crl_table_inplace
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = rtw.TflCFunctionEntry;
    
  4. Создайте параметры записи. Поскольку это, примеры заменяют функцию, создают параметры записи путем вызова функционального setTflCFunctionEntryParameters.

    function hTable = crl_table_inplace()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry 
    hEntry = RTW.TflCFunctionEntry;
    
    %% Create entry parameters
    hEntry.setTflCFunctionEntryParameters(...
           'Key', 'customFunction', ...
           'Priority', 100, ...
           'ImplementationName', 'custom_function_inplace_impl', ...
           'SideEffects', true);
  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую вы хотите заменить. Чтобы явным образом задать свойства аргумента, вызовите функциональный getTflArgFromString и addConceptualArg.

    function hTable = crl_table_inplace()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry 
    hEntry = RTW.TflCFunctionEntry;
    
    %% Create entry parameters
    hEntry.setTflCFunctionEntryParameters(...
           'Key', 'customFunction', ...
           'Priority', 100, ...
           'ImplementationName', 'custom_function_inplace_impl', ...
           'SideEffects', true);
    
    %% Create the conceptual representation
    arg = getTflArgFromString(hEntry, 'y1','double');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(hEntry, arg);
    
    arg = getTflArgFromString(hEntry, 'u1','double');
    addConceptualArg(hEntry, arg);
    
  6. Создайте представление реализации. Представление реализации описывает подпись оптимизационной функции. Этот пример использует вызовы getTflArgFromString функция, чтобы создать аргументы реализации, которые сопоставляют с аргументами в заменяющем прототипе функции: выходной аргумент y1 и входной параметр u1. Для каждого аргумента пример использует удобный метод setReturn или addArgument задавать, является ли аргумент возвращаемым значением или аргументом. Для каждого аргумента этот пример добавляет аргумент в массив записи аргументов реализации.

    function hTable = crl_table_inplace()
    % Create a code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry 
    hEntry = RTW.TflCFunctionEntry;
    
    %% Create entry parameters
    hEntry.setTflCFunctionEntryParameters(...
           'Key', 'customFunction', ...
           'Priority', 100, ...
           'ImplementationName', 'custom_function_inplace_impl', ...
           'SideEffects', true);
    
    %% Create the conceptual representation
    arg = getTflArgFromString(hEntry, 'y1','double');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(hEntry, arg);
    
    arg = getTflArgFromString(hEntry, 'u1','double');
    addConceptualArg(hEntry, arg);
    
    %% Create the Implementation Representation
    
    arg = getTflArgFromString(hEntry, 'y2','void');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEntry.Implementation.setReturn(arg);
    
    arg = getTflArgFromString(hEntry, 'u1','double*');
    arg.ArgumentForInPlaceUse = 'y1';
    hEntry.Implementation.addArgument(arg);
    
    %% Add the entry to the table
    
    hTable.addEntry(hEntry);
    
  7. Укажите информацию сборки. В параметрах записи задайте файлы (заголовок, источник, объект), в котором генератор кода нужен для замены кода. В данном примере создайте информацию, не требуется.

  8. Подтвердите и сохраните файл настройки. В меню MATLAB сохраните этот файл настройки путем выбора File> Save. Из командной строки подтвердите заменяющую таблицу библиотеки кода путем вызова его:

    >> hTable = crl_table_inplace
  9. Укажите заменяющую библиотеку кода. Регистрация создает заменяющую библиотеку кода путем определения имени библиотеки, заменяющих таблиц кода и другой информации. Создайте регистрационный файл (новый файл функции) с этими техническими требованиями:

    function rtwTargetInfo(cm)
     
    cm.registerTargetInfo(@loc_register_crl);
    end
     
    function this = loc_register_crl 
     
    this(1) = RTW.TflRegistry; 
    this(1).Name = 'CRL for inplace function replacement’;
    this(1).TableList = {'crl_table_inplace.m'}; % table created in this example
    this(1).TargetHWDeviceType = {'*'};
    this(1).Description = 'Example code replacement library';
    
    end
    

    Чтобы пользоваться вашей заменяющей библиотекой кода, обновите свой текущий сеанс работы с MATLAB с командой:

    >>sl_refresh_customizations

  10. Проверьте заменяющую библиотеку кода. Из командной строки MATLAB откройте библиотеку при помощи Code Replacement Viewer и проверьте, что таблица и запись правильно заданы. Для получения дополнительной информации смотрите, Проверяют Заменяющую Библиотеку Кода. Сконфигурируйте свою модель, чтобы пользоваться заменяющей библиотекой кода, сгенерировать код и проверить, что замена происходит как ожидалось. Если неожиданное поведение происходит, исследуйте журналы удачи и неудачи, чтобы диагностировать проблемы.

Похожие темы