我尝试测量在 OMAP ZOOM 3430 MDK 随附的 TMS32064x+ DSP 上执行一段代码所需的时钟周期。我查看了 DSP 芯片的“程序员指南”,它说 DSP 支持 clock() 功能。
我做的很简单,我就是做
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
然后将“start”、“stop”和“total”的值放入先前与ARM处理器分配的共享内存中。然后我简单地将它打印到 ARM 端的屏幕上。
问题是,在我的第一次执行中,我总是得到相同的“总”值,然后在我的下一次运行中,我总是得到 0!“开始”和“停止”值与“总”值一起出现。
最奇怪的是,他们似乎遵循了一点模式!我把输出放在下面:
# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop clock() value = 0x0000f9f9
# ./sampleapp
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop clock() value = 0xf9f9f9f9
显然,clock() 运行不正常,但我不确定这是因为我做错了什么,还是因为我拥有的硬件不支持这种类型的事情。任何想法为什么会发生这种情况?