Question

Je dois améliorer le débit du système.

Le cycle habituel d'optimisation a été fait et nous avons déjà atteint 1,5x un meilleur débit.

Je commence maintenant à se demander si je peux utiliser la sortie cachegrind pour améliorer le débit du système.

Quelqu'un peut-il me indiquer comment commencer à ce sujet?

Ce que je comprends est que nous devons nous assurer le plus souvent les données utilisées doivent être conservés assez petit pour qu'il reste dans le cache L1 et la prochaine série de données doit tenir dans la L2.

Est-ce le bon sens que je prends?

Était-ce utile?

La solution

It `s vrai que la sortie de cachegrind en elle-même ne donne pas trop d'informations comment aller sur l'optimisation du code. Il faut savoir comment l'interpréter et ce que vous dites au sujet des données ajustées en L1 et L2 est en effet la bonne direction.

Pour bien comprendre comment les modèles d'accès mémoire influent sur la performance, je vous recommande la lecture d'un excellent document "Ce que tout programmeur qu'il faut savoir sur la mémoire " par Ulrich Drepper, le mainteneur GNU libc.

Autres conseils

Si vous éprouvez des difficultés analyse la sortie cachegrind, regardez dans KCacheGrind (il devrait être disponible dans votre distro de choix). Je l'utilise et trouve très utile.

Selon la documentation Cachegrind , les détails vous sont donnés par cachegrind sont le nombre de défauts de cache pour une partie donnée de votre code. Vous devez savoir sur la façon dont fonctionnent les caches sur l'architecture que vous ciblez afin que vous sachiez comment corriger le code. En pratique, cela signifie rendre les données plus petites ou changer le modèle d'accès de certaines données afin que les données mises en cache est encore dans le cache. Cependant, vous devez comprendre les données de votre programme et l'accès aux données avant de pouvoir agir sur l'information. Comme il est dit dans le manuel,

  

En bref, Cachegrind peut vous dire où certains des goulots d'étranglement dans votre code sont, mais il ne peut pas vous dire comment les corriger. Vous devez travailler que pour vous-même. Mais au moins vous avez les informations!

1,5x est une belle accélération. Cela signifie que vous avez trouvé quelque chose qui a pris 33% du temps que vous pouvez vous débarrasser. Je parie que vous pouvez faire plus, même avant de descendre à des problèmes de bas niveau comme la mémoire cache de données. Ceci est un exemple de la façon dont. En fait, vous pourriez avoir problèmes de performance supplémentaires (et les possibilités de speedup) qui ne sont pas grand avant, comme 25% disent. Eh bien, avec le SpeedUp 1,5x, que 25% est maintenant 37,5%, il est donc « vaut plus » que c'était. Souvent, un tel problème est sous la forme d'une fonction mi-pile des appels qui demande un travail qui, une fois que vous savez combien il en coûte, vous pouvez décider de n'est pas tout à fait nécessaire. Depuis kcachegrind n'indique pas précisément vraiment ceux-ci, vous ne pouvez pas le réaliser est un problème.

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