AMD处理器是支持rdmsr(read model-specific register)和wrmsr(write model-specific register)命令的。这些命令用于读写CPU模型特定寄存器,以获取有关处理器性能的信息。
以下是在Linux系统下使用rdmsr命令获取CPU温度和功耗信息的示例代码:
#include
#include
#include
#include
#include
#include
#include
#define MSR_TEMPERATURE_TARGET 0x1a2
#define MSR_RAPL_POWER_UNIT 0x606
#define MSR_PKG_ENERGY_STATUS 0x611
#define MSR_DRAM_ENERGY_STATUS 0x619
#define MSR_PP0_ENERGY_STATUS 0x639
static inline uint64_t read_msr(int fd, uint32_t reg) {
uint64_t data = 0;
if (pread(fd, &data, sizeof data, reg) != sizeof data) {
return 0; // Failed to read
}
return data;
}
int main() {
int fd = open("/dev/cpu/0/msr", O_RDONLY);
if (fd < 0) {
perror("open");
exit(EXIT_FAILURE);
}
// 获取功率单位
uint64_t power_unit = read_msr(fd, MSR_RAPL_POWER_UNIT);
double energy_unit = 1.0 / (1 << (power_unit & 0xf));
// 获取CPU温度
uint64_t temperature_target = read_msr(fd, MSR_TEMPERATURE_TARGET);
uint64_t temperature = (temperature_target >> 16) & 0xff;
printf("CPU temperature: %ldC\n", temperature);
// 获取CPU能耗
uint64_t pkg_energy = read_msr(fd, MSR_PKG_ENERGY_STATUS);
printf("CPU energy: %lfJ\n", pkg_energy * energy_unit);
close(fd);
return 0;
}
示例代码中使用了open系统调用打开/dev/cpu/0/msr文件来访问MSR
上一篇:amd深度学习主机
下一篇:AMD是否支持x2APIC?