我想编写一些 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/