memorytestimpl.cpp

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

CPP
1,876
字号
            case PT_PREFETCHT2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadMMX_PFT2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_16_NT :
                              &CopyMMX_PFT2_16;
                    break;
                case 5:
                    ReadMem = &ReadMMX_PFT2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_32_NT :
                              &CopyMMX_PFT2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadMMX_PFT2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_64_NT :
                              &CopyMMX_PFT2_64;
                    break;
                case 7:
                    ReadMem = &ReadMMX_PFT2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_128_NT :
                              &CopyMMX_PFT2_128;
                    break;
                case 8:
                    ReadMem = &ReadMMX_PFT2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_256_NT :
                              &CopyMMX_PFT2_256;
                    break;
                case 9:
                    ReadMem = &ReadMMX_PFT2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_PFT2_512_NT :
                              &CopyMMX_PFT2_512;
                    break;
                }
                break;
            }
            case PT_BLOCK_PREFETCH_1:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadMMX_BPF1_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_16_NT :
                              &CopyMMX_BPF1_16;
                    break;
                case 5:
                    ReadMem = &ReadMMX_BPF1_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_32_NT :
                              &CopyMMX_BPF1_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadMMX_BPF1_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_64_NT :
                              &CopyMMX_BPF1_64;
                    break;
                case 7:
                    ReadMem = &ReadMMX_BPF1_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_128_NT :
                              &CopyMMX_BPF1_128;
                    break;
                case 8:
                    ReadMem = &ReadMMX_BPF1_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_256_NT :
                              &CopyMMX_BPF1_256;
                    break;
                case 9:
                    ReadMem = &ReadMMX_BPF1_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF1_512_NT :
                              &CopyMMX_BPF1_512;
                    break;
                }
                break;
            }
            case PT_BLOCK_PREFETCH_2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadMMX_BPF2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_16_NT :
                              &CopyMMX_BPF2_16;
                    break;
                case 5:
                    ReadMem = &ReadMMX_BPF2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_32_NT :
                              &CopyMMX_BPF2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadMMX_BPF2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_64_NT :
                              &CopyMMX_BPF2_64;
                    break;
                case 7:
                    ReadMem = &ReadMMX_BPF2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_128_NT :
                              &CopyMMX_BPF2_128;
                    break;
                case 8:
                    ReadMem = &ReadMMX_BPF2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_256_NT :
                              &CopyMMX_BPF2_256;
                    break;
                case 9:
                    ReadMem = &ReadMMX_BPF2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopyMMX_BPF2_512_NT :
                              &CopyMMX_BPF2_512;
                    break;
                }
                break;
            }
            }
        }
        else
        {
            // Read/Write prefetch off
            ReadMem = &ReadMMX;
            CopyMem = (TestData.UseNonTemporalStore) ?
                      &CopyMMX_NT :
                      &CopyMMX;
        }
        break;
    }
    case RT_128_BIT_SSE:
    {
        WriteMem = (TestData.UseNonTemporalStore) ?
                   &WriteSSE_NT :
                   &WriteSSE;

        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 = &ReadSSE_PFNTA_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_16_NT :
                              &CopySSE_PFNTA_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_PFNTA_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_32_NT :
                              &CopySSE_PFNTA_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_PFNTA_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_64_NT :
                              &CopySSE_PFNTA_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_PFNTA_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_128_NT :
                              &CopySSE_PFNTA_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_PFNTA_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_256_NT :
                              &CopySSE_PFNTA_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_PFNTA_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFNTA_512_NT :
                              &CopySSE_PFNTA_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT0:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE_PFT0_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_16_NT :
                              &CopySSE_PFT0_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_PFT0_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_32_NT :
                              &CopySSE_PFT0_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_PFT0_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_64_NT :
                              &CopySSE_PFT0_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_PFT0_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_128_NT :
                              &CopySSE_PFT0_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_PFT0_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_256_NT :
                              &CopySSE_PFT0_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_PFT0_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT0_512_NT :
                              &CopySSE_PFT0_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT1:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE_PFT1_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_16_NT :
                              &CopySSE_PFT1_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_PFT1_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_32_NT :
                              &CopySSE_PFT1_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_PFT1_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_64_NT :
                              &CopySSE_PFT1_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_PFT1_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_128_NT :
                              &CopySSE_PFT1_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_PFT1_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_256_NT :
                              &CopySSE_PFT1_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_PFT1_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT1_512_NT :
                              &CopySSE_PFT1_512;
                    break;
                }
                break;
            }
            case PT_PREFETCHT2:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE_PFT2_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_16_NT :
                              &CopySSE_PFT2_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_PFT2_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_32_NT :
                              &CopySSE_PFT2_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_PFT2_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_64_NT :
                              &CopySSE_PFT2_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_PFT2_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_128_NT :
                              &CopySSE_PFT2_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_PFT2_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_256_NT :
                              &CopySSE_PFT2_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_PFT2_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_PFT2_512_NT :
                              &CopySSE_PFT2_512;
                    break;
                }
                break;
            }
            case PT_BLOCK_PREFETCH_1:
            {
                switch (TestData.LogStrideSize[0])
                {
                case 4:
                    ReadMem = &ReadSSE_BPF1_16;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_16_NT :
                              &CopySSE_BPF1_16;
                    break;
                case 5:
                    ReadMem = &ReadSSE_BPF1_32;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_32_NT :
                              &CopySSE_BPF1_32;
                    break;
                case 6:
                default:
                    ReadMem = &ReadSSE_BPF1_64;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_64_NT :
                              &CopySSE_BPF1_64;
                    break;
                case 7:
                    ReadMem = &ReadSSE_BPF1_128;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_128_NT :
                              &CopySSE_BPF1_128;
                    break;
                case 8:
                    ReadMem = &ReadSSE_BPF1_256;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_256_NT :
                              &CopySSE_BPF1_256;
                    break;
                case 9:
                    ReadMem = &ReadSSE_BPF1_512;
                    CopyMem = (TestData.UseNonTemporalStore) ?
                              &CopySSE_BPF1_512_NT :
                              &CopySSE_BPF1_512;
                    break;
                }
                break;
            }

⌨️ 快捷键说明

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