c - 是否有类似 x86 cpuid() 的东西可用于 PowerPC?

标签 c powerpc cpuid

我想编写一些 C 代码来查询 PowerPC 上的处理器属性,就像可以在 x86 上使用 cpuid 一样。我在寻找诸如品牌、型号、步进、SIMD 宽度、可用操作之类的东西,以便在出现问题之前可以在运行时确认代码正在兼容平台上使用。

是否有在 PowerPC 上执行此操作的通用机制?如果是这样,人们可以在哪里读到它?

最佳答案

请注意,PowerPC 没有 x86 那样的许多扩展/功能。需要读取可能依赖于内核的特定特权寄存器。

我在 Linux 上检查过,你可以访问 PVR,内核中有一个陷阱来管理它。

如果支持Altivec,读取/proc/cpuinfo 可以返回,内存和L2 缓存大小......但那不是很方便。

这里描述了一个更好的解决方案: http://www.freehackers.org/thomas/2011/05/13/how-to-detect-altivec-availability-on-linuxppc-at-runtime/

使用/proc/self/auxv 的内容提供“在执行时传递给进程的 ELF 解释器信息”。

该示例是关于 Altivec 的,但您可以获得其他功能(在 include "asm/cputable.h"中列出):32 或 64 位 cpu、Altivec、SPE、FPU、MMU、4xx MAC,...

最后,您将找到有关缓存的信息(大小、行大小、关联性……),查看以下文件: /sys/devices/system/cpu/cpu0/cache

关于c - 是否有类似 x86 cpuid() 的东西可用于 PowerPC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948969/

相关文章:

c - 在 C 中使用 memmove 从字符串中删除子字符串

x86 - 使用 CPUID 指令确定 x86 MONITOR 指令地址范围

c - 按字母顺序对单词列表进行冒泡排序。我有一个指向每个单词的指针数组

c - 错误消息 "Expression must have integral or unscoped enum type"

c - ld.so.1 中的 ELDK gcc 链接器错误

Qt Mac 二进制安装无法在 PowerPC/G5 上运行

c - 如何编写一个返回堆栈指针的函数

c - 无需组装即可检测CPU能力

visual-c++ - 如何用C/C++通过CPUID命令获取物理和虚拟地址位

c - 如何编译C程序