2012-06-25 3 views
1

Я знаю о понятиях типа или структуры, выравнивания, упаковки, проблем с заполнением и т. Д. Я реализовал единый связанный список, где каждый узел занимает примерно 250 байт, то есть примерно в 4 раза превышает размер строки кэша 64 байта. Моя машина - 64-битная архитектура Intel.Связанный с кешем сопоставленный список

Теперь один связанный список по существу является указателем, преследующим структуру данных и, следовательно, страдает от большого количества промахов в кэше. Чтобы уменьшить пропуски кэша, я выровнял каждый узел структуры данных с помощью функции * posix_memalign * для кеширования границы 64 байта. Теперь все узлы связанного списка выравниваются по кешу.

После этого я обнаружил, что потребление памяти связанного списка значительно увеличилось, а производительность фактически ухудшилась. Может ли кто-нибудь объяснить, что может быть неправильным?

ответ

0

Я не знаю, что таНос вы используете, но это от tcmalloc

// For use by exported routines below that want specific alignments 
// 
// Note: this code can be slow for alignments > 16, and can 
// significantly fragment memory. The expectation is that 
// memalign/posix_memalign/valloc/pvalloc will not be invoked very 
// often. This requirement simplifies our implementation and allows 
// us to tune for expected allocation patterns. 
Смежные вопросы