Assembly 如何通过软件控制动态电压和频率缩放?

Assembly 如何通过软件控制动态电压和频率缩放?,assembly,frequency,Assembly,Frequency,我知道在如何从一个特定的操作系统进行频率或电压缩放方面有很多问题,但我对此不感兴趣。我有编译器的背景,想知道如果编译器有被编译应用程序的信息,它如何执行频率缩放 具体来说,我想知道特定的汇编指令是用来修改cpu使用的频率或电压,还是有什么不同。电压和频率缩放通常由硬件和软件的组合控制 除此之外,不可能给出一个完全通用的答案,因为细节是特定于硬件的,所以下面的大部分内容适用于英特尔x86硬件。其他“大”CPU很可能类似,但微控制器之类的东西将大不相同 因此,上面的“软件”部分可能会给您带来一些希望

我知道在如何从一个特定的操作系统进行频率或电压缩放方面有很多问题,但我对此不感兴趣。我有编译器的背景,想知道如果编译器有被编译应用程序的信息,它如何执行频率缩放


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

电压和频率缩放通常由硬件和软件的组合控制

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

因此,上面的“软件”部分可能会给您带来一些希望,您可以从应用程序中控制它,但软件方面的内容通常仅限于内核,或者在某些情况下,进程以root运行。特别是,最新Intel上的大多数频率控制可以使用MSR寄存器进行调整,您可以使用内核模块和
rdmsr
wrmsr
命令从userland访问

这不是一种推荐的做法,因为您正在更改内核也正在设置的MSR,因此事情可能会变得混乱,您的更改可能会被任意撤消,等等

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


最后,特别是关于电压:在x86上,这通常不是直接可控的——您可以通过MSR设置您可以设置的,并且电压由硬件设置到适当的级别。某些主板或“狂热者”CPU可能提供可以在运行时直接设置电压的驱动程序,但这些还远未普及

电压和频率缩放通常由硬件和软件的组合控制

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

因此,上面的“软件”部分可能会给您带来一些希望,您可以从应用程序中控制它,但软件方面的内容通常仅限于内核,或者在某些情况下,进程以root运行。特别是,最新Intel上的大多数频率控制可以使用MSR寄存器进行调整,您可以使用内核模块和
rdmsr
wrmsr
命令从userland访问

这不是一种推荐的做法,因为您正在更改内核也正在设置的MSR,因此事情可能会变得混乱,您的更改可能会被任意撤消,等等

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


最后,特别是关于电压:在x86上,这通常不是直接可控的——您可以通过MSR设置您可以设置的,并且电压由硬件设置到适当的级别。某些主板或“狂热者”CPU可能提供可以在运行时直接设置电压的驱动程序,但这些还远未普及

没有,没有具体的组装说明。典型的动态变化是由CPU本身和/或芯片组中的硬件来管理的。
wrmsr
。但是详细信息是特定于型号的,您不能在用户模式下使用。其中一些MSR是性能设置。另外,使用
pause
可能会使处理器进入较慢的状态,然后也可能不会进入较慢的状态,这取决于x86 CPU在循环中执行暂停指令,或仅使用HLT指令会向CPU发出空闲提示,后者是一个非常强烈的提示,但仅在环0中可用。@anirudh:这当然可能在许多系统中出现,尽管细节取决于特定的平台。例如,微控制器通常提供大量CPU时钟选项,具有不同的源振荡器和分频器设置,以减少功耗。包括完全关闭时钟直到唤醒事件。许多MCU还具有内置可编程核心电压调节器。通常,这都是通过I/O寄存器、内存映射或在专用空间中的组合来处理的,还有进入睡眠模式的特殊指令。不,没有特定的汇编指令。典型的动态变化是由CPU本身和/或芯片组中的硬件来管理的。
wrmsr
。但是详细信息是特定于型号的,您不能在用户模式下使用。其中一些MSR是性能设置。另外,使用
pause
可能会使处理器进入较慢的状态,然后它也可能不会进入较慢的状态,这取决于x86 CPU在循环中执行暂停指令,