我正在寻找一个控制处理器总线速度乘数的windows函数,结构,API。换句话说,我试图通过改变乘数来调整CPU的频率。目前,我正在通过使用以下函数修改电源方案来调整CPU速度。
PowerWriteDCValueIndex(…,…,…,…)
并调整
THROTTLE_MAXIMUM; & THROTTLE_MINIMUM;
然而,这允许我将处理器速度改变为%,这是不准确的。 希望我的问题很清楚,你可以提供帮助。
感谢。
答案 0 :(得分:1)
操作系统中电源状态的处理由内核驱动程序模块处理,该驱动程序模块至少特定于特定CPU供应商,有时也特定于CPU模型(例如,在64位AMD中,操作有所不同)处理器比32位AMD处理器。我曾经使用Linux驱动程序来设置AMD处理器的时钟速度。
此驱动程序将由“调控器”进程控制,该进程将您正在使用的配置设置(策略)作为输入,CPU上的当前负载(通常还有一些“负载历史记录”),以减少太多开关)和其他来源,如CPU温度,电池剩余电量(如果适用)。 [在移动设备中,CPU的温度肯定是等式的输入,因为大多数现代CPU和GPU能够消耗比设备可以消耗更多的功率,因此如果功率设置保持在高电平则会使芯片过热设置太久了]
不幸的是,在你做到这一点之前,你需要知道比“我想快速运行”更多的细节。有BIOS表(ACPI和/或其他供应商特定的表)定义在什么频率下使用什么电压,你需要先设置电压,然后设置速度上升时的时钟速度,然后是时钟速度速度下降时的电压。这些表通常不包含CPU可以达到的所有速度,而是“全速”,“中速”和“慢速”设置。 [并且将有多个表用于不同类型的CPU,因为BIOS不知道构建系统的人是使用高功率,高速CPU还是低速,低功耗CPU]。
还需要对寄存器进行编程,以确定CPU在切换到新速度之前应“休眠”多长时间,以使PLL(控制时钟倍频器)稳定。这意味着您不希望频繁切换。
系统还需要知道时钟频率已经改变,以便可以调整任何依赖于CPU速度的处理(例如,在x86上使用RDTSC指令来测量短时间的事情需要调整它们的时序基于新的设置)。
如果你没有完成所有这些事情,那么你将拥有一个不稳定的系统(在移动设备中,你甚至可以“炒”芯片 - 或者用户!)。
目前还不清楚你打算做什么,但总的来说,最好把这些东西留给已经在系统中的调控器,而不是试图建立一个更好的系统 - 几乎所有的尝试都是为了让这个“更好”将失败。