我尝试测量执行一段上TMS32064x + DSP代码随附OMAP ZOOM 3430 MDK所需的时钟个循环。我看DSP芯片的“程序员指南”,并说,DSP支持时钟()函数。

我做的是非常简单的,我只是做

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

和然后放的“开始”的值,“停止”和“总”与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

Apparantly,时钟()不能正常工作很好,但我不知道这是因为东西我做错了或者是因为这种类型的事情是不是与硬件支持我。任何想法,为什么这可能发生?

有帮助吗?

解决方案

从阅读的问题,到目前为止,我会说楼主有这件事情比贡献者大幅更多的知识,到目前为止,该怀疑,时钟()被打破(或不支持,并返回一个未定义结果)在DSP上似乎很可能。

其他提示

奇怪的是,为什么你需要的以前分配的共享内存 的。你为什么不与正常堆栈变量试试?这有什么,我很想念?

也许你需要首先初始化时钟。

你是如何打印出来?也许这个问题实际上是与显示的结果?

在大多数平台clock_t表示是一个漫长的。如果您使用的printf用%d你可能会得到不同的结果这是你看到的。

假设开始和结束的变量是类型为“clock_t表示”,和共享存储器假定上传递的数字的另一端的解释是相同的,则你的问题不是与呼叫到时钟,而你的差的handleing开始之间结束结束时间。

相信你的问题是在这两者之间共享存储器。你能请张贴代码来显示你如何两个独立的处理器之间共享内存?

也许你可以使用一些内联汇编直接访问CPU的计数寄存器。

在的TMS320C64x +具有TSCL,TSCH 64位时间戳寄存器。 计数器不重置激活,您必须先写寄存器来启动计数器(也许这是clock问题?)。从寄存器读取是不太琐碎各占一半必须有独立的指令读取(你可以得到中断...)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top