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

📄 cachebandwidth.cpp

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

#include "StdAfx.h"
#include "CacheBandwidth.h"

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

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

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

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

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

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

void __declspec(naked) __cdecl WriteCacheLineFwd16(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+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
        add         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 + -