Pregunta

Trato de medir los cyles reloj necesarios para ejecutar una pieza de código en el TMS32064x + DSP que viene con el ZOOM OMAP 3430 MDK. Miro a la "Guía del programador" del chip DSP y dice que el DSP es compatible con la función de reloj ().

Lo que hago 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 imprima a la pantalla en el lado del brazo.

El problema es, en mis primeros ejecuta, siempre me dan el mismo valor "total", y luego en mis próximas carreras Siempre tengo 0! El "Inicio" y "Stop" valores van junto con el valor "total".

Lo más extraño es que ellos 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 que tengo. Cualquier idea por qué esto podría estar sucediendo?

¿Fue útil?

Solución

A partir de la lectura de las preguntas hasta ahora, diría que el cartel original tiene sustancialmente más conocimientos de esta materia que los contribuyentes hasta el momento, y que la sospecha de que el reloj () se rompe (o no soportado, y devuelve un indefinido resultado) en el DSP parece bastante probable.

Otros consejos

Es curioso, ¿Por qué se requiere un previamente asignado memoria compartida . ¿Por qué no pruebas con una variable de pila normal? ¿Hay algo que me falta?

Tal vez usted necesita para inicializar el reloj en primer lugar.

¿Cómo está imprimiendo a cabo? tal vez el problema es en realidad con mostrar el resultado?

en la mayoría de plataformas clock_t es un largo tiempo. Si está utilizando printf con% d es posible obtener resultados variables, que es lo que se está viendo.

Si se asume el principio y variables finales son del tipo 'clock_t', y su memoria compartida asume la misma en la interpretación que el otro extremo de los números pasados, entonces su problema no es con la llamada al reloj, y su handleing de la diferencia entre el inicio terminar tiempos finales.

Creo que su problema está en la memoria compartida entre los dos. ¿Puede usted por favor, puesto código para mostrar cómo se va a compartir la memoria entre dos procesadores separados?

Tal vez usted podría utilizar un poco de montaje en línea para acceder directamente a registros del contador de la CPU.

El TMS320C64x + dispone de un registro de marca de tiempo de 64 bits en TSCL, TSCH. El contador no está habilitado en reinicio, primero debe escribir en el registro para iniciar el contador (tal vez este es el problema con clock?). La lectura del registro no es trivial, ya que cada medio debe ser leído con una instrucción por separado (y se puede obtener interrupciones ...).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top