【发布时间】:2012-05-16 12:19:50
【问题描述】:
for (int i = 0; i < 5000; i++)
for (int j = 0; j < 5000; j++)
{
for (int ii = 0; ii < 20; ii++)
for (int jj = 0; jj < 20; jj++)
{
int num = matBigger[i+ii][j+jj];
// Extract range from this.
int low = num & 0xff;
int high = num >> 8;
if (low < matSmaller[ii][jj] && matSmaller[ii][jj] > high)
// match found
}
}
机器是 x86_64,32kb L1 cahce,256 Kb L2 缓存。
关于如何优化此代码的任何指示?
编辑原始问题的一些背景:Fastest way to Find a m x n submatrix in M X N matrix
【问题讨论】:
-
您可以尝试展开内部循环。
-
我认为优化这段代码是不可能的,除非重新考虑整个算法以减少循环次数。这段代码应该做什么?
-
选择不同的数据结构!
-
代码试图在一个更大的矩阵中找到一个更小的矩阵。有一些限制,看我之前的问题stackoverflow.com/questions/10529278/…
-
如果您尝试模糊template matching,如果您在频域中执行此操作或通过提前停止(或小波变换的比例/低通部分)。但这一切都取决于您的匹配标准和上下文。
标签: c++ optimization loops