首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以在x86 (使用RDTSCP或RDTSC)中并行测量多个负载的延迟,而不需要序列化?

是否有一种方法可以在x86 (使用RDTSCP或RDTSC)中并行测量多个负载的延迟,而不需要序列化?
EN

Stack Overflow用户
提问于 2020-01-28 22:00:23
回答 1查看 106关注 0票数 0

我试图测量在无序处理器中并行执行的多个内存访问的延迟。

问题在于,任何试图测量负载延迟的尝试都会相对于其他负载序列化它。

例如,一段简单的代码可以度量两个加载的延迟:

代码语言:javascript
复制
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获得这一点。

EN

回答 1

Stack Overflow用户

发布于 2020-01-28 22:46:14

我不认为有任何方法可以对输入依赖于特定寄存器的时间进行采样,也没有任何其他方式让负载按顺序完成,但仍然分别对每个时间进行计时。甚至只是让它们重叠。

对于从4到512的2的幂,mem_trans_retired.load_latency_gt_32有perf事件等等。您可以对计数器和rdpmc进行编程。但它不会告诉你是哪个负载触发了哪个事件。

考虑到您的总体目标,当(单核)内存带宽最大时,可以使用带有perf statperf record的计数器来获得整个循环的平均值。

请注意,它们计算的是从第一次调度(到加载端口)到后端的延迟,而不是发送到后端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59957702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档