循环计数器:代码会在哪个ARM上成功运行?

Cycle counter: on which ARM will the code successfully run?

在 Raspberry Pi 3b 上,它是 ARM Cortex-A5 处理器,ARMv7 架构,我正在从 PMU(性能监控单元)读取周期计数器寄存器:

uint32_t cycle_counter_read (void)
{
  uint32_t cc = 0;
  __asm__ volatile ("mrc p15, 0, %0, c9, c13, 0":"=r" (cc));
  return cc;
}

除了 Raspberry Pi 3B 中的那个,我想了解此代码 运行 在哪些 ARM 处理器上成功。哪些 ARM 信息对此很重要:

List of ARM architectures.

I'd like to understand on which ARM processors will this code run successfully, other than the one in Raspberry Pi 3B. Which ARM info is important for this

嗯,mrc p15 正在从协处理器 15 移入寄存器。

所以,重要的信息就是处理器在协处理器 #15 上是否有 PMU。

我认为该功能是可选的(尽管强烈推荐),因此您总是有可能遇到没有 PMU 的自定义 ARM 芯片。希望它至少始终在协处理器 #15 上,当它 存在时。

可能您能做的最好的事情就是找到一份已知芯片列表。您可以在 ARM v8 上使用 ID_AA64DFR0_EL1, AArch64 Debug Feature Register 0,但在此之前我不知道可靠的机制。

正在搜索“arm pmu”,例如 Linux 内核文档中的 this list

ARM cores often have a PMU for counting cpu and cache events like cache misses
and hits. 

...

- compatible : should be one of
    "apm,potenza-pmu"
    "arm,armv8-pmuv3"
    "arm,cortex-a73-pmu"
    "arm,cortex-a72-pmu"
    "arm,cortex-a57-pmu"
    "arm,cortex-a53-pmu"
    "arm,cortex-a35-pmu"
    "arm,cortex-a17-pmu"
    "arm,cortex-a15-pmu"
    "arm,cortex-a12-pmu"
    "arm,cortex-a9-pmu"
    "arm,cortex-a8-pmu"
    "arm,cortex-a7-pmu"
    "arm,cortex-a5-pmu"
    "arm,arm11mpcore-pmu"
    "arm,arm1176-pmu"
    "arm,arm1136-pmu"
    "brcm,vulcan-pmu"
    "cavium,thunder-pmu"
    "qcom,scorpion-pmu"
    "qcom,scorpion-mp-pmu"
    "qcom,krait-pmu"