我想知道是否有可能让线程休眠一定数量的 CPU 周期?
我想过只插入“nop”,但我不确定它们是否得到优化,我希望有一个高级解决方案。
有什么好东西可以推荐给我吗?如果不能,我可以防止手动插入的“nop”在不禁用所有优化的情况下得到优化吗?亲切的问候
卢卡斯·海弗利格
编辑:作为另一个问题:是否可以测量某个代码片段在执行期间所需的周期数?
我想知道是否有可能让线程休眠一定数量的 CPU 周期?
我想过只插入“nop”,但我不确定它们是否得到优化,我希望有一个高级解决方案。
有什么好东西可以推荐给我吗?如果不能,我可以防止手动插入的“nop”在不禁用所有优化的情况下得到优化吗?亲切的问候
卢卡斯·海弗利格
编辑:作为另一个问题:是否可以测量某个代码片段在执行期间所需的周期数?
简而言之,不,因为周期和指令之间没有 1:1 映射(实际上,每个周期执行许多指令),并且当你有指令流水线、分支预测和推测执行之类的东西时,它就很清楚了变得不可预测。
另一个原因是没有基于 CPU 周期(或指令)的中断,而是基于硬件定时器中断或操作系统调度程序在给定当前时间轮询当前线程队列的线程睡眠。
最后,即使在硬件中是可能的,Windows API(.NET 在内部使用)除了以毫秒为单位的时间跨度之外不会公开任何其他睡眠参数(无论如何,一毫秒可能是数万个 CPU 周期)。
在 C# 中,这个问题相当荒谬,因为代码将基于当前平台进行 JIT 编译,这意味着您无法预测用于给定代码块的硬件指令,即使这样,您的 CIL 也有可能由解释器而不是 JIT 执行以减少启动延迟,这会导致 CPU 指令计数消失。