⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cachebandwidth.cpp

📁 获得多核硬件所有的相关信息。汇编源代码。Visual Studio2003、2005环境皆可。速度快。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void __declspec(naked) __cdecl WriteCacheLineFwd32(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
        xor         ebx, ebx
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        ALIGN       16
$write_loop:
        mov         [eax], ebx
        mov         [eax+32], ebx
        mov         [eax+64], ebx
        mov         [eax+96], ebx
        mov         [eax+128], ebx
        mov         [eax+160], ebx
        mov         [eax+192], ebx
        mov         [eax+224], ebx
        mov         [eax+256], ebx
        mov         [eax+288], ebx
        mov         [eax+320], ebx
        mov         [eax+352], ebx
        mov         [eax+384], ebx
        mov         [eax+416], ebx
        mov         [eax+448], ebx
        mov         [eax+480], ebx
        mov         [eax+512], ebx
        mov         [eax+544], ebx
        mov         [eax+576], ebx
        mov         [eax+608], ebx
        mov         [eax+640], ebx
        mov         [eax+672], ebx
        mov         [eax+704], ebx
        mov         [eax+736], ebx
        mov         [eax+768], ebx
        mov         [eax+800], ebx
        mov         [eax+832], ebx
        mov         [eax+864], ebx
        mov         [eax+896], ebx
        mov         [eax+928], ebx
        mov         [eax+960], ebx
        mov         [eax+992], ebx
        add         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineFwd64(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
        xor         ebx, ebx
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        ALIGN       16
$write_loop:
        mov         [eax], ebx
        mov         [eax+64], ebx
        mov         [eax+128], ebx
        mov         [eax+192], ebx
        mov         [eax+256], ebx
        mov         [eax+320], ebx
        mov         [eax+384], ebx
        mov         [eax+448], ebx
        mov         [eax+512], ebx
        mov         [eax+576], ebx
        mov         [eax+640], ebx
        mov         [eax+704], ebx
        mov         [eax+768], ebx
        mov         [eax+832], ebx
        mov         [eax+896], ebx
        mov         [eax+960], ebx
        add         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineFwd128(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
        xor         ebx, ebx
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        ALIGN       16
$write_loop:
        mov         [eax], ebx
        mov         [eax+128], ebx
        mov         [eax+256], ebx
        mov         [eax+384], ebx
        mov         [eax+512], ebx
        mov         [eax+640], ebx
        mov         [eax+768], ebx
        mov         [eax+896], ebx
        add         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineFwd256(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
        xor         ebx, ebx
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        ALIGN       16
$write_loop:
        mov         [eax], ebx
        mov         [eax+256], ebx
        mov         [eax+512], ebx
        mov         [eax+768], ebx
        add         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineFwd512(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
        xor         ebx, ebx
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        ALIGN       16
$write_loop:
        mov         [eax], ebx
        mov         [eax+512], ebx
        add         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl ReadCacheLineBwd16(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        add         eax, ecx
        ALIGN       16
$read_loop:
        mov         ebx, [eax-16]
        mov         ebx, [eax-32]
        mov         ebx, [eax-48]
        mov         ebx, [eax-64]
        mov         ebx, [eax-80]
        mov         ebx, [eax-96]
        mov         ebx, [eax-112]
        mov         ebx, [eax-128]
        mov         ebx, [eax-144]
        mov         ebx, [eax-160]
        mov         ebx, [eax-176]
        mov         ebx, [eax-192]
        mov         ebx, [eax-208]
        mov         ebx, [eax-224]
        mov         ebx, [eax-240]
        mov         ebx, [eax-256]
        mov         ebx, [eax-272]
        mov         ebx, [eax-288]
        mov         ebx, [eax-304]
        mov         ebx, [eax-320]
        mov         ebx, [eax-336]
        mov         ebx, [eax-352]
        mov         ebx, [eax-368]
        mov         ebx, [eax-384]
        mov         ebx, [eax-400]
        mov         ebx, [eax-416]
        mov         ebx, [eax-432]
        mov         ebx, [eax-448]
        mov         ebx, [eax-464]
        mov         ebx, [eax-480]
        mov         ebx, [eax-496]
        mov         ebx, [eax-512]
        mov         ebx, [eax-528]
        mov         ebx, [eax-544]
        mov         ebx, [eax-560]
        mov         ebx, [eax-576]
        mov         ebx, [eax-592]
        mov         ebx, [eax-608]
        mov         ebx, [eax-624]
        mov         ebx, [eax-640]
        mov         ebx, [eax-656]
        mov         ebx, [eax-672]
        mov         ebx, [eax-688]
        mov         ebx, [eax-704]
        mov         ebx, [eax-720]
        mov         ebx, [eax-736]
        mov         ebx, [eax-752]
        mov         ebx, [eax-768]
        mov         ebx, [eax-784]
        mov         ebx, [eax-800]
        mov         ebx, [eax-816]
        mov         ebx, [eax-832]
        mov         ebx, [eax-848]
        mov         ebx, [eax-864]
        mov         ebx, [eax-880]
        mov         ebx, [eax-896]
        mov         ebx, [eax-912]
        mov         ebx, [eax-928]
        mov         ebx, [eax-944]
        mov         ebx, [eax-960]
        mov         ebx, [eax-976]
        mov         ebx, [eax-992]
        mov         ebx, [eax-1008]
        mov         ebx, [eax-1024]
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $read_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl ReadCacheLineBwd32(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        add         eax, ecx
        ALIGN       16
$read_loop:
        mov         ebx, [eax-32]
        mov         ebx, [eax-64]
        mov         ebx, [eax-96]
        mov         ebx, [eax-128]
        mov         ebx, [eax-160]
        mov         ebx, [eax-192]
        mov         ebx, [eax-224]
        mov         ebx, [eax-256]
        mov         ebx, [eax-288]
        mov         ebx, [eax-320]
        mov         ebx, [eax-352]
        mov         ebx, [eax-384]
        mov         ebx, [eax-416]
        mov         ebx, [eax-448]
        mov         ebx, [eax-480]
        mov         ebx, [eax-512]
        mov         ebx, [eax-544]
        mov         ebx, [eax-576]
        mov         ebx, [eax-608]
        mov         ebx, [eax-640]
        mov         ebx, [eax-672]
        mov         ebx, [eax-704]
        mov         ebx, [eax-736]
        mov         ebx, [eax-768]
        mov         ebx, [eax-800]
        mov         ebx, [eax-832]
        mov         ebx, [eax-864]
        mov         ebx, [eax-896]
        mov         ebx, [eax-928]
        mov         ebx, [eax-960]
        mov         ebx, [eax-992]
        mov         ebx, [eax-1024]
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $read_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl ReadCacheLineBwd64(void* src, DWORD count, DWORD repeat)
{
    __asm
    {
        push        ebx
        mov         edx, [esp+4+12]
$main_loop:
        mov         eax, [esp+4+4]
        mov         ecx, [esp+4+8]
        add         eax, ecx
        ALIGN       16
$read_loop:
        mov         ebx, [eax-64]
        mov         ebx, [eax-128]
        mov         ebx, [eax-192]
        mov         ebx, [eax-256]
        mov         ebx, [eax-320]
        mov         ebx, [eax-384]
        mov         ebx, [eax-448]
        mov         ebx, [eax-512]
        mov         ebx, [eax-576]
        mov         ebx, [eax-640]
        mov         ebx, [eax-704]
        mov         ebx, [eax-768]
        mov         ebx, [eax-832]
        mov         ebx, [eax-896]
        mov         ebx, [eax-960]
        mov         ebx, [eax-1024]
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $read_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -