dspunfold
отличается от parfor
? dspunfold
и функции parfor
ускоряют алгоритмы MATLAB® посредством распараллеливания. Каждая функция имеет свои собственные преимущества и недостатки.
Когда вы используете parfor
в функции MATLAB точки входа и вызываете codegen
на этой функции, сгенерированный файл MEX многопоточен. Для получения дополнительной информации смотрите, что Ускорение алгоритма Использует Параллельные циклы for (parfor) (MATLAB Coder). Однако parfor
не идеален для алгоритмов ЦОС. Причина, являющаяся этим алгоритмы ЦОС, включает состояния.
Большинство алгоритмов в DSP System Toolbox™ содержит потоковые данные и состояния. Состояния в MATLAB моделируются с помощью персистентных переменных. Поскольку parfor
не поддерживает персистентные переменные, вы не можете смоделировать состояния с помощью циклов parfor
. Смотрите Глобальные или Персистентные Объявления в цикле parfor (MATLAB Coder). Кроме того, у вас не может быть зависимости по данным через циклы parfor
. Следовательно, вы не можете поддержать информацию состояния через эти циклы. Смотрите Если не, чтобы Использовать циклы parfor (MATLAB Coder). dspunfold
преодолевает эти ограничения путем поддержки персистентных переменных.
dspunfold
вводит задержкуЕсли ваше приложение не терпит задержку, используйте parfor
вместо этого. parfor
не вводит задержку. Задержка является количеством входных кадров, обработанных прежде, чем сгенерировать первый выходной кадр.
parfor
требует значительной реструктуризации в кодеparfor
требует, чтобы вы реструктурировали свой алгоритм, чтобы иметь подобную циклу структуру, которая является независимой итерацией. Из-за семантических ограничений parfor
, заменяя for
- цикл с parfor
- цикл часто требует значительного рефакторинга кода. dspunfold
не требует, чтобы вы реструктурировали свой код.
parfor
, используемый с dspunfold
Когда вы вызываете dspunfold
на функции MATLAB точки входа, которая содержит parfor
, многопоточность parfor
отключена. dspunfold
вызывает codegen
с набором опции –O
к disable:openmp
. С этим набором опции циклы parfor
обработаны как for
- циклы. Поведение многопоточности сгенерированного файла MEX должно полностью к dspunfold
.