Генерирует многопоточный файл MEX от функции MATLAB
dspunfold file
dspunfold options file
dspunfold
генерирует многопоточный файл MEX от точки входа функция MATLAB®, заданная file
file
, с помощью разворачивающейся технологии. Разворачивание является методом, чтобы улучшить пропускную способность посредством распараллеливания. Многопоточный файл MEX усиливает многожильную архитектуру ЦП хоста - компьютера и может значительно улучшить скорость. В дополнение к многопоточному файлу MEX функция генерирует однопоточный файл MEX, самодиагностическую функцию анализатора и соответствующие справочные файлы.
Когда вы вызываете dspunfold
на функцию MATLAB точки входа, dspunfold
генерирует следующие файлы.
Файл | Значение | Описание | Примеры |
---|---|---|---|
Многопоточный файл MEX | Файл MEX | Многопоточный файл MEX сгенерирован от функции MATLAB точки входа. Файл MEX наследовал имя |
|
Справочный файл для многопоточного файла MEX | Файл MATLAB | Справочный файл MATLAB для многопоточного файла MEX. Справочный файл имеет то же имя как файл MEX, но с '.m' расширение. Чтобы вызвать справочный файл, введите Этот справочный файл отображает информацию о том, как вызвать файл MEX, его синтаксис, |
|
Однопоточный файл MEX | Файл MEX | Однопоточный файл MEX сгенерирован от функции MATLAB точки входа. Файл MEX наследовал имя |
|
Справочный файл для однопоточного файла MEX | Файл MATLAB | Справочный файл MATLAB для однопоточного файла MEX. Справочный файл имеет то же имя как файл MEX, но с '.m' расширение. Чтобы вызвать справочный файл, введите Справочный файл отображает информацию о том, как вызвать файл MEX, его синтаксис и типы (размер, класс и сложность) входных параметров к файлу MEX. Синтаксис, чтобы вызвать файл MEX должен совпасть с синтаксисом, показанным в справочном файле. |
|
Самодиагностическая функция анализатора | Файл P-coded |
Первая размерность входных параметров анализатора должна быть кратной первой размерности соответствующих входных параметров, данных опции Анализатор наследовал имя |
|
Справочный файл для самодиагностической функции анализатора | Файл MATLAB | Справочный файл для самодиагностической функции анализатора. Справочный файл имеет то же имя как файл MEX, но с '.m' расширение. Чтобы вызвать справочный файл, введите Справочный файл для самодиагностического анализатора функционирует информация об отображениях о том, как вызвать функцию анализатора, ее синтаксис и типы (размер, класс и сложность) входных параметров к функции анализатора. Синтаксис, чтобы вызвать функцию анализатора должен совпасть с синтаксисом, показанным в справочном файле. |
|
Общие ограничения:
На Windows и Linux, необходимо использовать компилятор, который поддерживает интерфейс приложения Open Multiprocessing (OpenMP). См. Поддерживаемые Компиляторы.
Если входная функция MATLAB имеет ошибки периода выполнения, ошибки не фиксируются, когда вы запускаете многопоточный файл MEX. Прежде чем вы будете использовать функцию dspunfold
, вызовите codegen
на функции MATLAB и убедитесь, что файл MEX сгенерирован успешно.
Если сгенерированный код использует большой объем памяти, чтобы сохранить локальные переменные вокруг 4
MB
на платформе Windows, сгенерированный многопоточный файл MEX может иметь неожиданное поведение. Этот предел меняется в зависимости от каждой платформы. Как обходное решение, уменьшайте размер входных сигналов или реструктурируйте функцию MATLAB, чтобы использовать меньше локальной памяти.
dspunfold
не поддерживает:
Ограничения анализатора:
Следующие ограничения применяются к функции анализатора, сгенерированной функцией dspunfold
. Для получения дополнительной информации о функции анализатора см. 'Самодиагностику Анализатор’ в разделе 'More About' dspunfold
.
Если несколько кадров входа анализатора идентичны, анализатор может выдать ложные положительные результаты передачи. Рекомендуется, чтобы вы обеспечили по крайней мере два различных кадра для каждого входа анализатора.
Если алгоритм в функции MATLAB точки входа выбирает свою длину состояния на основе входных значений, анализатор может обеспечить различные результаты pass для различных входных значений. Для примера смотрите, что FIR_Mean
функционирует в том, Почему Анализатор Выбирает Wrong State Length?.
Если вход к функции MATLAB точки входа действительно сразу влияет на вывод, анализатор может выдать ложные положительные результаты pass. Для примера смотрите, что Input_Output
функционирует в том, Почему Анализатор Выбирает Zero State Length?.
Если выходные результаты многопоточного файла MEX и однопоточного файла MEX соответствуют статистически, но не соответствуют численно, анализатор не передает. Рассмотрите функцию FilterNoise
, которая следует, который фильтрует случайный шумовой сигнал с КИХ-фильтром. Вызовы функции randn
из себя, чтобы сгенерировать случайный шум. Следовательно, выходные результаты функции FilterNoise
соответствуют статистически, но не соответствуют численно.
function Output = FilterNoise(x) persistent FIRFilter if isempty(FIRFilter) FIRFilter = dsp.FIRFilter('Numerator',fir1(12,0.4)); end Output = FIRFilter(x+randn(1000,1)); end
на FilterNoise
, инструмент обнаруживает бесконечную длину состояния. Поскольку инструмент не может найти числовое соответствие для длины конечного состояния, он выбирает бесконечную длину состояния.dspunfold FilterNoise -args {randn(1000,1)} -s auto
Analyzing input MATLAB function FilterNoise Creating single-threaded MEX file FilterNoise_st.mexw64 Searching for minimal state length (this might take a while) Checking stateless ... Insufficient Checking 1 ... Insufficient Checking Infinite ... Sufficient Checking 2 ... Insufficient Minimal state length is Inf Creating multi-threaded MEX file FilterNoise_mt.mexw64 Warning: The multi-threading was disabled due to performance considerations. This happens when the state length is greater than or equal to (Threads-1)*Repetition frames (3 frames in this case). > In coder.internal.warning (line 8) In unfoldingEngine/BuildParallelSolution (line 25) In unfoldingEngine/generate (line 207) In dspunfold (line 234) Creating analyzer file FilterNoise_analyzer
Для алгоритма не нужно бесконечное состояние. Длина состояния КИХ-фильтра, следовательно алгоритмом является 12
.
Вызовите dspunfold
с набором длины состояния к 12.
dspunfold FilterNoise -args {randn(1000,1)} -s 12 -f true
Analyzing input MATLAB function FilterNoise Creating single-threaded MEX file FilterNoise_st.mexw64 Creating multi-threaded MEX file FilterNoise_mt.mexw64 Creating analyzer file FilterNoise_analyzer
Запустите функцию анализатора.
FilterNoise_analyzer(randn(1000*4,1))
Analyzing multi-threaded MEX file FilterNoise_mt.mexw64 ... Latency = 8 frames Speedup = 0.5x Warning: The output results of the multi-threaded MEX file FilterNoise_mt.mexw64 do not match the output results of the single-threaded MEX file FilterNoise_st.mexw64. Check that you provided the correct state length value to the dspunfold function when you generated the multi-threaded MEX file FilterNoise_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 FilterNoise_analyzer ans = Latency: 8 Speedup: 0.4970 Pass: 0
Анализатор ищет числовое соответствие и приводит верификацию к сбою, даже при том, что сгенерированный многопоточный файл MEX допустим.
Ограничения ускорения:
Если функция MATLAB точки входа содержит код с низкой сложностью, MATLAB, служебный или многопоточный MEX наверху омрачает любое увеличение производительности. В таких случаях не используйте dspunfold
.
Если количество операций во входной функции MATLAB является маленьким по сравнению с размером данных о вводе или выводе, многопоточный файл MEX не обеспечивает усиления ускорения. Иногда, это может привести к потере ускорения, даже если значение повторения увеличено. В таких случаях не используйте dspunfold
.
Общий
Не отображайте графики, осциллографы, или выполняйте другие операции пользовательского интерфейса из многопоточного файла MEX. Сгенерированный файл MEX может иметь неожиданное поведение.
Не используйте coder.extrinsic
во входной функции MATLAB. Сгенерированный файл MEX может иметь неожиданное поведение.
Когда длина состояния меньше чем или равна (threads – 1
) × кадры repetition:
Не используйте случайное число в функции MATLAB. Выходные параметры однопоточного файла MEX и многопоточного файла MEX не могут соответствовать. Кроме того, выходные параметры последовательного выполнения многопоточного файла MEX не могут соответствовать. Анализатор не может передать числовую верификацию соответствия.
Рекомендуется, чтобы вы сгенерировали случайное число вне функции MATLAB точки входа и передали его в качестве аргумента к функции.
Не используйте глобальные или персистентные переменные нигде кроме в функции MATLAB точки входа. Например, избегайте использования персистентных переменных в подфункциях. Сгенерированный файл MEX может привести к неточным результатам. В целом глобальные переменные не рекомендуются.
Не получайте доступ к ресурсам ввода-вывода из многопоточного файла MEX. Сгенерированный файл MEX может иметь неожиданное поведение. Эти ресурсы включают средства записи файла и читателей, сокеты UDP, и аудиоплееры и устройства записи.
Не используйте функции с интерактивными входными параметрами (например, клавиатура) в многопоточном файле MEX. Сгенерированный файл MEX может иметь неожиданное поведение.
Рабочий процесс
Чтобы сгенерировать допустимый многопоточный файл MEX с необходимым ускорением и задержкой, следуйте за Рабочим процессом для Генерации Многопоточного файла MEX, использующего dspunfold.
Перед использованием dspunfold
вызовите codegen
на функции MATLAB точки входа и убедитесь, что функция генерирует файл MEX успешно.
После генерации многопоточного файла MEX с помощью dspunfold
запустите функцию анализатора. Убедитесь, что анализатор функционирует передачи. Исключение к этому правилу - когда алгоритм приводит к результатам, которые соответствуют статистически, но не численно. В этом исключении функция анализатора не делает pass
, даже при том, что функция dspunfold
генерирует допустимый многопоточный файл MEX. См. 'Ограничения Анализатора' для примера.
Для справки при использовании файла MEX и анализатора, в подсказке команды MATLAB, вводят
и help <mexfile name>
.help <analyzer name>
Длина состояния
Если вы выбираете длину состояния, которая больше, чем или равна значению точной длины состояния, передач анализатора. Если анализатор перестал работать, увеличьте длину состояния, регенерируйте файл MEX и проверьте снова.
Если длина состояния больше, чем 0
, входные параметры, отмеченные как кадры (через опцию -f
), должны все иметь те же размерности.
При генерации файла MEX и выполнении анализатора, используйте входные параметры, которые вызывают ту же длину состояния.
Автоматическое обнаружение длины состояния
Когда вы устанавливаете -s
на auto
:
Если алгоритм в функции MATLAB точки входа выбирает путь выполнения кода на основе входных значений, используйте входные параметры, которые выбирают путь выполнения кода с самой долгой длиной состояния.
Предоставьте случайные входные параметры -args
.
Выберите входные параметры, которые имеют мгновенный эффект на вывод. Смотрите, Почему Анализатор Выбирает Длину Нулевого состояния?.
Анализатор
Убедитесь, что выходные параметры многопоточного файла MEX и однопоточного файла MEX не содержат NaN
или Inf
. Анализатор не может сделать числовых проверок и возвращает pass
как false
. Автоматический инструмент обнаружения длины состояния обнаруживает бесконечную длину состояния и выводит предупреждение
Выходные результаты многопоточного файла MEX не совпадают с выходными результатами однопоточного файла MEX даже для длины состояния Бога. Возможная причина - то, что входная функция MATLAB генерирует различные выходные результаты между последовательными выполнениями даже для тех же входных значений.
Предоставьте нескольким кадрам различные значения для каждого входа анализатора. Чтобы улучшить эффективность анализатора, добавьте последовательные кадры по первому измерению.
Предоставьте входные параметры анализатору, которые приводят к эффективному покрытию кода.
Ускорение
Чтобы улучшить ускорение многопоточного файла MEX, задайте точную длину состояния в выборках. Можно задать длину состояния в выборках путем установки по крайней мере одной записи frameinputs
к true
. Использование выборок уменьшает издержки и увеличивает ускорение.
Чтобы увеличить ускорение за счет большей задержки, вы можете:
Увеличьте фактор повторения. Используйте опцию -r
.
Увеличьте число потоков. Используйте опцию -t
.
Для каждого входа, который может быть разделен на выборки, не изменяя поведение алгоритма, устанавливает состояние кадра на true
с помощью опции -f
. Вход затем рассматривается в выборках, которые могут увеличить ускорение сгенерированного многопоточного файла MEX.
Многопоточный файл MEX буферизует кадры нескольких-входных-сигналов в буфер 2
× threads × кадры repetition, где threads является количеством потоков, и repetition является фактором повторения. Файл MEX обрабатывает эти кадры одновременно, с помощью нескольких ядер. Этот процесс вводит некоторую детерминированную задержку, где latency = 2
× threads × repetition. Задержка обменяна с ускорением, которое вы можете получить путем увеличения числа потоков или фактора повторения.