中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

选项 -free-vect-analyse-slp-group

说明

SLP矢量化阶段,仅进行reduction chains group的分析以及矢量化。在某些无法自动分析最优方案的情况打开该选项进行矢量化控制。

使用方法

在打开矢量化控制开关-ftree-vectorize的基础上,在选项中加入-ftree-vect-analyze-slp-group

结果

测试用例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
void f(double *a, double *res, double m)
{
    double res1, res0;
    res1 = 0;
    res0 = 0;
    for (int i = 0; i < 1000; i+=8)
    {
        res0 += a[i] * m;
        res1 += a[i+1] * m;
        res0 += a[i+2] * m;
        res1 += a[i+3] * m;
        res0 += a[i+4] * m;
        res1 += a[i+5] * m;
        res0 += a[i+6] * m;
        res1 += a[i+7] * m;
    }
    
    res[0] += res0;
    res[1] += res1;
}

测试命令:

1
gcc -O2 -ftree-vectorize -funsafe-math-optimizations -fno-tree-reassoc -ftree-vect-analyze-slp-group -S a.c -o a.s
图1 选项未打开
图2 选项已打开

观察到该测试用例在选项未打开时和打开后,生成的相关代码有明显差别,打开后可成功矢量化。