我试图测量在无序处理器中并行执行的多个内存访问的延迟。
问题在于,任何试图测量负载延迟的尝试都会相对于其他负载序列化它。
例如,一段简单的代码可以度量两个加载的延迟:
1. rdtscp
2. load-1
3. rdtscp
4. rdtscp
5. load-2
6. rdtscp在上面的代码中,Intel的x86中rdtscp的排序属性按照我的测试将负载-1和负载-2的执行序列化(也就是说,只有在负载-1完成执行后才会向内存系统发出负载-2)。因此,上述代码没有利用可用的内存带宽。理想情况下,我希望确保负载的最大吞吐量,同时独立地测量每个负载的延迟。
是否有一种方法可以测量load-1和load-2的延迟,同时允许它们并行执行?。
理想情况下,我需要的是一种rdtscp形式,它是针对正在测量延迟的负载排序的,而不是与任何其他指令显式地排序的。我想知道是否有一种方法可以通过rdtscp或rdtsc获得这一点。
发布于 2020-01-28 22:46:14
我不认为有任何方法可以对输入依赖于特定寄存器的时间进行采样,也没有任何其他方式让负载按顺序完成,但仍然分别对每个时间进行计时。甚至只是让它们重叠。
对于从4到512的2的幂,mem_trans_retired.load_latency_gt_32有perf事件等等。您可以对计数器和rdpmc进行编程。但它不会告诉你是哪个负载触发了哪个事件。
考虑到您的总体目标,当(单核)内存带宽最大时,可以使用带有perf stat或perf record的计数器来获得整个循环的平均值。
请注意,它们计算的是从第一次调度(到加载端口)到后端的延迟,而不是发送到后端。
https://stackoverflow.com/questions/59957702
复制相似问题