Когда выход алгоритма не изменяется ни для какого входа, данного алгоритму, анализатор считает алгоритм не сохраняющим состояние, даже если это содержит состояния. Убедитесь, что входные параметры к алгоритму оказывают мгновенное влияние на выход алгоритма.
Функциональный 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
.