Сгенерируйте высокоэффективный код SIMD по Intel из алгоритмов MATLAB в DSP System Toolbox

Сгенерировать код 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.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте