Можно создать код, замена которого включена несколькими библиотеками замены кода. Можно выбрать несколько библиотек замены кода в унифицированном рабочем процессе, чтобы созданный код содержал оптимизации из различных библиотек замены кода, таких как 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;
Откройте диалоговое окно «Параметры конфигурации».
В диалоговом окне Configuration Parameters (Параметры конфигурации) установите правильные параметры Device Vendor (Поставщик устройства) и Device Type (Тип устройства) в зависимости от целевого устройства. В этом примере Intel является поставщиком устройства и x86-64(Windows64) является типом устройства.
На панели «Интерфейс» задайте параметр «Библиотека замены кода», нажав кнопку «Выбрать» и добавив библиотеки замены кода в область списка «Выбранные библиотеки замены кода - приоритеты». В этом примере выберите Intel SSE (Windows) и ScalarFcn. Библиотека ScalarFcn работает на платформах Windows. Пользователи Linux должны предоставить другую библиотеку.
Упорядочивайте библиотеки замены кода в соответствии с приоритетом, в котором они должны быть заменены в созданном коде. Библиотеки замены кода в верхней части порядка имеют более высокий приоритет при замене кода.

Также используйте 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).