Próbuję zmierzyć czasy cylindrów potrzebne do wykonania fragmentu kodu na TMS32064x + DSP dołączonego do OMAP ZOOM 3430 MDK. Patrzę na "Przewodnik programisty" układu DSP i mówi, że DSP obsługuje funkcję clock().Czy na moim sprzęcie jest uszkodzony zegar czasu.h()?
Co mogę zrobić, to bardzo proste, po prostu zrobić
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
a następnie umieścić wartości "start", "stop" i "całkowite" do uprzednio przydzielonej pamięci współdzielonej z procesorem ARM. Następnie po prostu wydrukuję go na ekranie po stronie ARM.
Problem polega na tym, że w moich pierwszych wykonaniach zawsze otrzymuję taką samą "całkowitą" wartość, a następnie w następnych biegach zawsze otrzymuję 0! Wartości "start" i "stop" są zgodne z wartością "całkowitą".
Najdziwniejsze jest to, że wydają się podążać za wzorem! Włożyłem poniżej wynik:
# ./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, zegar() nie działa dobrze, ale nie jestem pewien, czy to dlatego, że coś robię źle albo z powodu tego typu rzeczy nie jest obsługiwany ze sprzętem Mam. Jakieś pomysły, dlaczego tak się dzieje?
Czy masz pewność, że zegar zwraca te wartości? Być może właśnie patrzysz na problem z dostępem do pamięci współdzielonej? – Vicky
Aby to sprawdzić, po prostu zmieniam jedną z zwracanych wartości, powiedz "start", do wartości predefiniowanej lub do wartości pamięci dzielonej i otrzymuję poprawną rzecz na ekranie. –
Czy TI ma jakieś przykłady? Myślę, że z niektórymi innymi przykładami CODEC również obliczali czas wykonania. Nie pamiętam, czy użyli api zegara(). Wygląda jednak na to, że działa w kodzie przykładowym dekodera lub kodera. – simon