C++;Linux获取CPU标称频率 我需要在C++代码下获得Linux的CPU标称频率。据我所知,/proc/cpuinfo包含当前频率
IsC++;Linux获取CPU标称频率 我需要在C++代码下获得Linux的CPU标称频率。据我所知,/proc/cpuinfo包含当前频率,c++,linux,cpu-speed,C++,Linux,Cpu Speed,Is/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo\u max\u freq 以kHz为单位的标称频率是否始终可靠 P>或者,是否有更好的方法从C++获得这些信息? < P> C++没有任何访问这个值的方法,甚至不假设有这样的值。即使在您的情况下,您也只是查看其中一个CPU,而不是所有CPU。这意味着你必须做一些与OS相关的东西,你可以在C++中构建。 不管怎样,你知道有什么工具能提供这个号码吗?获取它的源代码,看看它是如何做到的!除此之外,我将查看/
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo\u max\u freq
以kHz为单位的标称频率是否始终可靠
<> P>或者,是否有更好的方法从C++获得这些信息? < P> C++没有任何访问这个值的方法,甚至不假设有这样的值。即使在您的情况下,您也只是查看其中一个CPU,而不是所有CPU。这意味着你必须做一些与OS相关的东西,你可以在C++中构建。
不管怎样,你知道有什么工具能提供这个号码吗?获取它的源代码,看看它是如何做到的!除此之外,我将查看/proc/cpuinfo并在那里构建“cpu MHz”值的平均值。
/proc
文件系统基本上是/sys
文件系统的前身,但是信息应该是相同的。没有一种通用的方法来读取标称频率。使用acpi-cpufreq
缩放驱动程序时,可以从/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq
读取英特尔处理器的标称频率,但是Intel_pstate
会将此文件的内容设置为最大turbo频率。不过,还有其他解决办法。英特尔CPU的标称频率作为CPU型号名称的一部分写入(当输入EAX=0x01或从/proc/cpuinfo
读取时,可使用CPUID指令读取),或者您可以读取MSR\U平台信息(0xCE)
寄存器
编辑:AMD处理器以/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq
的形式提供标称频率,无需额外的1 MHz
EDIT2:某些处理器可能有
/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo\u nominal\u freq
文件,例如POWER9仅供参考,我的计算机上不存在该文件。原因可能是CPU不支持任何动态频率调整,因此最大值没有意义。s/cpufrequ/cpufreq/gI也没有OP提到的文件。您实际上想要实现什么?我询问的原因是,如果您告诉我们,它可能会给您一个更好的答案,而不是询问某些特定的文件,这些文件现在或将来可能存在,也可能不存在。@MatsPetersson我想得到一个CPU标称(最大)频率的值。我知道,这取决于操作系统,我必须在Linux下得到这个值。不幸的是,/proc/cpuinfo包含当前频率,而不是最大频率。afaik,这是OS构建的特性,如果它“知道”那个CPU的话。程序实际上必须找出模型,并将其与数据表交叉引用。例如,如果处理器太新、太旧或太异国情调,所有的赌注都没有了。没有赌注,我写的东西对英特尔处理器非常适用。我对AMD不是很熟悉,但我现在正在和一个AMD合作,所以我编辑了我的答案,以便更精确。