Question

J'essaie de mesurer l'horloge cyles nécessaires à l'exécution d'un morceau de code sur le TMS32064x + DSP qui vient avec le OMAP ZOOM 3430 MDK. Je regarde le « Guide du programmeur » de la puce DSP et il dit que le DSP prend en charge la fonction horloge ().

Ce que je fais est vraiment simple, je fais juste

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

et ensuite mettre les valeurs de « start », « arrêt » et « total » à une mémoire partagée précédemment alloué avec le processeur ARM. Puis-je imprimer simplement à l'écran du côté ARM.

Le problème est, dans mon premier exécute, je reçois toujours la même valeur « totale », puis dans mes prochaines courses, je reçois toujours 0! Le « départ » et les valeurs « stop » vont de pair avec la valeur « totale ».

Le plus étrange est qu'ils semblent suivre un modèle binaire! Je mets la sortie ci-dessous:

# ./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, horloge () ne fonctionne pas bien, mais je ne suis pas sûr que ce soit à cause de quelque chose que je fais mal ou parce que ce genre de chose est pas pris en charge avec le matériel je. Toutes les idées pour lesquelles cela pourrait se produire?

Était-ce utile?

La solution

De la lecture des questions à ce jour, je dirais que l'affiche originale a une connaissance beaucoup plus de cette question que les contributeurs à ce jour, et que le soupçon que l'horloge () est cassé (ou non pris en charge, et retourne un indéfini résultat) sur le DSP semble tout à fait probable.

Autres conseils

Chose curieuse, pourquoi avez-vous besoin d'un précédemment alloué mémoire partagée . Pourquoi ne pas essayer avec une variable de pile normale? Y at-il quelque chose que je suis absent?

Peut-être que vous devez initialiser l'horloge.

Comment vous imprimez-le? peut-être la question est en fait avec l'affichage du résultat?

sur la plupart des plates-formes clock_t est un long. Si vous utilisez printf avec% d vous pourriez obtenir des résultats variables qui est ce que vous voyez.

Si l'on suppose le début et variable de fin sont, et votre mémoire partagée de type « clock_t » assume la même chose sur l'autre interprétation de fin des chiffres passés, votre problème est pas avec l'appel à l'horloge, et votre handleing de la différence entre la fin début fin des temps.

Je crois que votre problème est dans la mémoire partagée entre les deux. Pouvez-vous s'il vous plaît poster le code pour montrer comment vous partagez la mémoire entre deux processeurs séparés?

Peut-être que vous pourriez utiliser un assemblage en ligne pour accéder aux registres du compteur du CPU directement.

Le TMS320C64x + comporte un registre d'horodatage 64 bits dans TSCL, TSCH. Le compteur n'est pas activé lors de la réinitialisation, vous devez d'abord écrire au registre pour démarrer le compteur (peut-être c'est le problème avec clock?). La lecture du registre est pas tout à fait trivial que chaque moitié doit être lu avec une instruction séparée (et vous pouvez obtenir des interruptions ...).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top