📄 memorytestimpl.cpp
字号:
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 + -