Linux kernel 对ARMv7使用clock()可以吗?

Linux kernel 对ARMv7使用clock()可以吗?,linux-kernel,armv7,Linux Kernel,Armv7,为了调整代码,我经常使用clock()函数和clock\t类型(由include提供) 通常: clock_t start, end; double time; start=clock(); // All the things I want to bench end=clock(); time=(end-start)/(double)CLOCKS_PER_SEC; // CLOCKS_PER_SEC = 1000000 for my ARMv7 我最近在ARMv7上使用了它,我只得到了0.01

为了调整代码,我经常使用
clock()
函数和
clock\t
类型(由
include提供)

通常:

clock_t start, end;
double time;
start=clock();
// All the things I want to bench
end=clock();
time=(end-start)/(double)CLOCKS_PER_SEC; // CLOCKS_PER_SEC = 1000000 for my ARMv7
我最近在ARMv7上使用了它,我只得到了0.01的倍数(我没有指定它,我只是将它们作为结果)。这不是很奇怪吗?平常吗

编辑:

好的,我看了一下我的问题。这变得很奇怪,因为我在ARMv7上的所有进程似乎都比在x86 3GHz处理器上快

使用此链接,Linux似乎使用WFI指令将处理器置于睡眠模式,对时钟进行选通。那么循环计数就不会像应该的那样增加。此指令也设置为,如中所示。问题是我不知道我应该去哪里检查我的案子里有没有这个

我的问题是,我应该如何禁用此指令?知道我根本不是Linux内核超级用户

EDIT2:
对于可能对它感兴趣的人,我使用了
中的基本函数,而不是
中的基本函数,这些函数似乎更适合获得精确的结果。检查或获取信息。

如果提供了标准库函数,则不应“不适合”使用-当然可能需要了解特定于实现的细节,但它们将是工具链、操作系统和平台的功能,而不是平台的CPU体系结构。用更多关于预期结果和实际结果的信息编辑这个问题会很有帮助,因为我个人无法理解你所说的获取时间是格式说明符的意思……我试图看到MMX、SSE/SSE2、OpenMP(x86)和Neon、OpenMP(ARMv7)可以为某些进程带来的加速。我看到了加速,尽管我无法判断它们是否是预期的,因为过程很简单(RGB到灰度转换器)。但我对ARMv7架构的计时很奇怪,因为它们都是(C、Neon和Neon+OpenMP)0.01的倍数。我不知道我的问题是否清楚。在特定的C库/操作系统/机器上调用
clock()
调用可能最终由RTC或只有10ms分辨率的东西支持,这似乎是完全可行的。我似乎还记得在旧的DOS/Windows机器上有类似的行为,必须依靠操作系统特定的调用来实现更高精度的计时。好的,我会检查一下。谢谢