opencv CV_ENABLE_UNROLLED这个特性是做什么的
opencv CV_ENABLE_UNROLLED what does this feature do?
我在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
in filter.cpp
这个特性比在循环中做4个浮点操作意味着更少的条件检查次数有任何其他好处吗?如果是,那是什么?如果没有,那么当把它放在宏中,为什么我们不能总是使用它?
来自OpenCV的修订:
CV_ENABLE_UNROLLED
(??-实验特性,激活一些4或8次展开循环。理论上,它可以帮助编译器优化代码,并改善内存访问。然而,该特性在代码中的覆盖范围仍然非常有限。
相关文章:
- cv::Normalise() 中的 L2_NORM 和 NORM_MINMAX 实现有什么区别?
- OpenCv,将 4x4 cv::Mat 乘以 cv::P oint3f 的最佳方法是什么
- typeid 运算符忽略 cv 限定符背后的理由是什么?
- cv::absdiff() 使用什么方法/算法
- 在OpenCV中,std::vector而不是cv::Mat的"type"是什么解释,我该如何更改它?(C++)
- 对于opencv-minMaxLoc,cv::mask应该是什么样子
- 创建一个cv::Mat的小列表并对其进行迭代的正确方法是什么
- 这个代码是什么意思 std::vector<cv::P oint2f> points[2]
- 将 cv::Mat 向量复制到浮点数向量的最佳方法是什么?
- 'weight'参数在 Open CV 对象检测中的含义是什么
- cv::TermCriteria() 在 OpenCV 中到底做了什么
- cv::标量类型是什么意思
- 如果 a 是 cv::Mat 和 cv::Mat b=a.row(1),那么两个 cv::Mat 实例有什么区别
- 在不同的进程之间传输cv::Mat对象的最佳方式是什么
- 什么是cv::setTo函数
- cv::meanShift函数包含什么
- 当cv::minMaxLoc返回点(-1,-1)作为最小和最大位置时,这意味着什么?
- 分配cv::Mat对象的最通用方法是什么?
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- "cv-unqualified" C++是什么意思?