Для создания SIMD-кода из системных объектов MATLAB ® создайте coder.config (Кодер MATLAB), установите CodeReplacementLibrary свойство для 'Intel AVX (Windows)' или 'Intel AVX (Linux)'и использовать его с codegen (Кодер MATLAB).
Этот рабочий процесс требует установки MATLAB Coder™ и Embedded Coder ® на компьютере.
Рассмотрим эту функцию MATLAB, которая фильтрует случайный многоканальный сигнал с помощью dsp.FIRFilter object™ системы.
function y = firsingle() persistent fir if isempty(fir) b = fir1(250,.4); fir = dsp.FIRFilter(b); end frameSize = 512; numChannels = 8; numFrames = 1e3; for k = 1:numFrames x = randn(frameSize,numChannels,'single'); y = fir(x); end
Создать исполняемый код С этой функции с помощью codegen команда.
cfg=coder.config('exe'); % provides starter main.c cfg.GenerateExampleMain='GenerateCodeAndCompile'; if isunix codegen firsingle -config cfg -report -o firsingle_std elseif ispc codegen firsingle -config cfg -report -o firsingle_std.exe end
Измерьте время, необходимое для запуска созданного исполняемого файла.
tic;
system('firsingle_std');
tplain = toctplain = 1.2742
Создайте исполняемый код AVX2 C, установив CodeReplacementLibrary параметр для 'Intel AVX (Windows)' или 'Intel AVX (Linux)'и вызов codegen команды на панели coder.config объект.
cfg=coder.config('exe'); if isunix cfg.CodeReplacementLibrary = 'Intel AVX (Linux)'; elseif ispc cfg.CodeReplacementLibrary = 'Intel AVX (Windows)'; end % provides starter main.c cfg.GenerateExampleMain='GenerateCodeAndCompile'; if isunix codegen firsingle -config cfg -report -o firsingle_avx2 elseif ispc codegen firsingle -config cfg -report -o firsingle_avx2.exe end
Измерьте время, необходимое для запуска созданного исполняемого файла.
tic;
system('firsingle_avx2');
tavx2 = toctavx2 = 0.3909
Генерируемый SIMD-код в 3,3 раза быстрее, чем обычный код C на компьютере с ОС Windows ® 10.
Можно также создать статическую библиотеку и динамическую библиотеку, указав тип сборки как 'lib' и 'dll'соответственно.
cfg=coder.config('lib'); cfg.CodeReplacementLibrary='Intel AVX (Windows)'; codegen {FunctionName.m} -config cfg
cfg=coder.config('dll'); cfg.CodeReplacementLibrary='Intel AVX (Windows)'; codegen {FunctionName.m} -config cfg
FunctionName.m - функция MATLAB, вызывающая системный объект, из которого создается код SIMD. Список системных объектов, поддерживающих создание кода SIMD, см. в разделе Системные объекты в панели системных инструментов DSP, поддерживающих создание кода SIMD.