Сгенерировать код SIMD из MATLAB® Системные объекты, создайте a coder.config
Объект (MATLAB Coder), набор CodeReplacementLibrary
свойство к 'DSP Intel AVX2-FMA (Windows)'
, 'DSP Intel AVX2-FMA (Linux)'
, или 'DSP Intel AVX2-FMA (Mac)'
, и используйте объект с codegen
(MATLAB Coder) команда.
Этот рабочий процесс требует, чтобы вы установили 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'; switch computer('arch') case 'glnxa64' codegen firsingle -config cfg -report -o firsingle_std case 'win64' codegen firsingle -config cfg -report -o firsingle_std.exe case 'maci64' codegen firsingle -config cfg -report -o firsingle_std end
Измерьте время, оно исполняется сгенерированный исполняемый файл.
tic;
system('firsingle_std');
tplain = toc
tplain = 1.1700
Сгенерируйте исполняемый файл кода С AVX2 путем установки CodeReplacementLibrary
параметр к любому 'DSP Intel AVX2-FMA (Windows)'
, 'DSP Intel AVX2-FMA (Linux)'
, или 'DSP Intel AVX2-FMA (Mac)'
, и вызов codegen
команда на coder.config
объект.
cfg = coder.config('exe'); switch computer('arch') case 'glnxa64' cfg.CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Linux)'; case 'win64' cfg.CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Windows)'; case 'maci64' cfg.CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Mac)'; end cfg.GenerateExampleMain = 'GenerateCodeAndCompile'; % provides starter main.c switch computer('arch') case 'glnxa64' codegen firsingle -config cfg -report -o firsingle_avx2 case 'win64' codegen firsingle -config cfg -report -o firsingle_avx2.exe case 'maci64' codegen firsingle -config cfg -report -o firsingle_avx2 end
Измерьте время, оно исполняется сгенерированный исполняемый файл.
tic;
system('firsingle_avx2');
tavx2 = toc
tavx2 = 0.2611
Сгенерированный код SIMD вокруг 4.5x быстрее по сравнению с простым кодом С на Windows® 10 машин.
tplain/tavx2
ans = 4.4815
Можно также сгенерировать статическую библиотеку и динамическую библиотеку путем определения типа сборки как 'lib'
и 'dll'
, соответственно.
cfg = coder.config('lib'); cfg.CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Windows)'; codegen MATLABfunctionName -config cfg
cfg = coder.config('dll'); cfg.CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Windows)'; codegen MATLABfunctionName -config cfg
MATLABfunctionName
функция MATLAB, которая вызывает Системный объект, от которого вы пытаетесь сгенерировать код SIMD. Для списка Системных объектов, которые поддерживают генерацию кода SIMD, смотрите Системные объекты в DSP System Toolbox та Поддержка Генерация кода SIMD.