如何读取Windows ARM64上的周期计数寄存器

问题描述 投票:0回答:1

刚刚购买了一台搭载 Snapdragon Elite 处理器的 Windows 笔记本电脑,并试图通过一些 C 代码来熟悉 ARM 指令集。第一次尝试是从优化我的算法所需的周期计数器寄存器中读取数据,但我可以弄清楚。

链接指出:

循环计数器 运行Windows的ARM处理器需要支持周期计数器,但直接使用计数器可能会导致问题。为了避免这些问题,ARM 上的 Windows 使用未定义的操作码来请求标准化的 64 位周期计数器值。在 C 或 C++ 中,使用 __rdpmccntr64 内在函数发出适当的操作码;从汇编中,使用 __rdpmccntr64 指令。

#include <iostream>
#include "stdint.h"
#include "arm64_neon.h"
#include "intrin.h"

int main()
{
#ifdef _M_ARM64
    unsigned __int64 cc = __rdpmccntr64();
#endif
}

但我收到此错误消息:

*标识符“__rdpmccntr64”未定义*

代码在 Visual Studio 2022 中编译,以 ARM64 作为目标处理器!

知道是什么导致了这个错误吗?指向示例代码的指针将不胜感激。

windows visual-c++ arm64 intrinsics cpu-cycles
1个回答
0
投票

谢谢你的提问。

您应该能够从使用模型中读取周期计数器值(异常级别0)。 我们使用Visual Studio读取内容,代码如下:

#include“arm64intr.h”

#定义 ARM64_PMCCNTR_EL0 ARM64_SYSREG(3,3, 9,13,0)

__int64 ret; ret = ReadStatusReg(ARM64 PMCCNTR_EL0);

如果您还有其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.