Рабочий процесс для Генерации Многопоточного файла MEX с помощью dspunfold

  1. Запустите точку входа функция MATLAB® с входными параметрами, которые вы хотите протестировать. Убедитесь, что функция не имеет никаких ошибок периода выполнения. Вызовите codegen на функции и убеждаются, что она генерирует файл MEX успешно.

  2. Сгенерируйте многопоточный файл MEX с помощью dspunfold. Задайте длину состояния с помощью -s опция. Длина состояния должна быть, по крайней мере, той же длиной как алгоритм в функции MATLAB. По умолчанию, -s установлен в 0, указание, что алгоритм является не сохраняющим состояние.

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

  4. Если выходные результаты не совпадают, увеличивают длину состояния и генерируют многопоточный файл MEX снова. В качестве альтернативы используйте автоматическое обнаружение длины состояния (заданное использование -s auto) определить минимальную длину состояния, которая совпадает с выходными параметрами.

  5. Если выходное соответствие результатов, но ускорение и задержка не являются удовлетворительными, увеличивают фактор повторения использование -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

Анализатор передал верификацию.

Смотрите также

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте