Zerosquare (./24029) :
(aaahhh, si on pouvait avoir de la SRAM pas chère on-chip... on se débarrasserait de plein de problèmes liés au cache, au pipelining...)
--> c'est le cas des SPU du Cell

Zerosquare (./24029) :
GC > j'ai juste survolé l'article, mais ça ne m'a pas semblé très clair non plus.Je suis surpris qu'un problème aussi fondamental existe encore sur les processeurs actuels, ça fait longtemps que la mise en cache est une question étudiée en info... Ou alors il n'est pas faisable en pratique d'utiliser de meilleures approches ?
L'article parle d'un probleme bien connu depuis le debut des caches, et inherant a leur fonctionnement: l'aliasing des cache-lines.
google "cache line aliasing" et vous trouverez probablement une chiee de descriptions du truc.
par exemple, si tu essaye de load plein de cache-lines qui ont une distance de genre 4K entre elles, tu pourra en load beaucoup moins avant qu'elles ne se degagent mutuellement que si tu les load avec un stride different non multiple de 4K.
apres, l'article est un peu foireux dans le sens ou quand tu lis le titre et certaines des phrases, t'as l'impression que le mec te conseille de volontairement desaligner tes pointeurs.
il n'est absolument pas question de desalignement dans le sens adresses impaires !
le plus gros alignement "safe" que tu peux donner tout en evitant le cache-line aliasing, ca reste la taille d'une cache-line. ie: sur pc, un pointeur aligne a 64 octets.
donc si t'aligne des pointeurs a 16 octets pour etre SSE/SIMD friendly, t'es largement tranquille.... pour peu que t'aie pas la malechance que ton allocateur te retourne deux ptr distants du mauvais nombre d'octets depuis lesquels tu doive lire en meme temps.
Par exemple, au taff on a souvent le cas de devoir manipuler plusieurs "streams" de donnees en meme temps.
typiquement on a genre 3/4 streams depuis lesquels on lit simultanement a l'interieur d'une boucle.
dans ces cas la, on alloue tous ces streams dans un seul gros bloc de memoire, aligne a une page memoire. et on offset chacun de ces streams au sein de ce bloc memoire de sorte a les desaligner d'un multiple d'une cache-line, pour eviter le cache-line aliasing. mais le ptr de debut de chaque stream reste quand meme aligne a 64b !
bref. C'est rarement un vrai probleme si tu laisse ton allocateur t'allouer tes trucs. ca peut devenir un probleme quand tu crois bien faire et que t'aligne tous tes arrays a une puissance de 2 trop grosse. mais en aucun cas il faut aller manuellement "desaligner" dans le sens adresse impaire ou quoi.