Intento medir los ciclos de reloj necesarios para ejecutar un código en el TMS32064x + DSP que viene con el OMAP ZOOM 3430 MDK. Miro la "Guía del programador" del chip DSP y dice que el DSP admite la función clock().¿Está roto el reloj time.h() en mi hardware?
Lo que sí es muy simple, sólo hago
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
y luego poner los valores de "inicio", "parada" y "total" a una memoria compartida previamente asignado con el procesador ARM. Luego simplemente lo imprimo en la pantalla en el lado ARM.
El problema es que, en mis primeras ejecuciones, siempre obtengo el mismo valor "total", y luego en mis próximas ejecuciones siempre obtengo 0! Los valores "inicio" y "detener" van junto con el valor "total".
Lo más extraño es que parecen seguir un patrón de bits! Puse el resultado a continuación:
# ./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
Aparentemente, reloj() no está funcionando bien, pero no estoy seguro si esto es debido a algo que he hecho mal o porque este tipo de cosas no es compatible con el hardware Yo tengo. Alguna idea de por qué esto esta pasando?
¿Está absolutamente seguro de que el reloj está devolviendo estos valores? ¿Podría estar viendo un problema al acceder a la memoria compartida? – Vicky
Para verificar esto, simplemente cambio uno de los valores de retorno, digamos "inicio", a un valor predefinido o al valor de la dirección de memoria compartida y obtengo lo correcto en la pantalla. –
¿TI tiene algún ejemplo? Creo que con algunos de sus otros ejemplos de CODEC también estaban calculando un tiempo transcurrido de ejecución. No recuerdo si usaron la api clock(). Pero parece funcionar en el código de ejemplo del decodificador o codificador. – simon