Почему Анализатор выбирает длину нулевого состояния?

Когда выход алгоритма не изменяется ни для какого входа, данного алгоритму, анализатор считает алгоритм не сохраняющим состояние, даже если это содержит состояния. Убедитесь, что входные параметры к алгоритму оказывают мгновенное влияние на выход алгоритма.

Функциональный Input_Output использует КИХ-фильтр, который содержит состояния.

function [output] = Input_Output(input)

persistent Filter
if isempty(Filter)
   Filter = dsp.FIRFilter('Numerator', (1:12));
end

y = Filter(input);

output = any(y(:)>0);

end

Когда вы вызываете автоматическое обнаружение длины состояния на этой функции, анализатор обнаруживает минимальную длину состояния 0.

dspunfold Input_Output -args {randn(10,1)} -s auto -f true
Analyzing input MATLAB function Input_Output
Creating single-threaded MEX file Input_Output_st.mexw64
Searching for minimal state length (this might take a while)
Checking stateless ... Sufficient
Minimal state length is 0
Creating multi-threaded MEX file Input_Output_mt.mexw64
Creating analyzer file Input_Output_analyzer

Анализатор обнаруживает длину нулевого состояния, потому что выход функции является тем же самым независимо от значения входа. Когда анализатор тестирует алгоритм с длиной нулевого состояния, выходными параметрами многопоточного MEX и однопоточного соответствия MEX. Поэтому анализатор считает алгоритм не сохраняющим состояние и обнуляет минимальную длину состояния.

Рекомендация

Чтобы препятствовать тому, чтобы анализатор выбрал неправильную длину состояния, перепишите свой алгоритм так, чтобы входные параметры оказали мгновенное влияние на выход. Кроме того, выберите входные параметры, которые подчеркивают путь выполнения кода с максимальной длиной состояния.

Для лучших практик смотрите раздел 'Tips' dspunfold.

Похожие темы