dspunfold
Запустите точку входа функция MATLAB® с входными параметрами, которые вы хотите протестировать. Убедитесь, что функция не имеет никаких ошибок периода выполнения. Вызовите codegen
на функции и убедитесь, что это генерирует файл MEX успешно.
Сгенерируйте многопоточный файл MEX с помощью dspunfold
. Задайте длину состояния с помощью опции -s
. Длина состояния должна быть, по крайней мере, той же длиной как алгоритм в функции MATLAB. По умолчанию -s
установлен в 0
, указав, что алгоритм является не сохраняющим состояние.
Запустите сгенерированную функцию анализатора. Используйте флаг pass
, чтобы проверить, что выходные результаты многопоточного файла MEX и однопоточного файла MEX соответствуют. Кроме того, проверяйте, являются ли ускорение и задержка, отображенная функцией анализатора, удовлетворительными.
Если выходные результаты не совпадают, увеличивают длину состояния и генерируют многопоточный файл MEX снова. Также используйте автоматическое обнаружение длины состояния (заданное использование -s auto
), чтобы определить минимальную длину состояния, которая совпадает с выходными параметрами.
Если выходное соответствие результатов, но ускорение и задержка не являются удовлетворительными, увеличивают фактор повторения использование -r
или увеличивают число потоков с помощью -t
. Кроме того, можно настроить длину состояния. Настройте опции dspunfold
и сгенерируйте новые многопоточные файлы MEX, пока вы не будете удовлетворены результатами..
Для лучшых практик для генерации многопоточного файла MEX с помощью dspunfold
смотрите раздел 'Tips' dspunfold
.
Запустите функцию MATLAB точки входа
Создайте функцию MATLAB точки входа.
function [y,mse] = AdaptiveFilter(x,noise) persistent rlsf1 ffilt noise_var if isempty (rlsf1) rlsf1 = dsp.RLSFilter(32, 'ForgettingFactor', 0.98); ffilt = dsp.FIRFilter('Numerator',fir1(32, .25)); % Unknown System noise_var = 1e-4; end d = ffilt(x) + noise_var * noise; % desired signal [y,e] = rlsf1(x, d); mse = 10*log10(sum(e.^2)); end
Модели функции фильтр RLS, который фильтрует входной сигнал x
, с помощью d
в качестве желаемого сигнала. Функция возвращает отфильтрованный выходной параметр в y
и ошибку фильтра в e
.
Запустите AdaptiveFilter
с входными параметрами, которые вы хотите протестировать. Проверьте, что функция запускается без ошибок.
AdaptiveFilter(randn(1000,1), randn(1000,1));
Вызовите codegen
на AdaptiveFilter
и сгенерируйте файл MEX.
codegen AdaptiveFilter -args {randn(1000,1), randn(1000,1)}
Сгенерируйте многопоточный файл MEX Используя dspunfold
Установите длину состояния на выборки 32
и фактор повторения к 1
. Обеспечьте длину состояния, которая больше, чем или равна алгоритму в функции MATLAB. Когда по крайней мере одна запись frameinputs
установлена в true
, длина состояния рассматривается в выборках.
dspunfold AdaptiveFilter -args {randn(1000,1), randn(1000,1)} -s 32 -f true
Analyzing input MATLAB function AdaptiveFilter Creating single-threaded MEX file AdaptiveFilter_st.mexw64 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer
Запустите сгенерированную функцию анализатора
Анализатор рассматривает фактические значения входа. Чтобы увеличить эффективность анализатора, обеспечьте по крайней мере два различных кадра по первому измерению входных параметров.
AdaptiveFilter_analyzer(randn(1000*4,1),randn(1000*4,1))
Analyzing multi-threaded MEX file AdaptiveFilter_mt.mexw64 ... Latency = 8 frames Speedup = 3.5x Warning: The output results of the multi-threaded MEX file AdaptiveFilter_mt.mexw64 do not match the output results of the single-threaded MEX file AdaptiveFilter_st.mexw64. Check that you provided the correct state length value to the dspunfold function when you generated the multi-threaded MEX file AdaptiveFilter_mt.mexw64. For best practices and possible solutions to this problem, see the 'Tips' section in the dspunfold function reference page. > In coder.internal.warning (line 8) In AdaptiveFilter_analyzer ans = Latency: 8 Speedup: 3.4686 Pass: 0
Увеличьте длину состояния
Анализатор не передал верификацию. Отображенное предупреждающее сообщение указывает, что неправильное значение длины состояния предоставляется функции dspunfold
. Увеличьте длину состояния до выборок 1000
и повторите процесс от предыдущего раздела.
dspunfold AdaptiveFilter -args {randn(1000,1),randn(1000,1)} -s 1000 -f true
Analyzing input MATLAB function AdaptiveFilter Creating single-threaded MEX file AdaptiveFilter_st.mexw64 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer
Запустите сгенерированный анализатор.
AdaptiveFilter_analyzer(randn(1000*4,1),randn(1000*4,1))
Analyzing multi-threaded MEX file AdaptiveFilter_mt.mexw64 ... Latency = 8 frames Speedup = 1.8x ans = Latency: 8 Speedup: 1.7778 Pass: 1
Анализатор передал верификацию. Рекомендуется, чтобы вы предоставили различные численные данные функции анализатора и убедились, что анализатор функционирует передачи.
Улучшите ускорение и настройте задержку
Если вы хотите увеличить ускорение, и ваша система может предоставить большую задержку, увеличить фактор повторения до 2
.
dspunfold AdaptiveFilter -args {randn(1000,1),randn(1000,1)} -s 1000 -r 2 -f true
Analyzing input MATLAB function AdaptiveFilter Creating single-threaded MEX file AdaptiveFilter_st.mexw64 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer
Запустите анализатор.
AdaptiveFilter_analyzer(randn(1000*4,1), randn(1000*4,1))
Analyzing multi-threaded MEX file AdaptiveFilter_mt.mexw64 ... Latency = 16 frames Speedup = 2.4x ans = Latency: 16 Speedup: 2.3674 Pass: 1
Повторите процесс, пока вы не достигнете удовлетворительного ускорения и задержки.
Используйте автоматическое обнаружение длины состояния
Выберите длину состояния, которая больше, чем или равна длине состояния вашего алгоритма. Если не легко определить длину состояния для вашего алгоритма аналитически, используйте автоматический инструмент обнаружения длины состояния. Вызовите автоматическое обнаружение длины состояния установкой -s
к auto
. Инструмент обнаруживает минимальную длину состояния, с которой анализатор передает верификацию.
dspunfold AdaptiveFilter -args {randn(1000,1),randn(1000,1)} -s auto -f true
Analyzing input MATLAB function AdaptiveFilter Creating single-threaded MEX file AdaptiveFilter_st.mexw64 Searching for minimal state length (this might take a while) Checking stateless ... Insufficient Checking 1000 ... Sufficient Checking 500 ... Insufficient Checking 750 ... Insufficient Checking 875 ... Sufficient Checking 812 ... Insufficient Checking 843 ... Sufficient Checking 827 ... Insufficient Checking 835 ... Insufficient Checking 839 ... Sufficient Checking 837 ... Sufficient Checking 836 ... Sufficient Minimal state length is 836 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer
Минимальная длина состояния является выборками 836
.
Запустите сгенерированный анализатор.
AdaptiveFilter_analyzer(randn(1000*4,1), randn(1000*4,1))
Analyzing multi-threaded MEX file AdaptiveFilter_mt.mexw64 ... Latency = 8 frames Speedup = 1.9x ans = Latency: 8 Speedup: 1.9137 Pass: 1
Анализатор передал верификацию.