[英]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.