无心人 发表于 2008-4-30 18:28:31

:)

还不常用么?

复杂乘法经常用来分割整数吧??

超越边界的movdqu movdqa性能下降很厉害

不过,我考虑太大的内存复制很少出现

所以可以考虑是否有提供两个函数的必要?

gxqcn 发表于 2008-4-30 20:01:53

原帖由 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;
        }
}以上是从我的算法库中抠出的源代码。

无心人 发表于 2008-4-30 20:58:39

你的代码在P4上是否能直接得到 L2 Cache尺寸?

gxqcn 发表于 2008-4-30 21:15:30

都可以,
至少至今尚未有任何识别出错的反馈。

在 32# 我已给出了新近 CPU 的 L2、L3 cache size 的读取通用方法。

无心人 发表于 2008-4-30 21:34:28


那就简单了

不过,我说了有可能边界比L2大些, 所以不能简单的用L2做尺寸界限

无心人 发表于 2008-10-1 22:35:31

:)

刚考虑了
对超大的数据
是否分多次复制比较好呢

比如设L2Size是以字节为单位的L2 cache的大小
则每次复制L2Size / 8个双字
是否能比一次复制更好呢

有时间做下测试

liangbch 发表于 2008-10-5 11:45:20

回复 36# 无心人 的帖子

应该没有差别。经典的方法和你的这种方法都无法解决L2 cache命中率降低的问题。

无心人 发表于 2008-10-5 15:45:27

那就要准确获得分界点了
以我的经验
似乎有点困难
页: 1 2 3 [4]
查看完整版本: B计划之大整数的内存复制