一级缓存与二级缓存的差距能有这么大?

muyi66 2012-04-19 02:20:38
看看下面两段目标码。功能相同,代码也非常相似。但是在E7500上的执行时间,第二个竟然是第一个的5-6倍!

第一段:

00FB15A0 mov ebx,dword ptr [ebp-41Ch]
do
{
sum = *ptr++;
00FB15A6 mov eax,dword ptr [esi]
tmp[cnt[(sum >> bit) & 0xFF]++] = sum;
00FB15A8 mov ecx,ebx
00FB15AA mov ebx,dword ptr [ebp-418h]
00FB15B0 mov edx,eax
00FB15B2 sar edx,cl
00FB15B4 add esi,4
00FB15B7 and edx,0FFh
00FB15BD lea ecx,[ebp+edx*4-40Ch]
00FB15C4 mov edx,dword ptr [ecx]
00FB15C6 mov dword ptr [ebx+edx*4],eax
00FB15C9 inc edx
}
while(--idx != 0);
00FB15CA dec edi
00FB15CB mov dword ptr [ecx],edx
00FB15CD jne rsort<int>+150h (0FB15A0h)


第二段:

do
{
sum = *ptr++;
001E1528 mov eax,dword ptr [esi]
tmp[cnt[(sum >> bit) & 0xFFFF]++] = sum;
001E152A mov ecx,ebx
001E152C mov edx,eax
001E152E sar edx,cl
001E1530 add esi,4
001E1533 and edx,0FFFFh
001E1539 lea ecx,[ebp+edx*4-40008h]
001E1540 mov edx,dword ptr [ecx]
001E1542 mov dword ptr temp (17F5B778h)[edx*4],eax
001E1549 inc edx
}
while(--idx != 0);
001E154A dec edi
001E154B mov dword ptr [ecx],edx
001E154D jne rsort3<int>+128h (1E1528h)

两段代码里最大的差别是用于做位置计数/指示的cnt数组大小不同。第一段的cnt只有256长度,占用空间1K;而第二段的则长达65536,需要空间256K。显然,第一段的cnt能始终放在一级数据缓存里,第二段的则不行,但应该也能始终放在二级缓存里。

我本以为二级缓存好歹也要比主存快很多,应该不至于有太大影响。没想到实测的结果是如此大的差距,感觉没道理啊?
...全文
321 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi66 2012-04-19
  • 打赏
  • 举报
回复
不是把主意打到这上面了,是没注意到这个因素,结果理论上应该加快一倍速度的方法实际却降低了一半多。
evencoming 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:

L1和L2的区别是10倍。L2和L3的区别是 3倍。
这么大差距......想要做点优化还真费事。
[/Quote]
具体的数据好像是L1需要 2~4个时钟周期, L2是10个时钟周期。

怎么优化打到这个上面去了?
我觉得非要从这个上面优化是很悲剧的事情了。。
pathuang68 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

L1和L2的区别是10倍。L2和L3的区别是 3倍。
这么大差距......想要做点优化还真费事。
[/Quote]

的确有难度。
muyi66 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

L1和L2的区别是10倍。L2和L3的区别是 3倍。
[/Quote]这么大差距......想要做点优化还真费事。
evencoming 2012-04-19
  • 打赏
  • 举报
回复
那是大概的数据。
而且,计算机上不止有一个程序在运行。
所以,数据不仅仅放在L2上面,数据越大
,需要置换的次数越多,速度越慢
evencoming 2012-04-19
  • 打赏
  • 举报
回复
L1和L2的区别是10倍。L2和L3的区别是 3倍。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧