【问题标题】:Is there something like x86 cpuid() available for PowerPC?PowerPC 是否有类似 x86 cpuid() 的东西?
【发布时间】:2013-07-30 17:09:10
【问题描述】:

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

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

【问题讨论】:

  • 实际上并没有确切的类比,您希望获得哪些特定属性?
  • 如果您在 PowerPC 文档中找不到任何能够在 PowerPC 上运行的开源操作系统的源代码,您可以随时查看。
  • 谢谢。我添加了一个感兴趣的属性列表。

标签: c powerpc cpuid


【解决方案1】:

请注意,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,但您可以获得其他功能(包括“asm/cputable.h”中列出):32 或 64 位 cpu、Altivec、SPE、FPU、MMU、4xx MAC、...

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

【讨论】:

  • 你在 AIX 上使用什么?
  • AUXV 是 Linux 上支持的机制。最近的内核也在那里导出缓存信息,参见例如。 AT_L2_CACHESIZE AT_L2_CACHEGEOMETRY。
【解决方案2】:

PowerPC 没有与 CPUID 指令类似的指令。最接近的方法是读取 PVR(处理器版本寄存器)。不过,这是一个主管特权的 SPR。但是,某些操作系统(例如 FreeBSD)会为用户空间进程捕获并执行它。

PVR 是只读的,对于任何给定的处理器型号和版本都应该是唯一的。鉴于此,您可以确定给定 CPU 提供了哪些功能。

【讨论】:

  • Linux 还捕获和模拟 PVR。这并不一定会告诉你你需要知道的一切。例如,您的 CPU 可能支持 Altivec,但您的内核可能不支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2016-10-17
  • 2016-08-02
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多