Если ваша модель имеет оптимальные установки параметров для удаления копий данных, вы можете смочь удалить дополнительные копии данных при помощи меток сигнала. После изучения сгенерированного кода и Статического Метрического Отчета Кода и идентификации областей, где вы думаете, буферное повторное использование возможно, можно добавить метки в сигнальные линии. Если возможно, генератор кода переупорядочивает блочные операции, чтобы реализовать спецификацию повторного использования.
Определение буферного повторного использования улучшает скорость выполнения и может уменьшать потребление RAM.
Модель rtwdemo_label_guided_reuse
демонстрирует, как можно использовать метки сигнала, чтобы запросить буферное повторное использование для сигналов ввода и вывода блока. Для этой модели генератор кода может использовать ту же переменную для Атомарной подсистемы и любого блок Gain или Saturation выходные параметры. Сгенерированный код использует ту же переменную для блока Saturation и Atomic Subsystem выходные параметры, потому что те сигналы содержат ту же метку, и параметр Use Signal Labels to Guide Buffer Reuse выбран.
Откройте модель.
model='rtwdemo_label_guided_reuse'; open_system(model);
В диалоговом окне Configuration Parameters очистите параметр Use Signal Labels to Guide Buffer Reuse.
Создайте модель. Функция rtwdemo_label_guided_reuse_step
содержит этот код:
void rtwdemo_label_guided_reuse_step(void) { real_T rtb_Saturation[4]; real_T rtb_Bias[4]; int32_T i; AtomicSubsystem(rtU.In1, rtb_Bias); for (i = 0; i < 4; i++) { if (rtb_Bias[i] > 10.0) { rtb_Saturation[i] = 10.0; } else if (rtb_Bias[i] < -10.0) { rtb_Saturation[i] = -10.0; } else { rtb_Saturation[i] = rtb_Bias[i]; } rtb_Bias[i] *= 3.0; } AtomicSubsystem1(rtb_Saturation, rtb_Bias, rtY.Out1); }
for
, блок Gain выполняется после блока Saturation. Сгенерированный код использует ту же переменную для вывода Атомарной подсистемы и блоков Усиления. В результате сгенерированный код содержит две локальных переменные rtb_Saturation
и rtb_Bias
для содержания промежуточных результатов.В диалоговом окне Configuration Parameters выберите параметр Use Signal Labels to Guide Buffer Reuse и создайте модель. Функция rtwdemo_label_guided_reuse_step
содержит этот код:
void rtwdemo_label_guided_reuse_step(void) { real_T rtb_Gain1[4]; int32_T i; AtomicSubsystem(rtU.In1, rtY.Out1); for (i = 0; i < 4; i++) { rtb_Gain1[i] = 3.0 * rtY.Out1[i]; if (rtY.Out1[i] > 10.0) { rtY.Out1[i] = 10.0; } else { if (rtY.Out1[i] < -10.0) { rtY.Out1[i] = -10.0; } } } AtomicSubsystem1(rtY.Out1, rtb_Gain1, rtY.Out1); }
Генератор кода изменил порядок выполнения блока так, чтобы в цикле for
, блок Saturation выполнился после блока Gain. Сгенерированный код содержит одну локальную переменную rtb_Gain1
для содержания промежуточных результатов.
В дополнение к запросу, который буферизует к повторному использованию, другой случай возможного применения должен запросить буферное повторное использование для сигналов ввода и вывода блока, которые являются комплексными.
Можно также использовать тот же Reusable
пользовательская спецификация класса памяти на различных сигнальных линиях, чтобы задать который буферы к повторному использованию. По сравнению с использованием Reusable
пользовательские классы памяти, с помощью меток сигнала, чтобы задать повторное использование обладает этими преимуществами:
Метки сигнала не являются наблюдательными постами в сгенерированном коде, так использование их не блокирует другую оптимизацию, такую как устранение мертвого кода и сворачивание выражения.
Генератор кода не обеспечивает сигнал с меткой, чтобы быть глобальной переменной в сгенерированном коде. Сигнал может быть локальной или глобальной переменной.
Сигналы с метками могут снова использовать буферы с сигналами, которые не имеют меток, таким образом, повторное использование среди локальных и глобальных переменных возможно.
Используя метки сигнала более консервативный метод определения повторного использования, чем использование Reusable
пользовательские классы памяти. Генератор кода не реализует основанное на метке повторное использование, когда это может реализовать повторное использование при помощи Reusable
пользовательские классы памяти в этих случаях:
Повторное использование, которое может потенциально препятствовать тому, чтобы другая оптимизация произошла в сгенерированном коде.
Повторное использование на корневом импорте и портах выходного порта.
Повторное использование через модель - ссылку или контуры подсистемы.
В подсистеме буферизуйте повторное использование на посредническом сигнале и порте ввода или вывода.
Используйте метки сигнала, чтобы вести буферное повторное использование