2010-11-17 4 views
1

Je travaille sur un logiciel à grande échelle. Il est piloté par la mémoire/les données se déplaçant entre une énorme quantité de modèles compliqués.Une idée pour améliorer les performances du cache pour un programme à grande échelle?

Parfois, le cache est trop haut et les performances ne sont pas bonnes. Mais le scénario me semble trop compliqué. Je veux juste obtenir quelques idées générales sur la façon de réduire le manque de cache et améliorer les performances de la mémoire.

Apprendre pour un commentaire.

Merci!

+1

Je ne pense pas que ce soit une mauvaise question, mais c'est une question vaste, donc les réponses que vous obtiendrez sont tout aussi vagues. –

Répondre

1

L'outil le plus précieux pour la recherche des goulots d'étranglement de performance est mesure. Vous devez déterminer quel code a le problème et puis mesurer il pour les échecs de cache, si cela s'avère en effet être le problème. En ce qui concerne les idées générales, vous aurez besoin de réduire le taux d'échec. Ainsi, lorsque vous enregistrez des données dans la mémoire, vous devez travailler autant que possible dessus avant de les quitter, plutôt que de diffuser des données. Comparer à titre d'exemple,

for i in data: 
    f(i) 

for i in data: 
    g(i) 

for i in data: 
    h(i) 

qui traverse la liste trois fois. Il peut être possible d'écrire ceci comme suit:

for i in data: 
    h(g(f(i))) 

abaisser le cheminement à un seul instant - ce qui entraîne généralement moins de ratés.

Une autre astuce digne de ce nom est de penser à la structure de données. Les modèles d'accès d'un arbre binaire sont très différents de ceux d'une table de hachage. Mais établissez d'abord la mesure pour être sûr que vous avez réussi à rattraper le retard - et que ce sont les échecs qui sont votre problème. Enfin, même avec des taux d'échecs faibles, vous pouvez envisager de réduire la bande passante de la mémoire en général. Si vous déplacez beaucoup et beaucoup de données, il a tendance à être lent - puisque les vitesses de mémoire se développent à un taux beaucoup plus faible par rapport au nombre de transistors.

0

Ceci est un sujet géant sans détail dans la question. Donc, je suggère d'acheter plus de RAM.

+0

Je dirais: acheter plus de RAM et semplifier les modèles compliqués. – Simone

1

Il se peut que le cache soit manquant, mais ne supposez pas que c'est le problème. Pour connaître les problèmes et les résoudre, voir this example. D'après mon expérience, plus le logiciel est gros, plus les problèmes sont importants (et les possibilités de l'accélérer).

Souvent, le logiciel a été développé sur des machines rapides, avec de petits jeux de données en entrée, de sorte que les développeurs n'ont jamais ressenti le besoin de profiler et de supprimer les bogues de performance. Les bonnes nouvelles est qu'ils sont tous là, attendant juste que vous les trouviez et les retiriez, obtenant une accélération massive, pour laquelle vous pouvez prendre le crédit!

Questions connexes