cachebandwidth.cpp

来自「获得多核硬件所有的相关信息。汇编源代码。Visual Studio2003、20」· C++ 代码 · 共 1,041 行 · 第 1/3 页

CPP
1,041
字号
    }
}

void __declspec(naked) __cdecl ReadCacheLineBwd128(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-128]
        mov         ebx, [eax-256]
        mov         ebx, [eax-384]
        mov         ebx, [eax-512]
        mov         ebx, [eax-640]
        mov         ebx, [eax-768]
        mov         ebx, [eax-896]
        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 ReadCacheLineBwd256(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-256]
        mov         ebx, [eax-512]
        mov         ebx, [eax-768]
        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 ReadCacheLineBwd512(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-512]
        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 WriteCacheLineBwd16(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        mov         [eax-16], ebx
        mov         [eax-32], ebx
        mov         [eax-48], ebx
        mov         [eax-64], ebx
        mov         [eax-80], ebx
        mov         [eax-96], ebx
        mov         [eax-112], ebx
        mov         [eax-128], ebx
        mov         [eax-144], ebx
        mov         [eax-160], ebx
        mov         [eax-176], ebx
        mov         [eax-192], ebx
        mov         [eax-208], ebx
        mov         [eax-224], ebx
        mov         [eax-240], ebx
        mov         [eax-256], ebx
        mov         [eax-272], ebx
        mov         [eax-288], ebx
        mov         [eax-304], ebx
        mov         [eax-320], ebx
        mov         [eax-336], ebx
        mov         [eax-352], ebx
        mov         [eax-368], ebx
        mov         [eax-384], ebx
        mov         [eax-400], ebx
        mov         [eax-416], ebx
        mov         [eax-432], ebx
        mov         [eax-448], ebx
        mov         [eax-464], ebx
        mov         [eax-480], ebx
        mov         [eax-496], ebx
        mov         [eax-512], ebx
        mov         [eax-528], ebx
        mov         [eax-544], ebx
        mov         [eax-560], ebx
        mov         [eax-576], ebx
        mov         [eax-592], ebx
        mov         [eax-608], ebx
        mov         [eax-624], ebx
        mov         [eax-640], ebx
        mov         [eax-656], ebx
        mov         [eax-672], ebx
        mov         [eax-688], ebx
        mov         [eax-704], ebx
        mov         [eax-720], ebx
        mov         [eax-736], ebx
        mov         [eax-752], ebx
        mov         [eax-768], ebx
        mov         [eax-784], ebx
        mov         [eax-800], ebx
        mov         [eax-816], ebx
        mov         [eax-832], ebx
        mov         [eax-848], ebx
        mov         [eax-864], ebx
        mov         [eax-880], ebx
        mov         [eax-896], ebx
        mov         [eax-912], ebx
        mov         [eax-928], ebx
        mov         [eax-944], ebx
        mov         [eax-960], ebx
        mov         [eax-976], ebx
        mov         [eax-992], ebx
        mov         [eax-1008], ebx
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineBwd32(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        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
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineBwd64(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        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
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineBwd128(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        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
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineBwd256(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        mov         [eax-256], ebx
        mov         [eax-512], ebx
        mov         [eax-768], ebx
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

void __declspec(naked) __cdecl WriteCacheLineBwd512(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]
        add         eax, ecx
        ALIGN       16
$write_loop:
        mov         [eax-512], ebx
        mov         [eax-1024], ebx
        sub         eax, 1024
        sub         ecx, 1024
        jnz         $write_loop
        sub         edx, 1
        jnz         $main_loop
        pop         ebx
        ret
    }
}

⌨️ 快捷键说明

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