Создание многопоточного файла MEX из функции MATLAB
dspunfold генерирует многопоточный файл MEX из исходной функции MATLAB ®, указанной filefile, используя технологию развертывания. Развертка - это метод повышения пропускной способности за счет распараллеливания. Многопоточный файл 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 функция. Дополнительные сведения о функции анализатора см. в разделе «Самодиагностический анализатор» раздела «Подробнее» dspunfold.
Если несколько кадров входного сигнала анализатора идентичны, анализатор может выдать ложноположительные результаты. Рекомендуется предоставить не менее двух различных кадров для каждого входа анализатора.
Если алгоритм в функции MATLAB начальной точки выбирает свою длину состояния на основе входных значений, анализатор может предоставить различные результаты прохождения для различных входных значений. Пример см. в разделе FIR_Mean функция в разделе Почему анализатор выбирает неправильную длину состояния?.
Если вход в функцию MATLAB точки входа немедленно повлияет на выход, анализатор может выдать ложноположительные результаты. Пример см. в разделе 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
Алгоритм не нуждается в бесконечном состоянии. Длина состояния фильтра FIR, поэтому алгоритм равен 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 может иметь неожиданное поведение.
Если длина состояния меньше или равна (потоки – 1) × кадры повторения:
Не используйте случайное число в функции 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 даже для длины состояния Infinite. Возможной причиной является то, что входная функция MATLAB генерирует различные выходные результаты между последовательными прогонами даже для одних и тех же входных значений.
Предоставьте несколько кадров с различными значениями для каждого входа анализатора. Чтобы повысить эффективность анализатора, добавьте последовательные кадры вдоль первого размера.
Предоставьте входы анализатору, что приведет к эффективному покрытию кода.
Быстрее
Для повышения быстродействия многопоточного файла MEX укажите точную длину состояния в образцах. Можно указать длину состояния в образцах, задав хотя бы одну запись frameinputs кому true. Использование образцов уменьшает накладные расходы и увеличивает скорость.
Чтобы увеличить скорость за счет большей задержки, можно:
Увеличьте коэффициент повторения. Используйте -r вариант.
Увеличение числа потоков. Используйте -t вариант.
Для каждого входа, который можно разделить на выборки без изменения поведения алгоритма, установите состояние кадра в true с использованием -f вариант. Затем входные данные рассматриваются в образцах, что может увеличить скорость генерируемого многопоточного MEX-файла.
Многопоточный файл MEX буферизирует кадры сигналов с множеством входов в буфер 2 × threads × кадры повторения, где потоки - количество потоков, а повторение - коэффициент повторения. MEX-файл обрабатывает эти кадры одновременно, используя несколько ядер. Этот процесс вводит некоторую детерминированную задержку, где задержка = 2 × threads × повторение. Задержка торгуется с ускорением, которое вы можете получить, увеличив количество потоков или коэффициент повторения.