Генерирует многопоточный файл 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-кодированный файл |
Первая размерность входов анализатора должен быть кратным первой размерности соответствующих входов, заданных Анализатор наследует |
|
Файл справки для функции самодиагностического анализатора | Файл MATLAB | Файл справки для функции самодиагностического анализатора. Файл справки имеет то же имя что и файл MEX, но с расширением '.m'. Чтобы вызвать файл справки, введите В файле справки для функции самодиагностического анализатора отображается информация о том, как вызвать функцию анализатора, ее синтаксис и типы (размер, класс и сложность) входов для функции анализатора. Синтаксис для вызова функции анализатора должен совпадать с синтаксисом, показанным в файле справки. |
|
Общие ограничения:
В Windows и Linux необходимо использовать компилятор, поддерживающий интерфейс приложения Open Multiprocessing (OpenMP). См. «Поддерживаемые компиляторы».
Если входная функция MATLAB имеет ошибки во время выполнения, ошибки не получаются, когда вы запускаете многопоточный файл MEX. Прежде чем вы используете dspunfold
функция, вызов codegen
в функции MATLAB и убедитесь, что файл MEX сгенерирован успешно.
Если сгенерированный код использует большой объем памяти для хранения локальных переменных, вокруг 4
MB
на платформе Windows сгенерированный многопоточный файл MEX может иметь неожиданное поведение. Этот предел изменяется для каждой платформы. В качестве обходного пути уменьшите размер входных сигналов или реструктурируйте функцию MATLAB, чтобы использовать меньше локальной памяти.
dspunfold
не поддерживает:
Ограничения анализатора:
Следующие ограничения применяются к функции анализатора, сгенерированной dspunfold
функция. Для получения дополнительной информации о функции анализатора см. 'Self-Diagnostic Analyzer "в разделе' More About '. dspunfold
.
Если несколько кадров входных систем координат анализатора идентичны, анализатор может выдать ложноположительные результаты. Рекомендуется, чтобы вы предоставили по крайней мере две различные системы координат для каждого входа анализатора.
Если алгоритм в функции MATLAB точки входа выбирает свою длину состояния на основе входных значений, анализатор может предоставить различные результаты pass для различных входных значений. Для получения примера см. FIR_Mean
функция в разделе «Почему анализатор выбирает неправильную длину состояния?».
Если вход в функцию MATLAB точки входа влияет на выход немедленно, анализатор может выдать ложноположительные результаты pass. Для получения примера см. Input_Output
функция в разделе «Почему анализатор выбирает нулевую длину состояния?».
Если выходные результаты многопоточного файла 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>
помогают
.<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
× <reservedrangesplaceholder1> × <reservedrangesplaceholder0>. Задержка сходится со скоростью, которую вы можете получить, увеличивая количество потоков или коэффициент повторения.