[SOS] Allocation Memoire Physique & Macro (List.h)

Romain LABBE labbe.romain at wanadoo.fr
Dim 27 Nov 14:19:27 CET 2005


Saut David,

Merci pour ces précisions,

*Je ne savais pas que: condition ? True : False; etait du C pûr !

*Parfaite l'explication sur l'odre des pages et l'optimisation.

A++

Romain

> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org 
> [mailto:sos-bounces at the-doors.enix.org] De la part de David Decotigny
> Envoyé : dimanche 27 novembre 2005 12:53
> À : SOS mailing-list
> Objet : Re: RE : [SOS] Allocation Memoire Physique & Macro (List.h)
> 
> 
> 
> Bonjour,
> 
> Je vais essayer de rattraper plus d'un mois de retard, pas 
> facile. Par avance desole si je repete des choses qui ont ete 
> dites 3 semaines plus tard par quelqu'un d'autre.
> 
> romain wrote:
> > Question 1:
> > -----------
> > 
> > b = (a > 2) ? 1 : 0;
> > Ok on peut donc écrire cette sorte de syntaxe alors:  condition ? 
> > Retour si vérifié : Retour si non-vérifié; Merci c'est l'impide 
> > désormais !
> 
> Oui, pour detailler : romain pensait que cette syntaxe avait 
> a voir avec les macros. Non, cette syntaxe 
> (condition)?valeur_alors:valeur_sinon
> n'est pas purement "macro", c'est du C tout ce qu'il y a de 
> plus normal. Comme tout ce qui est "C", c'est un peu crade et 
> c'est facile de faire des erreurs avec. Donc a utiliser avec 
> precaution.
> 
> > Question 2:
> > -----------
> > 
> > -Les pages plus neuves ou dernierement libérées en début de queue 
> > libre -Les pages dernieremet alouées en  fin queue utilisé
> 
> Tout a fait. C'est volontaire si on alloue a partir de la 
> tete et si on libere vers la tete de la liste (ou l'inverse, 
> on me corrigera) : comme ca, on reutilise ce qu'on a le plus 
> recemment libéré. On espere que ce comportement va etre bon 
> vis a vis des caches : on a de bonnes chances ainsi d'acceder 
> a des donnees qui ont deja une place au chaud dans les 
> differents caches memoires. En effet, certaines politiques de 
> remplacement de cache sont de type "LRU" ("Least Recently 
> Used"). Dans ces politiques, les elements qui sont vires du 
> cache en cas de besoin sont ceux qui sont les moins recemment 
> utilises. Cette politique est la plus couramment implantee 
> dans les caches associatifs ou associatifs par ensemble, 
> l'architecture Intel en utilise quelques uns.
> 
> Vous aurez remarque que j'ecris "on espere". Tout simplement 
> parce que tout ce qui releve de l'optimisation est pur pari : 
> de temps en temps ca sera efficace, de temps en temps ca ne 
> le sera pas. Tout ça parce qu'on ne possede pas la faculte de 
> clairvoyance : l'optimisation "optimale" reviendrait en effet 
> a prevoir l'avenir ("clairvoyance" en algo) et a prendre la 
> meilleure decision sur la base de cette connaissance. Ne 
> connaissant que le passe, tout ce qu'on peut faire est 
> prendre les meilleurs paris sur ce qui va se passer en 
> fonction de ce qui s'est deja passe. L'art de l'optimisation 
> revient ensuite a faire un compromis entre la justesse du 
> pari et l'effort consenti (ici en terme de complexite des 
> algos, en electronique on s'interesserait plutot a une 
> surface de silicium necessaire).
> 
> Tout ca pour dire que cette cuisine est volontaire et, la ou 
> c'est pas trop complique, on essaiera de reflechir 2 secondes 
> avant de pondre le code : en l'occurence, je me suis juste 
> pose la question "en tete en ou en queue ?". La reflexion 
> n'est pas compliquee, le code ne l'est pas davantage, donc 
> c'est tout benef. Apres, est-ce que ca se comportera mieux 
> ?... "on espere" que ca ne contrariera pas trop les caches, 
> que ça ira meme dans leur sens, c'est tout.
> 
> Mais ne soyons pas pretentieux : de toute facon on ne gagnera 
> que quelques nanosecondes sachant que le code de sos est un 
> ramassis de choses pas optimisees DU TOUT. Bref, c'est un peu 
> comme optimiser 2+2 avant de factoriser un nombre a 65445465 
> decimales. Donc, faut bien reconnaitre, ce genre 
> d'optimisation est /vraiment/ anecdotique. Parce que nous 
> avons privilegie la clarte du code, n'utilisant quelques 
> optimisations simples que la ou le code ne s'en trouvait 
> pas/peu changé, en etant convaincu que ca n'apportera rien 
> dans le cas de sos.
> 
> Souvent, l'optimisation DOIT se jouer sur des considerations 
> de structures de donnees avant de se jouer sur des 
> considerations de cache: utilise-t'on les meilleures 
> structures de donnees pour les algos qu'on veut derouler ? Et 
> là, dans bien des cas nous n'utilisons pas les meilleures 
> solutions dans SOS (en toute conscience). Par exemple, nous 
> classons les plages d'adresses virtuelles des processus dans 
> des listes chainees. C'est une heresie : l'insertion et la 
> recherche d'une region virtuelle dans une telle liste seront 
> largement sous-optimales : si on double le nombre de regions 
> virtuelles, on double le temps pris par ces operations. Il 
> suffit de savoir qu'il existe des algos qui ne feraient 
> qu'ajouter un petit laps de temps supplementaire pour se 
> rendre compte qu'une optimisation de cache n'a alors 
> absolument plus aucun sens... on va gagner des nanosecondes a 
> certains endroits sachant qu'a d'autres on va perdre des 
> microsecondes (ou des millisecondes). Dans SOS, il a fallu 
> faire ce compromis : optimiser la ou ca mange pas de pain (ie 
> ca ne se voit pas de trop), faire clair plutot qu'optimiser 
> la ou ca aurait compliqué inutilement la lecture du code. Le 
> principal est d'en avoir conscience.
> 
> Bonne journee,
> 
> -- 
> http://david.decotigny.free.fr/ 
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org 
> http://the-doors.enix.org/cgi-> bin/mailman/listinfo/sos
> 




Plus d'informations sur la liste de diffusion Sos