LAB4
1. Naive_rotate
1.1 原始代码分析
!"!"#
$
!%
&'((#
%&%'%((#
)*+, -%!!#)*+, !%!#
.
一开始一直不明白 )*+, 是啥意思,后来在头文件 / 中找到了宏定义:
01)*+, !%!# # #( %##
那么这段代码就很容易理解了。可以理解为一幅画的旋转,它将将所有的像素进行行
列调位、导致整幅图画进行了 2& 度旋转。
然而由于这串代码的步长过长,以至于 的命中率非常低,所以总体运算效率不
高。因此,我们考虑到 的大小,应在存储的时候进行 34 个像素依次存储(列存储)。
(34 个像素排列是为了充分利用一级缓存 3456#!采用分块策略!每一个块大小为 34)
这样可以做到 友好、可以大幅度提高效率。
1.2 优化尝试 1
首先,我考虑分块的方式,进行优化。将整个程序分成 77 的小块,提高空间局部性
89:;<
!"!"#
$
!%!-!%-
-&-'-(7#
%-&%-'%-(7#
-'-(7((#
%%-%'%-(7%((#
)*+, -%!!#)*+, !%!#
-&-'-(34#