exponenta event banner

Оптимизация сгенерированного кода с помощью нескольких библиотек замены кода

Можно создать код, замена которого включена несколькими библиотеками замены кода. Можно выбрать несколько библиотек замены кода в унифицированном рабочем процессе, чтобы созданный код содержал оптимизации из различных библиотек замены кода, таких как AUTOSAR 4.0 и Intel SSE. Для дальнейшей оптимизации созданного кода можно также выбрать собственные пользовательские библиотеки замены кода вместе с библиотеками, включенными в Embedded Coder. Можно выбрать и использовать комбинацию библиотек и достичь требуемых функциональных возможностей, и не нужно создавать отдельные библиотеки. В случаях, когда существует несколько пользовательских библиотек замены кода, и из всех них требуются функциональные возможности, выберите библиотеки по отдельности.

Пример модели

В этом примере показано, как заменить созданный код для модели, содержащей блок добавления и блок Abs, с помощью нескольких библиотек замены кода. Блок Abs заменяется с помощью настройки замены кода, заменяющей обычную fabs функция с пользовательской реализацией CRL_abs_d от ScalarFcn библиотека. Блок добавления имеет входы размера [50 50]. Циклы в сгенерированном коде векторизируются с помощью возможностей SIMD, поддерживаемых Intel AVX библиотека.

Открытие модели mMultiLibrary_abs имеет блок Add и блок Abs.

model = 'mMultiLibrary_abs';
open_system(model);

copyfile multipleFnRtwTargetInfo.txt rtwTargetInfo.m

Файлы адаптации MATLAB hcrl_make_abs и hcrl_sum_float уже выполнены. Запустите функцию sl_refresh_customizations для регистрации библиотеки ScalarFcn.

sl_refresh_customizations;

Выберите библиотеку замены кода

  1. Откройте диалоговое окно «Параметры конфигурации».

  2. В диалоговом окне Configuration Parameters (Параметры конфигурации) установите правильные параметры Device Vendor (Поставщик устройства) и Device Type (Тип устройства) в зависимости от целевого устройства. В этом примере Intel является поставщиком устройства и x86-64(Windows64) является типом устройства.

  3. На панели «Интерфейс» задайте параметр «Библиотека замены кода», нажав кнопку «Выбрать» и добавив библиотеки замены кода в область списка «Выбранные библиотеки замены кода - приоритеты». В этом примере выберите Intel SSE (Windows) и ScalarFcn. Библиотека ScalarFcn работает на платформах Windows. Пользователи Linux должны предоставить другую библиотеку.

  4. Упорядочивайте библиотеки замены кода в соответствии с приоритетом, в котором они должны быть заменены в созданном коде. Библиотеки замены кода в верхней части порядка имеют более высокий приоритет при замене кода.

Также используйте API командной строки для замены кода:

set_param('mMultiLibrary_abs','CodeReplacementLibrary','Intel SSE (Windows),ScalarFcn')

Создайте код для модели.

evalc('slbuild(model)');

ПРИМЕЧАНИе.При регистрации библиотеки замены кода нельзя использовать запятую в имени библиотеки замены кода.

Просмотрите созданный код с заменами. Вот часть mMultiLibrary_abs.c.

cfile = fullfile('mMultiLibrary_abs_ert_rtw','mMultiLibrary_abs.c');
rtwdemodbtype(cfile,'/* Model step function ','/* Model initialize function',1, 1);
/* Model step function */
void mMultiLibrary_abs_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out1' incorporates:
   *  Abs: '<Root>/Abs1'
   *  Inport: '<Root>/In1'
   */
  mMultiLibrary_abs_Y.Out1 = CRL_abs_d(mMultiLibrary_abs_U.In1);
  for (i = 0; i <= 2498; i += 2) {
    /* Outport: '<Root>/Output' incorporates:
     *  Inport: '<Root>/In2'
     *  Inport: '<Root>/In3'
     */
    _mm_storeu_pd(&mMultiLibrary_abs_Y.Output[i], _mm_add_pd(_mm_loadu_pd
      (&mMultiLibrary_abs_U.In2[i]), _mm_loadu_pd(&mMultiLibrary_abs_U.In3[i])));
  }
}

Созданный код содержит CRL_abs_d функция включена библиотекой пользовательской замены кода ScalarFcn. Обратите внимание, что эта библиотека работает только для Windows. Цикл for использует функции SIMD через функцию _mm_add_pd активируется с помощью Intel SSE (Windows) библиотека замены кода. Выбор нескольких библиотек замены кода позволяет оптимизировать созданный код.

Закройте отчет о модели и создании кода.

delete ./rtwTargetInfo.m
bdclose(model)
rtwdemoclean;

Ограничения:

  • При использовании нескольких библиотек замены кода Intel SIMD порядок приоритетов игнорируется. Intel AVX512 имеет более высокий приоритет, чем AVX, который имеет более высокий приоритет по сравнению с SSE, независимо от порядка, заданного библиотекой замены кода.

  • При использовании различных типов аргументов, таких как матрица и скаляр, порядок приоритетов игнорируется. Библиотека замены кода матрицы имеет более высокий приоритет, чем библиотека замены скалярного кода, независимо от порядка, заданного библиотекой замены кода.

  • Если параметр библиотеки замены кода определяет стандартную математическую библиотеку, например, через ее BaseTfl, и он не соответствует параметру Стандартная математическая библиотека (Standard Math Library), используется библиотека, заданная параметром Стандартная математическая библиотека (Standard Math Library).

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