exponenta event banner

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

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

Когда вы генерируете код C or C++ из кода MATLAB®, генератор кода поддерживает оперативную замену аргумента функции кода. Когда вы в интерактивном режиме создаете заменяющую запись таблицы кода с Заменяющим Инструментом Кода, можно задать оперативную замену аргумента функции. Можно также задать оперативную замену аргумента функции программно с Заменяющим Library API Кода.

Требования спецификации аргумента

  • Аргумент должен быть указателем.

  • Аргумент может существовать только с еще одним аргументом.

  • Задайте входной параметр, столь же оперативный (память долей) с выходным аргументом или выходным аргументом как оперативный с входным параметром.

Интерактивная заменяющая спецификация аргумента с заменяющим инструментом кода

В этом примере показано, как задать оперативную замену аргумента функции когда заменяющий код для функции MATLAB с Заменяющим Инструментом Кода. Инструмент осуществляет оперативные требования спецификации аргумента, когда вы добавляете аргументы и изменяете свойства аргумента.

  1. Создайте следующую функцию MATLAB, customFunction.m.

    function x = customFunction(x)
    % Function that updates the input and returns it as an output
    
    coder.replace('-errorifnoreplacement');
    x = sin(x);
  2. В Заменяющем Инструменте Кода добавьте новую таблицу, выберите ту таблицу и добавьте новую функциональную запись. Для получения дополнительной информации смотрите, Задают Заменяющую Оптимизацию Библиотеки Кода.

  3. На вкладке Mapping Information выберите Custom для параметра Function.

  4. В текстовом поле function-name назовите пользовательскую функцию. В данном примере введите имя customFunction.

  5. Под полем списка Conceptual arguments нажмите +, чтобы добавить два аргумента. По умолчанию инструмент задает выходной аргумент y1 и входной параметр u1, оба из типа double.

  6. В разделе Replacement function> Function prototype введите имя custom_function_inplace_impl в текстовом поле Name.

  7. Под полем списка Function arguments нажмите +, чтобы добавить два аргумента реализации функции. По умолчанию инструмент задает выходной аргумент y1 и входной параметр u1, оба из типа double.

  8. Для каждого входного параметра, который вы хотите задать как оперативные с соответствующим выходным аргументом в поле Argument properties, устанавливают флажок Pointer. Раздел Argument properties диалогового окна расширяется, чтобы включать In-place argument выпадающий список. В данном примере в списке Function arguments, выберите входной параметр u1, и затем установите флажок Pointer.

  9. Из списка In-place argument выберите y1, выходной аргумент в пользу заменяющего отображения кода. Поле списка Function arguments обновляется, чтобы показать возможные оперативные отображения аргумента.

  10. Выберите и удалите одно из двух возможных отображений аргумента. В данном примере удалите отображение y1<-->u1.

  11. В поле Function signature preview, если функциональная подпись появляется как ожидалось, нажимают Apply. В противном случае внесите изменения, и затем нажмите Apply. Функциональная подпись для этого примера, появляется как

    void custom_function_inplace_impl(double* u1);
  12. Нажмите Validate entry.

  13. Сохраните заменяющую таблицу кода в той же папке как customFunction.m. Назовите файл htfl_inplace_table.m.

Протестировать пример:

  1. Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.

  2. Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.

  3. Сгенерируйте заменяющий код и отчет генерации кода.

  4. Рассмотрите замены кода.

Программируемая заменяющая спецификация аргумента

В этом примере показано, как задать оперативную замену аргумента функции когда заменяющий код для функции MATLAB программно. Для входного аргумента реализации, который совместно использует буфер памяти, пример:

  • Определяет имя аргумента реализации к тому же имени в качестве соответствующего концептуального аргумента.

  • Сопоставляет соответствующий аргумент реализации со свойством ArgumentForInPlaceUse аргумента.

  1. Создайте следующую функцию MATLAB, customFunction.m.

    function y = customFunction(x)
    % Function that updates the input and returns it as an output
    
    coder.replace('-errorifnoreplacement');
    x = sin(x);
  2. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hTable = crl_table_inplace()
    
  3. В теле функции составьте таблицу путем вызова функционального RTW.TflTable.

    hTable = RTW.TflTable;
    
  4. Создайте запись для отображения функции с вызовом RTW.TflCFunctionEntry функция.

    hEnt = RTW.TflCFunctionEntry;
    
  5. Параметры записи функции множества с вызовом setTflCFunctionEntryParameters функция.

    setTflCFunctionEntryParameters(hEnt, ...
        'Key', 'customFunction', ...
        'Priority', 100, ...
        'ImplementationName', 'custom_function_inplace_impl', ...
        'SideEffects', true);
  6. Создайте концептуальные аргументы y1 и u1. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать и добавить аргументы.

    arg = getTflArgFromString(hEnt, 'y1','double');
    arg.IOType = 'RTW_IO_OUTPUT';
    addConceptualArg(hEnt, arg);
    
    arg = getTflArgFromString(hEnt, 'u1','double');
    addConceptualArg(hEnt, arg);
  7. Создайте аргументы реализации и добавьте их в запись. Этот пример использует вызовы getTflArgFromString функция, чтобы создать аргументы реализации, которые сопоставляют с аргументами в заменяющем прототипе функции: выходной аргумент y1 и входной параметр u1. Для каждого аргумента пример использует удобный метод setReturn или addArgument задавать, является ли аргумент возвращаемым значением или аргументом. Для каждого аргумента этот пример добавляет аргумент в массив записи аргументов реализации.

    arg = getTflArgFromString(hEnt, 'y2','void');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEnt.Implementation.setReturn(arg);
    
    arg = getTflArgFromString(hEnt, 'u1','double*');
    arg.ArgumentForInPlaceUse = 'y1';
    hEnt.Implementation.addArgument(arg);
    
  8. Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

    addEntry(hLib, hEnt);
  9. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Протестировать пример:

  1. Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.

  2. Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.

  3. Сгенерируйте заменяющий код и отчет генерации кода.

  4. Рассмотрите замены кода.

Похожие темы