Генерирует многопоточный файл MEX от функции MATLAB
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, входят, помогают
и <mexfile name>
помогите
.<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. Задержка обменяна с ускорением, которое вы можете получить путем увеличения числа потоков или фактора повторения.