ZHCUAU3J January 2018 – March 2024
可以使用 --auto_stream 选项指示编译器自动使用流引擎 (SE) 和/或流地址生成器 (SA)。这种行为可以通过 --auto_stream 选项的以下设置来控制:
C7100 和 C7120 器件仅支持“off”和“no_saving”模式。使用 --auto_stream=no_saving 选项手动启用优化。这些器件不支持 SE 或 SA 上下文切换,因此默认情况下 --auto_stream=off。
较新的器件(例如 C7504)支持所有三种模式,并且 --auto_stream=saving 是默认设置。
启用 --auto_stream 后,内存访问在嵌套循环中转换,这些循环具有适合 SE 或 SA 配置模板的寻址模式。例如,假设您有以下代码:
void example1(char *in, char *restrict out, int len1, int len2)
{
for (int i = 0; i < len1; i++)
for (int j = 0; j < len2; j++)
out[i*len1 + j] = in[i*len1 + j];
}
启用 --auto_stream 后,此代码在矢量化后转换为相当于 C7504 器件上的以下 SE 配置:
__SE_TEMPLATE_v1 tmplt = __gen_SE_TEMPLATE_v1();
tmplt.ICNT0 = 32;
tmplt.ICNT1 = (len2>>5)+((len2&0x1f) != 0);
tmplt.DIM1 = 32;
tmplt.ICNT2 = len1;
tmplt.DIM2 = len1;
tmplt.VECLEN = __SE_VECLEN_32ELEMS;
tmplt.DIMFMT = __SE_DIMFMT_3D;
有关如何对流编程的详细信息,请参阅节 4.15.6。