我想编写一些能够在PowerPC上查询处理器属性的C代码,就像在x86上使用cpuid一样。我喜欢品牌,型号,步进,SIMD宽度,可用操作之类的东西,因此可以运行时确认代码是在兼容的平台上使用之前爆炸的。
在PowerPC上有这样的通用机制吗?如果是这样,可以在哪里阅读它?
答案 0 :(得分:4)
请注意,PowerPC没有像x86这样的数十种扩展/功能。需要读取可能依赖于核心的特定特权寄存器。
我在Linux上检查过你可以访问PVR,内核中有一个陷阱来管理它。
如果支持Altivec,内存和L2缓存大小,读取/ proc / cpuinfo可以返回...但这不太方便。
这里描述了一个更好的解决方案: http://www.freehackers.org/thomas/2011/05/13/how-to-detect-altivec-availability-on-linuxppc-at-runtime/
使用/ proc / self / auxv的内容提供“在执行时传递给进程的ELF解释器信息”。
示例是关于Altivec但您可以获得其他功能(在“asm / cputable.h”中列出):32位或64位cpu,Altivec,SPE,FPU,MMU,4xx MAC,......
最后,您将找到有关缓存(大小,行大小,关联性等)的信息,查看以下文件: / SYS /装置/系统/ CPU / CPU0 /高速缓存
答案 1 :(得分:3)
PowerPC没有CPUID指令的模拟。最接近的是读取PVR(处理器版本寄存器)。不过,这是一个主管特权的SPR。但是,某些操作系统(例如FreeBSD)将捕获并执行用于用户空间进程的操作系统。
PVR是只读的,对于任何给定的处理器型号和修订版本都应该是唯一的。鉴于此,您可以确定给定CPU提供的功能。