exponenta event banner

Укажите замену кода на месте

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

Можно разработать библиотеку замены кода для оптимизации замены аргументов функции на месте. Для разработки библиотеки замены кода используйте интерактивный или программный подход. Дополнительные сведения см. в разделе Разработка библиотеки замены кода.

Интерактивная разработка библиотеки замены кода

  1. Откройте инструмент замены кода (crtool) в командной строке MATLAB с помощью следующей команды:

    >>crtool
  2. Создайте таблицу.

    1. В контекстном меню crtool выберите «Файл» > «Новая таблица».

    2. На правой панели присвойте таблице имя crl_table_inplace. Нажмите кнопку «Применить».

  3. Создайте запись. В контекстном меню crtool выберите «Файл» > «Новая запись» > «Функция».

  4. Создание параметров записи. В раскрывающемся списке «Функция» выберите custom. Информация о функциях появляется в crtool. В этом примере укажите параметр как customFunction .

  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. В подразделе Концептуальная функция crtool укажите возвращаемый аргумент y1 и входной аргумент u1 с двойным типом данных и типом аргумента указателя.

  6. Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. Добавление параметра реализации y1 и u1. Для каждого входного аргумента, который необходимо указать как контекстный с соответствующим выходным аргументом, в поле Свойства аргумента установите флажок Указатель. Для параметра реализации y1в разделе «Свойства аргумента» диалогового окна задайте для аргумента «На месте» значение u1.

  7. Укажите сведения о построении. Щелкните вкладку Сведения о построении, чтобы открыть панель требований к построению. Укажите файлы (источник, заголовок, объект), необходимые генератору кода для замены кода. В этом примере нет необходимости указывать информацию о построении.

  8. Проверьте и сохраните таблицу. На вкладке Информация о сопоставлении щелкните Проверить запись. В контекстном меню crtool выберите «Файл» > «Сохранить таблицу» > «Сохранить».

  9. Зарегистрируйте библиотеку замены кода. При регистрации создается библиотека, состоящая из указанных таблиц. Выберите «Файл» > «Создать файл регистрации». В диалоговом окне Создать файл регистрации заполните следующие поля:

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

    >>sl_refresh_customizations

  10. Проверьте библиотеку замены кода. В командной строке MATLAB откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.

Программная разработка библиотеки замены кода

  1. Откройте программный интерфейс в меню MATLAB, выбрав Создать > Функция.

  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 сохраните этот файл настройки, выбрав «Файл» > «Сохранить». В командной строке проверьте таблицу библиотеки замены кода, вызвав ее:

    >> 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 откройте библиотеку с помощью средства просмотра замены кода и убедитесь, что таблица и запись указаны правильно. Дополнительные сведения см. в разделе Проверка библиотеки замены кода. Настройте модель так, чтобы она использовала библиотеку замены кода, создавала код и проверяла, что замена происходит так, как ожидалось. Если происходит непредвиденное поведение, проверьте попадание и пропустите журналы, чтобы устранить неполадки.

Связанные темы