Envoyé par
Møgluglu
Le compilo non, mais l'OS si.
De toute façon pour des accès séquentiels je prédis que ça ne changera strictement que dalle : chaque niveau de TLB est dimensionné pour couvrir tout le niveau de cache correspondant même avec des pages de 4K. Les cas où tu risques de thrasher tes TLB sont quand tu as des données sparse (mais pas trop, genre avec des lignes de cache pleines mais des pages de 4K creuses).
Ben j'ai fait les tests et ça change que d'alle. Pire, ça ralentit à mort si on fait pas tout bien.
Pour le fun:
Code:
#define ARRAY_MMAP_ALLOC(TAB, DIM, DATATYPE) \
TAB = (DATATYPE *) mmap(0, DIM * sizeof(DATATYPE), \
PROT_READ|PROT_WRITE, \
MAP_PRIVATE|MAP_ANONYMOUS, \
-1, 0); \
\
MSG_ASSERT( TAB != MAP_FAILED, "mmap allocation failed" ); \
posix_memalign( (void**) &TAB, 64, N * sizeof(DATATYPE) ); \
madvise(TAB, DIM * sizeof(DATATYPE), MADV_HUGEPAGE); \