生成SIMD代码从金宝app块
您可以生成单指令多数据(SIMD)代码从特定的仿真软件金宝app®块使用英特尔®上交所和,如果你有嵌入式编码器®,英特尔AVX技术。SIMD计算范式中,一个单一的指令处理多个数据。许多现代处理器SIMD指令,例如,执行几个补充或者乘法。对于计算密集型操作支持块,SIMD intrinsic可以显著提高在英特尔平台上生成的代金宝app码的性能。
支持SIMD代码生成的块金宝app
在满足特定的条件下,可以生成SIMD代码通过使用英特尔SSE或英特尔AVX技术。此表列出了支持SIMD代码生成的块。金宝app桌上还详细的条件支持。金宝app
块 | 条件 |
---|---|
添加 |
|
减去 |
|
元素的总和 |
|
产品 |
|
产品的元素 |
|
获得 |
|
分 | 输入信号的数据类型单 或双 。 |
√6 | 输入信号的数据类型单 或双 。 |
装天花板 |
|
地板上 |
|
极大极小 |
|
极大极小的元素 |
|
MATLAB函数 | MATLAB代码符合这一主题中指定的条件:为MATLAB生成SIMD代码功能。 |
为每个子系统 |
|
按位运算符 |
|
移位运算 |
|
如果你有DSP系统工具箱™,你还可以从某些DSP系统工具箱生成SIMD代码块。有关更多信息,请参见金宝app仿真软件在DSP系统工具箱支持SIMD代码生成金宝app(DSP系统工具箱)。
如果你有嵌入式编码支持包的手臂金宝app®皮质®——一个处理器,您可以生成SIMD代码优化手臂皮层通过设置一个处理器代码替换库参数GCC手臂Cortex-A
。您还需要设置设备供应商参数手臂兼容
和设备类型参数手臂Cortex-A
。
生成SIMD代码相比,普通的C代码
对于这个示例,创建一个简单的模型simdDemo
有一个减去块和一个分块。的减去块有一个输入信号的维数为240,输入的数据类型单
。的分块有一个输入信号的维数为140,输入的数据类型双
。
平原为这个模型生成C代码是:
空白simdDemo_step (void) {int32_T我;(我= 0;我< 240;我+ +){simdDemo_Y。着干活[我]= simdDemo_U。In1[我]——simdDemo_U.In2[我];}(i = 0;我< 140;我+ +){simdDemo_Y。Out2[我]= simdDemo_U。In3[i] / simdDemo_U.In4[i]; } }
生成SIMD代码:
打开金宝app仿真软件编码器™应用程序或嵌入式编码器的应用。
点击设置>硬件实现。
设置设备供应商参数
英特尔
或AMD
。设置设备类型参数
Windows x86 - 64 (64)
或Linux x86 - 64 (64)
。在优化窗格中,为利用目标硬件指令集扩展参数,选择您的处理器的指令集扩展的支持。金宝app例如,选择
SSE2
。如果你使用嵌入式程序员,您也可以选择从指令集上交所
,SSE4.1
,AVX
,AVX2
,菲利普-马萨
,AVX512F
。有关更多信息,请参见https://www.intel.com/content/www/us/en/金宝appsupport/articles/000005779/processors.html。可选地,选择优化减少减少操作的参数生成SIMD代码。
从模型中生成代码。
空白simdDemo_step (void) {int32_T我;(我= 0;< = 236;我+ = 4){_mm_storeu_ps (&simdDemo_Y。着干活[我],_mm_sub_ps (_mm_loadu_ps (&simdDemo_U.In1[我]),_mm_loadu_ps (&simdDemo_U.In2[我])));}(i = 0;< = 138;我+ = 2){_mm_storeu_pd (&simdDemo_Y。Out2[我],_mm_div_pd (_mm_loadu_pd (&simdDemo_U.In3[我]),_mm_loadu_pd (&simdDemo_U.In4[我])));}}
这段代码的SSE2
指令集扩展。SIMD指令的内在功能标识符开始_mm
。这些函数过程的多个数据在一个迭代循环,因为循环增量由四个单一数据类型和由两个双数据类型。模型处理更多的数据和计算比这个更密集,SIMD指令的存在可以显著加快代码的执行时间。
为支持英特尔的内在功能仿真软件模块列表,明白了金宝app金宝apphttps://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html。
限制
生成的代码并不是通过SIMD如果优化:
的代码MATLAB函数块包含标量数据类型在体外循环。例如,如果
a、b
,c
是标量,生成的代码不优化等操作c = a + b
。的代码MATLAB函数块包含间接索引数组或矩阵。例如,如果
A, B, C
,D
是向量,生成的代码不是矢量化等操作D (A) = C (A) + B (A)
。块在一个可重用的子系统可能不是优化。
如果代码中MATLAB函数块包含并行for循环(
parfor
),parfor
循环并不与SIMD代码优化,但身体内循环parfor
循环可以用SIMD代码优化。Polyspace®不支持分析生成的代金宝app码,包括SIMD指令。禁用SIMD代码生成通过设置利用目标硬件指令集扩展参数
没有一个
。减少操作,操作浮点值时支持启用非限定的数量。金宝app为减少生成SIMD代码操作,操作浮点值,设置配置参数金宝app支持:非谓语形式的数字来
从
。
相关的话题
- 为MATLAB生成SIMD代码功能
- 从模型生成高性能在英特尔SIMD代码块DSP系统工具箱金宝app(DSP系统工具箱)
- 从MATLAB生成高性能SIMD代码英特尔算法在DSP系统工具箱(DSP系统工具箱)