Чтобы сгенерировать SIMD код из MATLAB® Системные объекты, создайте coder.config
(MATLAB Coder), установите CodeReplacementLibrary
свойство к 'Intel AVX (Windows)'
или 'Intel AVX (Linux)'
, и использовать его с 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'; 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 = toc
tplain = 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 = toc
tavx2 = 0.3909
Сгенерированный SIMD-код примерно в 3,3 раза быстрее по сравнению с простым кодом С в 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 System Toolbox, которые Поддержка генерацию кода SIMD.