Assembly 当TSCAVARIVAR=True时,如何计数周期?

Assembly 当TSCAVARIVAR=True时,如何计数周期?,assembly,rdtsc,cpu-cycles,Assembly,Rdtsc,Cpu Cycles,如果启用了“tscinvariable”CPUID功能,则命令rdtsc应该是可靠的时间源(参见示例)。在动态频率重缩放上下文中,可靠的时间源不能是可靠的周期源 在启用TSC的CPU上:有没有一种方法可以可靠地测量周期?是的,使用性能计数器,这就是它们的用途。如果您真的想让rdtsc的工作方式类似于rdtsc,那么可以将其设置为可以从用户空间使用rdpmc(甚至可以计算类似的核心周期)。通常情况下,单独将基准测试放在可执行文件中比较容易,重复次数足以控制启动开销,然后您就可以perf statI

如果启用了“tscinvariable”CPUID功能,则命令rdtsc应该是可靠的时间源(参见示例)。在动态频率重缩放上下文中,可靠的时间源不能是可靠的周期源


在启用TSC的CPU上:有没有一种方法可以可靠地测量周期?

是的,使用性能计数器,这就是它们的用途。如果您真的想让
rdtsc
的工作方式类似于
rdtsc,那么可以将其设置为可以从用户空间使用
rdpmc
(甚至可以计算类似的核心周期)。通常情况下,单独将基准测试放在可执行文件中比较容易,重复次数足以控制启动开销,然后您就可以
perf stat
It了。@PeterCordes,非常感谢!使用MPI时,perf stat/wrapper选项有点麻烦。我给rdpmc一个机会,我在这里遵循Dr.Bandwidth提供的方法。如果您的算法没有大的启动或清理阶段,您可能仍然可以使用
perf stat
。它可以附加到一个PID,这样你就可以让你的MPI工作者fork/exec
perf stat
。通常,只要测试代码没有优化你的重复循环或其他任何东西,你所寻找的信号仍然是可见的,带有一些来自不完美测量条件的“噪音”。@Ghivelte:当我留下一个快速评论而不是回答时,在“正确”的位置推动进一步的评论/讨论是一种省力的方式(我希望如此)方向。或者希望有人觉得更有雄心壮志,可以接受我的评论,并把它变成一个真正的答案。或者,如果我重新开始,我会自己做,但我已经开始并没有完成这么多的答案(要么因为我觉得无聊,要么因为时间不够而没有回去),留下评论至少有帮助。@PeterCordes:谢谢!我欣赏你的真诚和清晰,我完全理解。我们有相似的兴趣,我在这里的时间相对较少;因此,我经常发现自己处于这种情况:当我遇到一个问题时,我认为我有了明确的答案,但随后在你的评论中发现了它。如果没有这种保证,我倾向于认为在上面构建一个答案将是重复的、多余的,甚至是剽窃的,所以就这样简单地说吧。知道这是你的态度,我会很高兴按照你的“轻推”行事。干杯是的,使用性能计数器,这就是它们的用途。如果您真的想让
rdtsc
的工作方式类似于
rdtsc,那么可以将其设置为可以从用户空间使用
rdpmc
(甚至可以计算类似的核心周期)。通常情况下,单独将基准测试放在可执行文件中比较容易,重复次数足以控制启动开销,然后您就可以
perf stat
It了。@PeterCordes,非常感谢!使用MPI时,perf stat/wrapper选项有点麻烦。我给rdpmc一个机会,我在这里遵循Dr.Bandwidth提供的方法。如果您的算法没有大的启动或清理阶段,您可能仍然可以使用
perf stat
。它可以附加到一个PID,这样你就可以让你的MPI工作者fork/exec
perf stat
。通常,只要测试代码没有优化你的重复循环或其他任何东西,你所寻找的信号仍然是可见的,带有一些来自不完美测量条件的“噪音”。@Ghivelte:当我留下一个快速评论而不是回答时,在“正确”的位置推动进一步的评论/讨论是一种省力的方式(我希望如此)方向。或者希望有人觉得更有雄心壮志,可以接受我的评论,并把它变成一个真正的答案。或者,如果我重新开始,我会自己做,但我已经开始并没有完成这么多的答案(要么因为我觉得无聊,要么因为时间不够而没有回去),留下评论至少有帮助。@PeterCordes:谢谢!我欣赏你的真诚和清晰,我完全理解。我们有相似的兴趣,我在这里的时间相对较少;因此,我经常发现自己处于这种情况:当我遇到一个问题时,我认为我有了明确的答案,但随后在你的评论中发现了它。如果没有这种保证,我倾向于认为在上面构建一个答案将是重复的、多余的,甚至是剽窃的,所以就这样简单地说吧。知道这是你的态度,我会很高兴按照你的“轻推”行事。干杯