2010-01-22 8 views
1

Je fais un projet sur un périphérique embarqué qui a un processeur ARM926Ej-S. J'ai besoin d'une analyse de performance de l'algorithme sur le périphérique. Je suis nouveau à l'environnement embarqué et n'ai pas beaucoup d'idée de ce qu'est l'analyse de performance pour les dispositifs embarqués. Quelqu'un peut-il dire quels paramètres dois-je considérer pour l'analyse? Comment faire pour mettre en œuvre aussi?Analyse de performance pour les algorithmes sur les dispositifs embarqués

Merci à tous

Répondre

1

Mon approche de ces serait de lire le manuel de référence (http://www.arm.com/miscPDFs/5499.pdf) qui devrait couvrir tout ce dont vous avez besoin. Cela vous montrera s'il y a une unité à virgule flottante, quels sont les inconvénients de la FPU, ce que vous devez garder à l'esprit lors de l'utilisation des DMA, du cache et de la mémoire ainsi que les vitesses du bus mémoire et beaucoup d'autres choses crucial si vous voulez programmer cet appareil correctement et efficacement. Malheureusement, je n'ai jamais travaillé avec cet appareil spécifique, donc je ne peux pas pointer sur quelque chose de spécifique, mais vous trouverez sûrement tout ce dont vous avez besoin dans le RefManual. Si vous connaissez le matériel, vous pouvez analyser l'impact sur les performances de parties spécifiques de l'algorithme. Mais vous avez pour connaître les composants internes du matériel.

+0

merci darthcoder. Je vais passer en revue le manuel de référence. Pouvez-vous s'il vous plaît passer par ma réponse pour le commentaire de Mike dans la réponse ci-dessus et répondre en conséquence. merci encore – sravan

+0

Si vous utilisez déjà gdb pour le débogage, vous pouvez utiliser gprof pour le profilage. Le profilage existe de deux façons, l'une préfère le micro (profil d'échantillon) et un profil de synchronisation. Au lieu d'inspecter manuellement la callstack, vous pouvez utiliser gprof, qui prend déjà en charge le profilage d'échantillons. gprof prend simplement les échantillons callstack automatiquement et vous donne une liste avec les fonctions appelées et combien de temps d'exécution ils ont pris. Il y a des cas où un profil de synchronisation serait plus utile, mais je ne sais pas si gprof le supporte du tout. Pour l'aperçu général de perf, le prof-échantillon devrait suffire. – DarthCoder

+0

salut Darthcoder, Je n'avais jamais utilisé gprog d'autres techniques de profilage. Mais, je vais apprendre à leur sujet en faisant des recherches sur Google. Pouvez-vous me référer quelques docs concernant ceci si vous aviez fait le profilage avant. En attendant je lirai au sujet du profilage d'échantillon et comment les mettre en application en utilisant gdb. Je voudrais faire le profilage du temps aussi. – sravan

2

Quel type d'environnement de débogage avez-vous? Avez-vous un émulateur de circuit (ICE)? Ce que je recommande est que vous ayez un environnement de débogage tel que vous pouvez arrêter manuellement l'exécution à un moment aléatoire et examiner l'état du programme, y compris la pile d'appel (stackshots). L'échantillonnage manuel de la pile d'appels de cette manière révélera des endroits dans le code qui sont responsables de fractions significatives de temps, de sorte que vous pouvez les optimiser. Here is a longer explanation.

Cela peut être un peu différent de ce que vous envisagiez. Beaucoup de gens pensent que pour trouver des choses à optimiser, vous devez utiliser le code , mais ce n'est pas le cas. Le timing est un bon moyen de savoir si ce que vous avez fait a fait une différence, mais l'échantillonnage en pile est, selon certains, la meilleure façon de savoir ce qu'il faut faire pour faire la différence.

+0

hi Mike, Je n'ai pas d'environnement de débogage. Je prévois de JTAG pour l'appareil. Je ne sais pas s'il peut être utilisé pour cet appareil ou non. En ce moment, je communique avec l'appareil en utilisant le port série. J'ai oublié d'informer que le noyau Linux 2.6.20 est en cours d'exécution avec des applications graphiques minimales sur le périphérique.Donc, j'utilise le gdb pour déboguer mes programmes. S'il vous plaît laissez-moi savoir si je peux faire la même chose en utilisant gdb. merci – sravan

+0

@sravan: Oui, si vous pouvez exécuter votre programme sous gdb, control-C est un moyen de l'interrompre afin que vous puissiez examiner la pile d'appels. Une autre méthode consiste à exécuter le programme et, pendant son exécution, utilisez le programme pstack ou lsstack. Vous devrez peut-être boucler une boucle autour de votre programme pour le faire "fonctionner" assez longtemps pour prendre vos échantillons. –

Questions connexes