【发布时间】:2013-07-21 15:53:56
【问题描述】:
我正在尝试使用 GCC >= 4.4 中可用的石墨循环优化框架,但如果迭代次数未知,我似乎无法让它应用任何转换。 例如。本示例代码:
int __attribute__((hot))
f(double * restrict a, double *restrict b, double *restrict c, const int n)
{
for (int i = 0; i < n; i++) {
c[i] = a[i] + b[i*2];
}
}
如果编译 gcc 4.7(启用石墨/cloog):
gcc -floop-strip-mine -O2 -c -std=c99 file.c
没有进行露天开采。
但是,如果我将迭代次数设为常数(例如 100),它将按照宣传的方式进行条带挖掘。
我尝试提示它迭代计数很高(断言(n > 1000),__builtin_expect(n,1000)),但这没有帮助。 使用个人资料信息的简短实验也无济于事。
所以我的问题是,gcc 可以对未知的迭代次数进行条带挖掘吗?
【问题讨论】:
-
我现在用 gcc-4.8 试了一下,它按预期工作,可能只是 gcc-4.7 没有按预期工作。