gpt4 book ai didi

gcc - 禁用 GCC 中特定循环的展开

转载 作者:行者123 更新时间:2023-12-02 03:28:46 24 4
gpt4 key购买 nike

我有以下 4x4 矩阵向量乘法代码:

double const __restrict__ a[16];
double const __restrict__ x[4];
double __restrict__ y[4];

//#pragma GCC unroll 1 - does not work either
#pragma GCC nounroll
for ( int j = 0; j < 4; ++j )
{
double const* __restrict__ aj = a + j * 4;
double const xj = x[j];

#pragma GCC ivdep
for ( int i = 0; i < 4; ++i )
{
y[i] += aj[i] * xj;
}
}

我使用-O3 -mavx标志进行编译。内部循环是矢量化的(单个 FMAD)。但是,gcc (7.2) 会不断展开外循环 4 次,除非我使用 -O2 或更低的优化。

有没有办法覆盖特定循环的-O3展开?

注意。如果我使用 Intel icc,类似的 #pragma nounroll 也可以工作。

最佳答案

根据文档,如果您这样放置,#pragma GCC unroll 1 应该可以工作。如果没有,那么您应该提交错误报告。

或者,我认为您可以使用函数属性来设置优化:

void myfn () __attribute__((optimize("no-unroll-loops")));

关于gcc - 禁用 GCC 中特定循环的展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com