3 回答
TA贡献1825条经验 获得超4个赞
它有一个和两个循环版本之间最大的差异(几乎是三倍)。 这是唯一的一点,其中单循环(即连续分配)超过了两个循环版本。(这使得神秘的答案成为可能。)
提案
TA贡献1858条经验 获得超8个赞
n
for(int j=0;j<n;j++){ a[j] += b[j];}for(int j=0;j<n;j++){ c[j] += d[j];}
a
b
c
d
for(int j=0;j<n;j++){ a[j] += b[j]; c[j] += d[j];}
n = 2
带着 for(int j=0;j<n;j++){ a[j] += b[j];}for(int j=0;j<n;j++){ c[j] += d[j];}
高速缓存 a[0]
和 a[1]
然后 b[0]
和 b[1]
并设定 a[0] = a[0] + b[0]
在缓存中-缓存中现在有四个字节, a[0], a[1]
和 b[0], b[1]
..费用=100+100。 集 a[1] = a[1] + b[1]
在缓存中。费用=1+1。 重复 c
和 d
.总费用= (100 + 100 + 1 + 1) * 2 = 404
带着 for(int j=0;j<n;j++){ a[j] += b[j]; c[j] += d[j];}
高速缓存 a[0]
和 a[1]
然后 b[0]
和 b[1]
并设定 a[0] = a[0] + b[0]
在缓存中-缓存中现在有四个字节, a[0], a[1]
和 b[0], b[1]
..费用=100+100。 弹出 a[0], a[1], b[0], b[1]
从缓存和缓存 c[0]
和 c[1]
然后 d[0]
和 d[1]
并设定 c[0] = c[0] + d[0]
在缓存中。费用=100+100。 我怀疑你开始看到我要去哪里了。 总费用= (100 + 100 + 100 + 100) * 2 = 800
- 3 回答
- 0 关注
- 542 浏览
添加回答
举报