我正在尝试做的是使用这个C代码并使用一种称为循环展开的技术对其进行优化,但在这种情况下,我想使用四向循环展开.现在,我理解了这项技术,并且我理解了我不知道如何将其应用于此代码的概念.我是否需要添加一些额外的变量?在每个循环之后或者只是在所有循环结束时,我是否必须有一些代码?此代码是8x8块代码,用于处理像素并逆时针旋转90度.任何帮助将不胜感激.谢谢.
/*
* rotate8 - rotate with 8x8 blocking
*/
char rotate8_descr[] = "rotate8: rotate with 8x8 blocking";
void rotate8(int dim, pixel *src, pixel *dst)
{
int i, j, ii, jj;
for(ii = 0; ii < dim; ii += 8)
for(jj = 0; jj < dim; jj += 8)
for (i = ii; i < ii + 8; i++)
for (j = jj; j < jj + 8; j++)
dst[RIDX(dim-1-j, i, dim)] = src[RIDX(i, j, dim)];
}
Run Code Online (Sandbox Code Playgroud)
您可以使用8行显式代码替换内部循环
dst[RIDX(dim-1-jj, i, dim)] = src[RIDX(i, jj, dim)];
dst[RIDX(dim-1-(jj+1), i, dim)] = src[RIDX(i, (jj+1), dim)];
...
dst[RIDX(dim-1-(jj+7), i, dim)] = src[RIDX(i, (jj+7), dim)];
Run Code Online (Sandbox Code Playgroud)
所以你要通过为每个值显式写一行代替循环变量.
现在你可以重复下一个循环的8个值,你将有8 x 8行代码,依此类推.
除了理解练习之外,这对我来说似乎毫无意义,编译器非常有效地完成这些工作,他们会在合理的地方进行优化.手动滚动很少产生最佳代码.