opencv CV_ENABLE_UNROLLED这个功能有什么作用?

时间:2014-03-12 00:41:37

标签: c++ opencv

我在OpenCV中看到它在许多地方使用#if CV_ENABLE_UNROLLED。例如

#if CV_ENABLE_UNROLLED
for( ; i <= width - 4; i += 4 )
{
    ST f = ky[0];
    const ST* S = (const ST*)src[0] + i, *S2;
    ST s0 = f*S[0] + _delta, s1 = f*S[1] + _delta,
        s2 = f*S[2] + _delta, s3 = f*S[3] + _delta;

    for( k = 1; k <= ksize2; k++ )
    {
        S = (const ST*)src[k] + i;
        S2 = (const ST*)src[-k] + i;
        f = ky[k];
        s0 += f*(S[0] + S2[0]);
        s1 += f*(S[1] + S2[1]);
        s2 += f*(S[2] + S2[2]);
        s3 += f*(S[3] + S2[3]);
    }

    D[i] = castOp(s0); D[i+1] = castOp(s1);
    D[i+2] = castOp(s2); D[i+3] = castOp(s3);
}
#endif
filter.cpp

中的

此功能是否比在循环中执行4次浮点运算具有任何其他优势意味着更少的条件检查次数?如果是,那么它是什么。如果没有那么当把它放在宏中时,为什么我们不能一直使用它?

1 个答案:

答案 0 :(得分:1)

来自OpenCV's revisions

  

CV_ENABLE_UNROLLED (??默认值)默认值) - 实验功能,可激活一些4或8次展开循环。它理论上有助于编译器优化代码,并改善内存访问。但是,代码中此功能的覆盖范围仍然非常有限。