簡體   English   中英

我的硬件上的time.h clock()壞了嗎?

[英]Is time.h clock() broken on my hardware?

我嘗試測量在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()運行不正常,但我不確定這是因為我做錯了什么,還是因為我的硬件不支持這種類型的東西。 任何想法為什么會這樣?

從目前為止的閱讀問題來看,我認為原始海報對此問題的了解遠遠超過目前的貢獻者,並且懷疑時鍾()被破壞(或不支持,並返回未定義的結果) DSP似乎很有可能。

奇怪的是,為什么需要先前分配的共享內存 為什么不嘗試使用普通的堆棧變量? 有什么我想念的嗎?

也許你需要先初始化時鍾。

你怎么打印出來的? 也許問題實際上是顯示結果?

在大多數平台上,clock_t很長。 如果您使用帶有%d的printf,您可能會得到可變結果,這就是您所看到的。

假設start和end變量的類型為'clock_t',並且你的共享內存假設在另一端對傳遞的數字的解釋相同,那么你的問題不是調用時鍾,而是你處理啟動之間的區別結束時間。

我相信你的問題在於兩者之間的共享內存。 你能否發布代碼來展示你如何在兩個獨立的處理器之間共享內存?

也許你可以使用一些內聯匯編來直接訪問CPU的計數器寄存器。

TMS320C64x +在TSCL,TSCH中具有64位時間戳寄存器。 復位時計數器未使能,必須先寫入寄存器才能啟動計數器(這可能是clock問題?)。 從寄存器讀取並不是很簡單,因為必須使用單獨的指令讀取每一半(並且您可以獲得中斷......)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM