Comme je travaille plus ou moins dans ce domaine, je ne peux que clicker sur le lien "Pertinent" de otn message et tes precedants.
Pour eviter les trolls, je ne vais pas preciser l'architecture sur laquelle je travaille. Mais je voudrais juste dire que je suis assez souvent face a des cas ou 30% du temps d'execution de l'appli est perdu du a des problemes de cache. Pour les fixer, il faut soit:
- reduire les latences en travaillant sur l'organisation des donnees en memoire de telles sortes que les donnees susceptibles d'etre utilisee en meme temps soient sur des espaces contigus
- rendre le programme tolerant a ces latences en utilisant le fameux "Prefetch", ce qui necessite de pouvoir calculer en avance les adresses memoires utilisees.
Dans les deux cas:
- Il faut modifier le code source
- Il faut avoir un minimum de control sur l'organisation memoire des donnees manipulees.
Cela a deux consequences:
- On perd en lisibilite du code. Meme si on peut trouver des solutions "propres", le nouveau code correspond a du "bruit" par rapport a l'algorithm lui meme
- Tous les langages ne le permettent pas. Plus specialement les langages de haut niveau ne le permettent pas.
Certes, tout le monde y gagnerai si cela etait automatise de telle sorte que cela ne soit pas apparent au niveau du code source. Malheureusement c'est loin d'etre le cas ou du moins ce n'est pas encore efficace.
[^] # Re: La memoire goulot d'etranglement
Posté par mdlh . En réponse au journal Comment résoudre la "crise du logiciel" ?. Évalué à 8.
Pour eviter les trolls, je ne vais pas preciser l'architecture sur laquelle je travaille. Mais je voudrais juste dire que je suis assez souvent face a des cas ou 30% du temps d'execution de l'appli est perdu du a des problemes de cache. Pour les fixer, il faut soit:
- reduire les latences en travaillant sur l'organisation des donnees en memoire de telles sortes que les donnees susceptibles d'etre utilisee en meme temps soient sur des espaces contigus
- rendre le programme tolerant a ces latences en utilisant le fameux "Prefetch", ce qui necessite de pouvoir calculer en avance les adresses memoires utilisees.
Dans les deux cas:
- Il faut modifier le code source
- Il faut avoir un minimum de control sur l'organisation memoire des donnees manipulees.
Cela a deux consequences:
- On perd en lisibilite du code. Meme si on peut trouver des solutions "propres", le nouveau code correspond a du "bruit" par rapport a l'algorithm lui meme
- Tous les langages ne le permettent pas. Plus specialement les langages de haut niveau ne le permettent pas.
Certes, tout le monde y gagnerai si cela etait automatise de telle sorte que cela ne soit pas apparent au niveau du code source. Malheureusement c'est loin d'etre le cas ou du moins ce n'est pas encore efficace.