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

📄 memorytestimpl.cpp

📁 获得多核硬件所有的相关信息。汇编源代码。Visual Studio2003、2005环境皆可。速度快。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            case PT_BLOCK_PREFETCH_2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE_BPF2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_16_NT :
                              &CopySSE_BPF2_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_BPF2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_32_NT :
                              &CopySSE_BPF2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_BPF2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_64_NT :
                              &CopySSE_BPF2_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_BPF2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_128_NT :
                              &CopySSE_BPF2_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_BPF2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_256_NT :
                              &CopySSE_BPF2_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_BPF2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF2_512_NT :
                              &CopySSE_BPF2_512;
                    break;
                }
                break;
            }
            }
        }
        else
        {
            // Read/Write prefetch off
            ReadMem = &ReadSSE;
            CopyMem = (TestData.UseNonTemporalStore) ?
                      &CopySSE_NT :
                      &CopySSE;
        }
        break;
    }
    case RT_128_BIT_SSE2:
    {
        WriteMem = (TestData.UseNonTemporalStore) ?
                   &WriteSSE2_NT :
                   &WriteSSE2;

        if ((PrefetchDistance > 0) ||
            (TestData.PrefetchType == PT_BLOCK_PREFETCH_1) ||
            (TestData.PrefetchType == PT_BLOCK_PREFETCH_2))
        {
            switch (TestData.PrefetchType)
            {
            case PT_PREFETCHNTA:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_PFNTA_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_16_NT :
                              &CopySSE2_PFNTA_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_PFNTA_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_32_NT :
                              &CopySSE2_PFNTA_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_PFNTA_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_64_NT :
                              &CopySSE2_PFNTA_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_PFNTA_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_128_NT :
                              &CopySSE2_PFNTA_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_PFNTA_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_256_NT :
                              &CopySSE2_PFNTA_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_PFNTA_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFNTA_512_NT :
                              &CopySSE2_PFNTA_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT0:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_PFT0_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_16_NT :
                              &CopySSE2_PFT0_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_PFT0_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_32_NT :
                              &CopySSE2_PFT0_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_PFT0_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_64_NT :
                              &CopySSE2_PFT0_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_PFT0_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_128_NT :
                              &CopySSE2_PFT0_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_PFT0_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_256_NT :
                              &CopySSE2_PFT0_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_PFT0_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT0_512_NT :
                              &CopySSE2_PFT0_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT1:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_PFT1_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_16_NT :
                              &CopySSE2_PFT1_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_PFT1_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_32_NT :
                              &CopySSE2_PFT1_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_PFT1_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_64_NT :
                              &CopySSE2_PFT1_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_PFT1_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_128_NT :
                              &CopySSE2_PFT1_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_PFT1_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_256_NT :
                              &CopySSE2_PFT1_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_PFT1_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT1_512_NT :
                              &CopySSE2_PFT1_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_PFT2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_16_NT :
                              &CopySSE2_PFT2_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_PFT2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_32_NT :
                              &CopySSE2_PFT2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_PFT2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_64_NT :
                              &CopySSE2_PFT2_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_PFT2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_128_NT :
                              &CopySSE2_PFT2_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_PFT2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_256_NT :
                              &CopySSE2_PFT2_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_PFT2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_PFT2_512_NT :
                              &CopySSE2_PFT2_512;
                    break;
                }
                break;
            }
            case PT_BLOCK_PREFETCH_1:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_BPF1_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_16_NT :
                              &CopySSE2_BPF1_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_BPF1_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_32_NT :
                              &CopySSE2_BPF1_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_BPF1_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_64_NT :
                              &CopySSE2_BPF1_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_BPF1_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_128_NT :
                              &CopySSE2_BPF1_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_BPF1_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_256_NT :
                              &CopySSE2_BPF1_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_BPF1_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF1_512_NT :
                              &CopySSE2_BPF1_512;
                    break;
                }
                break;
            }
            case PT_BLOCK_PREFETCH_2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE2_BPF2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_16_NT :
                              &CopySSE2_BPF2_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE2_BPF2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_32_NT :
                              &CopySSE2_BPF2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE2_BPF2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_64_NT :
                              &CopySSE2_BPF2_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE2_BPF2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_128_NT :
                              &CopySSE2_BPF2_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE2_BPF2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_256_NT :
                              &CopySSE2_BPF2_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE2_BPF2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE2_BPF2_512_NT :
                              &CopySSE2_BPF2_512;
                    break;
                }
                break;
            }
            }
        }
        else
        {
            // Read/Write prefetch off
            ReadMem = &ReadSSE2;
            CopyMem = (TestData.UseNonTemporalStore) ?
                      &CopySSE2_NT :
                      &CopySSE2;
        }
        break;
    }
    }
}

void __fastcall CMemoryTest::SetCacheBandwidthFunc(DWORD LogStrideSize)
{
    switch (LogStrideSize)
    {
    case 4:
        ReadCacheLineFwd = &ReadCacheLineFwd16;
        WriteCacheLineFwd = &WriteCacheLineFwd16;
        ReadCacheLineBwd = &ReadCacheLineBwd16;
        WriteCacheLineBwd = &WriteCacheLineBwd16;
        break;
    case 5:
        ReadCacheLineFwd = &ReadCacheLineFwd32;
        WriteCacheLineFwd = &WriteCacheLineFwd32;
        ReadCacheLineBwd = &ReadCacheLineBwd32;
        WriteCacheLineBwd = &WriteCacheLineBwd32;
        break;
    case 6:
        ReadCacheLineFwd = &ReadCacheLineFwd64;
        WriteCacheLineFwd = &WriteCacheLineFwd64;
        ReadCacheLineBwd = &ReadCacheLineBwd64;
        WriteCacheLineBwd = &WriteCacheLineBwd64;
        break;
    case 7:
        ReadCacheLineFwd = &ReadCacheLineFwd128;
        WriteCacheLineFwd = &WriteCacheLineFwd128;
        ReadCacheLineBwd = &ReadCacheLineBwd128;
        WriteCacheLineBwd = &WriteCacheLineBwd128;
        break;
    case 8:

⌨️ 快捷键说明

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