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

📄 cachebandwidth.cpp

📁 获得多核硬件所有的相关信息。汇编源代码。Visual Studio2003、2005环境皆可。速度快。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    }
}

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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -