如何通过软件控制动态电压和频率调整?

时间:2017-03-25 19:33:23

标签: assembly frequency

我知道有很多关于如何从特定操作系统进行频率或电压调整的问题,但我对此并不感兴趣。我来自编译器后台,并且想知道如果编译器有关于正在编译的应用程序的信息,编译器如何执行频率调整。

具体来说,我想知道是否使用特定的汇编指令来修改cpu使用的频率或电压,或者它是否有所不同。

1 个答案:

答案 0 :(得分:3)

电压和频率调整通常由硬件和软件组合控制。

除此之外,由于细节是特定于硬件的,所以不可能给出完全通用的答案,因此以下大部分内容适用于Intel x86硬件。其他“大”CPU可能类似,但像微控制器这样的东西将会大不相同。

所以上面的“软件”部分可能会给你一些希望,你可以从你的应用程序中控制它,但软件方面通常只限于内核,或者在某些情况下,以root身份运行的进程。特别是,最近英特尔的大部分频率控制都可以使用MSR寄存器进行调整,您可以使用msr内核模块以及rdmsrwrmsr命令从用户区访问它。 / p>

这不是推荐的做事方式,因为你正在改变内核也在设置的MSR,所以事情可能会变得混乱,你的更改可能会被任意撤消等等。

x86最近的趋势是将更多的“频率控制”循环推送到硬件中,硬件可以更快地响应,并且可以访问应用程序没有的应用程序行为的细粒度指标。在英特尔,这就是所谓的HWP(硬件p状态),体现在Linux的intel_pstate驱动器(最近英特尔的默认设置)和Windows上类似的东西上。在这里,软件降级为硬件提供更一般的提示,但通常不直接控制频率。

最后,关于电压具体来说:这通常在x86上通常不能直接控制 - 你可以通过MSR设置你可以做的,并且电压由硬件设置到适当的水平。某些主板或“发烧友”CPU可能会提供可在运行时直接设置电压的驱动器,但这些驱动程序远非通用。