我检查了几个站点,生产者在其中放置了有关L1,L2,L3,主内存访问时间的信息(以纳秒或周期为单位):skylake info
我可以运行外部工具,但是它们使用C / Assembler代码进行了一些测试-这是唯一的方法吗?
memtest86的示例输出:
Intel i7 @ 3.6GHz
CLK/TEMP 3645 mhz 44C
L1 Cache: 64K 291.81 GB/s
L2 Cache: 256K 125.52 GB/s
L3 Cache: 12288K 56.56 GB/s
Memory: 31.8 GB 20.84 GB/s
RAM Info: PC4-25600 DDR4 XMP 3200MHz / 16-18-18-38 / G-Skill INtl F4-3200C
答案 0 :(得分:2)
是否可以使用memtest的结果进行计算?
否。
如果没有,那么该如何计算?
用于产生https://www.7-cpu.com/上显示的结果的工具的源代码是公开可用的,可以在https://www.7-cpu.com/utils.html上找到。特别是,MemLat工具用于测量对内存层次结构每个级别的访问延迟。
衡量延迟的主流方法是使用指针追踪,其中创建了一个64字节元素的链表,并且每个元素都被初始化为基本上指向另一个随机选择的元素(以击败硬件预取器)。如果链接列表的总大小适合L1缓存,则通过对列表进行足够大的迭代,可以通过将总执行时间除以访问的元素数来测量L1延迟。可以通过disabling hardware prefetchers简化此微基准测试,因此无需进行随机化。建议使用1GB页面(或至少2MB页面)而不是4KB页面,以确保整个列表是从连续的物理内存块中分配的。否则,可能会将多个4KB页面映射到同一缓存集,从而导致冲突未命中。
指针追逐有效的原因是当前的Intel和AMD处理器不采用value prediction技术。
还有另一种测量延迟的方法。您可以在单个内存访问指令周围使用RDTSC
/ RDTSCP
,从本质上将单个内存访问视为短暂的经过时间事件。参见:Memory latency measurement with time stamp counter。