还不常用么?
复杂乘法经常用来分割整数吧??
超越边界的movdqu movdqa性能下降很厉害
不过,我考虑太大的内存复制很少出现
所以可以考虑是否有提供两个函数的必要? 原帖由 liangbch 于 2008-4-30 17:21 发表 http://images.5d6d.net/dz60/common/back.gif
我用的关于 Intel CPU spec 的手册是2007.5发布的,但依然没有关于Core 2 L2 cache 的spec,哪位有更新的spec,告诉我一声。 UINT32 max_extended_cpuid_value;
__asm
{
mov eax, 0x80000000;
CPUID;
mov dword ptr, eax;
}对于后期出品的 CPU,max_extended_cpuid_value 都会比较大,即支持更全面的 CPUID 命令:UINT32 u32CacheL2size, u32CacheL3size; //KB
if ( 0x80000006 <= max_extended_cpuid_value )
{
__asm
{
mov eax, 0x80000006;
CPUID;
shr edx, 18;
shr ecx, 16;
shl edx, 9;
mov dword ptr[ u32CacheL2size ], ecx;
mov dword ptr[ u32CacheL3size ], edx;
}
}以上是从我的算法库中抠出的源代码。 你的代码在P4上是否能直接得到 L2 Cache尺寸? 都可以,
至少至今尚未有任何识别出错的反馈。
在 32# 我已给出了新近 CPU 的 L2、L3 cache size 的读取通用方法。 哦
那就简单了
不过,我说了有可能边界比L2大些, 所以不能简单的用L2做尺寸界限 :)
刚考虑了
对超大的数据
是否分多次复制比较好呢
比如设L2Size是以字节为单位的L2 cache的大小
则每次复制L2Size / 8个双字
是否能比一次复制更好呢
有时间做下测试
回复 36# 无心人 的帖子
应该没有差别。经典的方法和你的这种方法都无法解决L2 cache命中率降低的问题。 那就要准确获得分界点了以我的经验
似乎有点困难