一级缓存与二级缓存的差距能有这么大?该怎么解决

一级缓存与二级缓存的差距能有这么大?
看看下面两段目标码。功能相同,代码也非常相似。但是在E7500上的执行时间,第二个竟然是第一个的5-6倍!

第一段:
Assembly code

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)  



第二段:
Assembly code

    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能始终放在一级数据缓存里,第二段的则不行,但应该也能始终放在二级缓存里。

我本以为二级缓存好歹也要比主存快很多,应该不至于有太大影响。没想到实测的结果是如此大的差距,感觉没道理啊?

------解决方案--------------------
L1和L2的区别是10倍。L2和L3的区别是 3倍。
------解决方案--------------------
探讨
引用:

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