生成高性能SIMD代码英特尔从MATLAB算法DSP系统工具箱
从MATLAB中生成SIMD代码®系统对象,创建一个coder.config
(MATLAB编码器)对象,设置CodeReplacementLibrary
财产'DSP Intel AVX2-FMA (Windows)'
,'DSP Intel AVX2-FMA (Linux)'
,或'DSP Intel AVX2-FMA (Mac)'
,并将对象与codegen
(MATLAB编码器)命令。
此工作流程要求您进行安装MATLAB编码器™和嵌入式编码®在您的机器上。
考虑这个MATLAB函数,该函数使用dsp。FIRFilter
系统对象™。
函数y = firsingle ()持续的冷杉如果Isempty (fir) b = fir1(250,.4);冷杉= dsp.FIRFilter (b);结束frameSize = 512;numChannels = 8;numFrames = 1 e3;为k = 1:numFrames x = randn(frameSize,numChannels,“单一”);y =冷杉(x);结束
方法生成此函数的纯C代码可执行文件codegen
命令。
cfg = coder.config (exe”);%提供启动器主cfg。GenerateExampleMain =“GenerateCodeAndCompile”;开关计算机(“拱”)情况下“glnxa64”codegenfirsingle配置cfg报告- ofirsingle_std情况下“win64”codegenfirsingle配置cfg报告- ofirsingle_std.exe情况下“maci64”codegenfirsingle配置cfg报告- ofirsingle_std结束
测量运行生成的可执行文件所需的时间。
抽搐;系统(“firsingle_std”);tplain = toc
tplain = 1.1700
生成可执行的AVX2 C代码CodeReplacementLibrary
参数是'DSP Intel AVX2-FMA (Windows)'
,'DSP Intel AVX2-FMA (Linux)'
,或'DSP Intel AVX2-FMA (Mac)'
,并致电codegen
命令的coder.config
对象。
cfg = coder.config (exe”);开关计算机(“拱”)情况下“glnxa64”cfg。CodeReplacementLibrary ='DSP Intel AVX2-FMA (Linux)';情况下“win64”cfg。CodeReplacementLibrary ='DSP Intel AVX2-FMA (Windows)';情况下“maci64”cfg。CodeReplacementLibrary ='DSP Intel AVX2-FMA (Mac)';结束cfg。GenerateExampleMain =“GenerateCodeAndCompile”;%提供启动器主开关计算机(“拱”)情况下“glnxa64”codegenfirsingle配置cfg报告- ofirsingle_avx2情况下“win64”codegenfirsingle配置cfg报告- ofirsingle_avx2.exe情况下“maci64”codegenfirsingle配置cfg报告- ofirsingle_avx2结束
测量运行生成的可执行文件所需的时间。
抽搐;系统(“firsingle_avx2”);tavx2 = toc
tavx2 = 0.2611
生成的SIMD代码比Windows上的纯C代码快4.5倍左右®10台机器。
tplain / tavx2
ans = 4.4815
您还可以通过指定构建类型为来生成静态库和动态库“自由”
而且“dll”
,分别。
cfg = coder.config(“自由”);cfg。CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Windows)';codegenMATLABfunctionName配置cfg
cfg = coder.config (dll);cfg。CodeReplacementLibrary = 'DSP Intel AVX2-FMA (Windows)';codegenMATLABfunctionName配置cfg
MATLABfunctionName
是一个MATLAB函数,它调用您试图从中生成SIMD代码的System对象。有关支持SIMD代码生成的系统对象列表,请参见DSP系统工具箱中支持SIMD代码生成的系统对象.